【问题标题】:Cygwin save package selections for later reinstallCygwin 保存软件包选择以供以后重新安装
【发布时间】:2018-03-31 11:17:01
【问题描述】:

我想知道是否有办法保存 cygwin 的当前包选择,以便以后重新安装或移植到不同的系统上。

真的很棒:

  • 运行命令导出现有系统上已安装软件包的列表
  • setup-x86_64.exe --list list.txt等方式将列表传递给另一个系统上的安装程序

我不认为设置有这样的开关,所以即使是任何类型的脚本或批处理都可以朝这个方向工作。

由于需要的包数量非常多,应该无人看管才能认为它是一个好的解决方案!

像这样完成快速重新安装的最佳方法是什么?

【问题讨论】:

    标签: windows scripting cygwin


    【解决方案1】:

    已安装软件包的列表可通过cygcheck 获得。 Setup 不接受列表选项,但您可以使用 -P 指定列表

    以下代码与-A 选项一起使用时将创建 一个精心制作的cyg-reinstall-${Arch}.bat 批处理文件来安装所有 系统中存在的包。

    #!/bin/bash
    # Create a batch file to reinstall using setup-{ARCH}.exe
    # all packages reported as incomplete
    
    print_error=1
    
    if [ $# -eq 1 ]
      then
        if [ $1 == "-I" ]
        then
          lista=$(mktemp)
          cygcheck -c | grep "Incomplete" > $lista
          print_error=0
        fi
        if [ $1 == "-A" ]
        then
          lista=$(mktemp)
          cygcheck -cd | sed -e "1,2d" > $lista
          print_error=0
        fi
    fi
    
    if [ $# -eq 2 ]
      then
        if [ $1 == "-f" ]
        then
          lista=$2
          print_error=0
        fi
    fi
    
    # error message if options are incorrect.
    if [ $print_error -eq 1 ]
    then
            echo -n "Usage : " $(basename $0)
            echo " [ -A | -I | -f filelist ]"
            echo "  create cyg-reinstall-{ARC}.bat from"
            echo "  options"
            echo "    -A  :  All packages as reported by cygcheck"
            echo "    -I  :  incomplete packages as reported by cygcheck"
            echo "    -f  :  packages in filelist (one per raw)"
            exit 1
    fi
    
    if [ $(arch) == "x86_64" ]
    then
      A="x86_64"
    else
      A="x86"
    fi
    # writing header
    echo -n -e "setup-${A}.exe  " > cyg-reinstall-${A}.bat
    
    # option  -x remove and  -P install
    # for re-install packages we need both
    if [ $1 == "-I" ]
    then
      awk 'BEGIN{printf(" -x ")} NR==1{printf $1}{printf ",%s", $1}' ${lista} >> cyg-reinstall-${A}.bat
    fi
    
    awk 'BEGIN{printf(" -P ")} NR==1{printf $1}{printf ",%s", $1} END { printf "\r\n pause "}' ${lista} >> cyg-reinstall-${A}.bat
    
    # execution permission for the script
    chmod +x cyg-reinstall-${A}.bat
    

    【讨论】:

    • 您的解决方案非常出色!正是我想要的。我只需要编辑生成的批处理来添加我最喜欢的站点-s 和我的局域网的cygwin local-package-dir -l。如果您可以在构建列表之前编辑脚本以询问此类详细信息,那将是完美的,因为此时也可以添加无人值守的-q。此外,批处理是在可执行文件名称和第一个“-P”开关之间使用三个空格生成的,但这是纯粹的形式。
    • 我在脚本的第 52 行添加了我的个人偏好,例如本地目录和首选本地镜像:echo ...。它就像一个魅力。
    • 这非常有用,感谢您发布此内容。经过 25 年的 cygwin 我希望这更容易做到,但你是一个救世主
    • 按预期工作。
    猜你喜欢
    • 1970-01-01
    • 2017-10-24
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    相关资源
    最近更新 更多