我有一个Homebrew安装$HOME/brew,并且历史上它运行良好.不幸的是,随着时间的推移,Homebrew对外部安装的容忍度越来越低/usr/local.各种公式对安装前缀做出了很难的假设,并且使用非标准前缀无法正常工作(即未经过测试).这个brew doctor命令甚至到目前为止都在警告:
Warning: Your Homebrew is not installed to /usr/local
You can install Homebrew anywhere you want, but some brews may only build
correctly if you install in /usr/local. Sorry!
Run Code Online (Sandbox Code Playgroud)
因此,我现在想将我的Homebrew安装迁移到/usr/local.但是,我不喜欢mv所有的文件,因为我怀疑这会导致问题.我在Homebrew网站上找不到任何说明,或者在此处将现有安装迁移到新前缀.当然,我可以卸载Homebrew然后重新安装它,但我不想重建我的所有桶.
是否存在执行此类迁移的现有脚本或文档化实践?
或者由于链接二进制文件中的硬编码绝对路径,这是不可能的?
Wed*_*ood 35
现代的方法是使用自制软件包.
brew tap Homebrew/bundle
brew bundle dump # Creates 'Brewfile' in the current directory
# later ...
brew bundle # Installs packages listed in 'Brewfile'
Run Code Online (Sandbox Code Playgroud)
xuh*_*dev 16
我刚刚编写了一个脚本来实现将自制程序包迁移到新系统的目标,这也适用于您的情况(命名backup-homebrew.sh):
#!/bin/bash
echo '#!/bin/bash'
echo ''
echo 'failed_items=""'
echo 'function install_package() {'
echo 'echo EXECUTING: brew install $1 $2'
echo 'brew install $1 $2'
echo '[ $? -ne 0 ] && $failed_items="$failed_items $1" # package failed to install.'
echo '}'
brew tap | while read tap; do echo "brew tap $tap"; done
brew list | while read item;
do
echo "install_package $item '$(brew info $item | /usr/bin/grep 'Built from source with:' | /usr/bin/sed 's/^[ \t]*Built from source with:/ /g; s/\,/ /g')'"
done
echo '[ ! -z $failed_items ] && echo The following items were failed to install: && echo $failed_items'
Run Code Online (Sandbox Code Playgroud)
您应该首先在原始系统上运行此脚本以生成还原脚本:
./backup-homebrew.sh >restore-homebrew.sh && chmod +x restore-homebrew.sh
Run Code Online (Sandbox Code Playgroud)
然后,在新系统上安装Homebrew之后(在您的情况下是相同的系统),只需运行restore-homebrew.sh以安装原始系统上的所有软件包.
此脚本优于@ctrueden给出的优点是该脚本还会尝试备份安装软件包时使用的安装选项.
更详细的描述在我的博客中.
| 归档时间: |
|
| 查看次数: |
8851 次 |
| 最近记录: |