如何在Cygwin上安装使用cygport构建的软件包(以便稍后卸载)?

如何在Cygwin上安装使用cygport构建的软件包(以便稍后卸载)?,cygwin,Cygwin,我使用cygport构建了一个包;但是我注意到,cygport[packagename.cygport]install命令并没有安装在cygwin文件系统中,而是安装在源代码构建目录的子目录中;因此,可执行文件不在cygwin路径中,您不能按名称调用它们 我看到: 因此,在大多数情况下,只需将归档文件解压缩到 根文件系统,以便对其进行测试 您可以自行安装,也可以通过下降到构建目录并执行“make”来安装 “安装”或仅从生成目录运行它:-) 因此,现在我有了packagename.tar.xz

我使用cygport构建了一个包;但是我注意到,
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通常在该目录中下载包):

现在,启动Cygwin
setup.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)