如何在Cygwin上安装使用cygport构建的软件包(以便稍后卸载)?
我使用cygport构建了一个包;但是我注意到,如何在Cygwin上安装使用cygport构建的软件包(以便稍后卸载)?,cygwin,Cygwin,我使用cygport构建了一个包;但是我注意到,cygport[packagename.cygport]install命令并没有安装在cygwin文件系统中,而是安装在源代码构建目录的子目录中;因此,可执行文件不在cygwin路径中,您不能按名称调用它们 我看到: 因此,在大多数情况下,只需将归档文件解压缩到 根文件系统,以便对其进行测试 您可以自行安装,也可以通过下降到构建目录并执行“make”来安装 “安装”或仅从生成目录运行它:-) 因此,现在我有了packagename.tar.xz
cygport[packagename.cygport]install
命令并没有安装在cygwin文件系统中,而是安装在源代码构建目录的子目录中;因此,可执行文件不在cygwin路径中,您不能按名称调用它们
我看到:
因此,在大多数情况下,只需将归档文件解压缩到
根文件系统,以便对其进行测试
您可以自行安装,也可以通过下降到构建目录并执行“make”来安装
“安装”或仅从生成目录运行它:-)
因此,现在我有了packagename.tar.xz
和packagename.hint
-我不能将它们与Cygwin setup-x86_64.exe程序一起使用吗(这样,当我在setup中查找包名时,我就有了一个标记的条目)
如果我只是通过将packagename.tar.xz
解包到Cygwin根文件系统中来“安装”,那么如何“卸载”呢
cygport
是否更改包的make install
的安装路径?如果没有,那么我想makeinstall
是一个选项,因为那时我也应该有makeuninstall
。cygport
是一个工具,用于构建可以通过Cygwin
安装-$ARCH.exe安装来安装的软件包
您可以创建本地设置结构,并使用calm
包创建
所需的setup.ini文件
$ cygcheck -f /usr/bin/mksetupini
calm-20200220-1
创建一个与您下载的缓存类似的网站目录,创建一个ARCH/release
目录,并为您感兴趣的软件包复制dist
的内容。我使用这样的脚本来准备安装目录
#!/bin/bash
cd /pub/altervista/
rm x86/setup.ini x86_64/setup.ini
for i in x86 x86_64
do
mksetupini --arch ${i} --inifile=${i}/setup.ini --releasearea=. --disable-check=missing-required-package,missing-depended-package
bzip2 <${i}/setup.ini >${i}/setup.bz2
xz -6e <${i}/setup.ini >${i}/setup.xz
done
然后您可以从该网站的本地目录安装。一个
假的网站可以正常工作。好的,找到并按照以下说明操作:
首先通过Cygwin的setup.exe安装calm
(对于我来说,setup-x86_64.exe
):
那么,我有:
$ which mksetupini
/usr/bin/mksetupini
注意,我已经:/cygdrive/d/Downloads/cygwin_packages/http%3a%2f%2fcygwin.mirror.constant.com%2f/x86_64
其中cygwin存储下载的软件包;该目录具有release
subdir和setup.ini
文件
因此,现在我可以为我的自定义包创建一个目录:
$ mkdir /cygdrive/d/Downloads/cygwin_packages/cygwin-custom
$ mkdir -p /cygdrive/d/Downloads/cygwin_packages/cygwin-custom/x86_64/release
请注意,在我的源代码生成文件夹中,我有一个子文件夹dist
,其中包含打包:
$ ls -la [packagename]-[version]-1bl1.x86_64/dist/[packagename]/
total 2557
drwxr-xr-x 1 user None 0 Mar 21 18:26 .
drwxr-xr-x 1 user None 0 Mar 21 18:26 ..
-rw-r--r-- 1 user None 373 Mar 21 18:26 [packagename]-[version]-1bl1.hint
-rw-r--r-- 1 user None 177772 Mar 21 18:26 [packagename]-[version]-1bl1.tar.xz
-rw-r--r-- 1 user None 2430900 Mar 21 18:26 [packagename]-[version]-1bl1-src.tar.xz
drwxr-xr-x 1 user None 0 Mar 21 18:26 [packagename]-debuginfo
drwxr-xr-x 1 user None 0 Mar 21 18:26 lib[packagename]0
drwxr-xr-x 1 user None 0 Mar 21 18:26 lib[packagename]-devel
我可以将其复制到cygwin custom
的arch/release子目录,然后将目录更改为cygwin custom
:
$ cp -a [packagename]-[version]-1bl1.x86_64/dist/[packagename] /cygdrive/d/Downloads/cygwin_packages/cygwin-custom/x86_64/release/
$ pushd /cygdrive/d/Downloads/cygwin_packages/cygwin-custom
现在,请注意,如果我像上面的网页那样调用mksetupini
,它将失败:
$ mksetupini --arch x86_64 --inifile=x86_64/setup.ini --releasearea=.
mksetupini: package '[packagename]' version '[version]-1bl1' requires nonexistent or errored package 'cygwin'
mksetupini: package '[packagename]' version '[version]-1bl1' requires nonexistent or errored package 'libgcc1'
mksetupini: package '[packagename]' version '[version]-1bl1' requires nonexistent or errored package 'libreadline7'
...
。。。并且不会创建文件setup.ini
然后我想我应该像上面的网页那样进行符号链接:
$ for ARCH in x86_64 noarch ; do
mkdir -p ${ARCH}/release
cd ${ARCH}/release
ln -s /cygdrive/d/Downloads/cygwin_packages/http%3a%2f%2fcygwin.mirror.constant.com%2f/${ARCH}/release/* .
cd ../..
done
$ mksetupini --arch x86_64 --inifile=x86_64/setup.ini --releasearea=.
mksetupini: no .hint files in ./noarch/release/adwaita-icon-theme but has files: adwaita-icon-theme-3.26.1-1.tar.xz
mksetupini: no .hint files in ./noarch/release/base-cygwin but has files: base-cygwin-3.8-1.tar.xz
mksetupini: no .hint files in ./noarch/release/base-files but has files: base-files-4.3-2.tar.xz
...
mksetupini: package '[packagename]' version '[version]-1bl1' requires nonexistent or errored package 'cygwin'
mksetupini: package '[packagename]' version '[version]-1bl1' requires nonexistent or errored package 'libgcc1'
mksetupini: package '[packagename]' version '[version]-1bl1' requires nonexistent or errored package 'libreadline7'
mksetupini: package '[packagename]' version '[version]-1bl1' depends nonexistent or errored package 'cygwin'
...
。。。这也不会创建setup.ini
最后,我发现前面提到的开关--okmissing required package
-因此,最后这个命令:
$ mksetupini --arch x86_64 --inifile=x86_64/setup.ini --releasearea=. --okmissing required-package
。。。将最终创建setup.ini
——它将只包含我们定制的包,因为它们是唯一具有.hint
文件的包(我在http%3a%2f%2fcygwin.mirror.constant.com%2f
目录中没有任何.hint
文件,cygwin通常在该目录中下载包):
现在,启动Cygwinsetup.exe
,当选择屏幕为:“Cygwin安装-选择安装类型”时;这里从“从Internet(…)安装”切换到“从本地目录安装”;在下一步>保持根目录不变;在下一步>选择本地包目录:我选择了D:\Downloads\cygwin\u packages\cygwin custom
-在下一步>:选择包:查看完整,然后[packagename]列在那里。。。并且可以安装—并且依赖关系也可以解决:
Install [packagename] [version]-1bl1
Install lib[packagename]0 [version]-1bl1 (automatically added)
最后,在安装之后,我可以在Cygwin bash shell中直接按名称调用[packagename].exe
这是一个不错的过程,但如果找不到正确的文档,可能会有点牵扯进来……谢谢@matzeri-我终于找到了同样的方法,当你发布你的答案时,我正在写我的答案!
$ mksetupini --arch x86_64 --inifile=x86_64/setup.ini --releasearea=. --okmissing required-package
$ cat x86_64/setup.ini
# This file was automatically generated at 2020-03-21 19:42:00 CET.
#
# If you edit it, your edits will be discarded next time the file is
# generated.
#
# See https://sourceware.org/cygwin-apps/setup.ini.html for a description
# of the format.
release: cygwin
arch: x86_64
setup-timestamp: 1584816120
@ [packagename]
sdesc: "Blah blah ..."
...
Install [packagename] [version]-1bl1
Install lib[packagename]0 [version]-1bl1 (automatically added)