1)列出已安装ports列表,保存在一个文件中
portmaster --list-origins > ~/installed-port-list
2)更新ports tree
portsnap fetch update
3)删除所有ports
root@ywops:~ # portmaster -ty --clean-distfiles
===>>> Gathering distinfo list for all ports
(This will take several minutes)
root@ywops:~ # portmaster -Faf
===>>> Starting check of installed ports for available updates
===>>> Waiting for 5 distfile fetches to finish
===>>> Distfile fetching is complete
root@ywops:~ # pkg delete -afy
#-a,--all 删除所有已安装的程序包
#-f, --force 强制删除包,尽管仍未解决依赖关系,与-a结合使用
#-y, --yes 在删除包之前被要求确认时自动回答为是
4)如果以下目录有内容,需要先清理
rm -rf /usr/local/lib/compat/pkg
5)备份/usr/local目录下重要文件, 比如/usr/local/etc下的配置文件
tar -czf repos.tar.gz /usr/local/etc/pkg/repos/*
#这个目录主要存放pkg源文件
出现以下错误:
tar: Removing leading '/' from member names
分析原因:tar默认使用的是相对路径,增加P选项强制使用绝对路径
解决方法:
tar czfP repos.tar.gz /usr/local/etc/pkg/repos/*
6)检查/usr/local 和 /var/db/pkg 目录,确保是空的
rm -rf /usr/local/*
rm -rf /var/db/pkg/*
7)安装 ports-mgmt/pkg 和 ports-mgmt/portmaster
cd /usr/ports/ports-mgmt/pkg; make install clean; rehash
cd /usr/ports/ports-mgmt/portmaster; make install clean; rehash
8)从 ~/installed-port-list文件中去除这两个文件,因为已经安装,不用再重复安装
root@ywops:~ # cat installed-port-list
'''
...
ports-mgmt/pkg #删除
ports-mgmt/portmaster #删除
'''
9)用portmaster重新安装 installed-port-list内列出的软件包
portmaster --no-confirm `cat ~/installed-port-list`
#--no-confirm 在安装过程中不需要确认,但还是会提示选择需要的配置项
此过程编译时间很长。推荐使用pkg管理软件包。