我想升级 Gentoo 的旧安装(2018)。我尝试安装当前的 portage 快照,但我遇到了(太多)无法解决的包冲突。
因此,我认为解决方案可能是使用旧的 portage 快照以较小的步骤进行升级,例如以两个月为间隔。这样一来,可能发生的冲突应该还是可以控制的。
我发现了一些旧的 portage 快照这里但最大的只有一个月大。我在几个搜索引擎和论坛上搜索了portage快照档案,但我找不到任何东西。
Gentoo 是否维护这样的档案?如果有,我在哪里可以找到它?另外,据我所知,portage不包含包源。那么,包源也存档了吗?
答案1
如果您足够幸运,在更新损坏之前安装git
在系统中,您可以:
cd /usr
mv portage portage-recent
git clone https://github.com/gentoo/gentoo portage
cd portage
然后找到最适合您的替代方案来回到过去:
通过回到历史git-log
git log
然后向下翻页或进行搜索(如果您使用 vim,正则表达式可能会有所帮助)并找到接近上次成功更新时间的提交。对我来说,时间大约是 2021 年 3 月,因此我进行了搜索,/Mar [0-9]+ [0-9:]+ 2021
直到其相邻的提交也在 2021 年 3 月之前或接近 2021 年 3 月。
一旦找到您喜欢的提交,请使用以下命令检查它
git checkout <commit-hash>
就我而言是
git checkout 70b8ef2605acc363ea1a0347f9df23fa92590847
然后您可以继续升级软件包。然后提前一点提交,依此类推,直到您了解最新情况。
Git-签出数据
此论坛帖子中建议了另一种方法:Portage 历史快照消失的第二篇文章
git checkout $(git rev-list -n 1 --first-parent --before="2021-03-31" master)
那么它应该及时带您到达该部分。
分块返回
假设您发现将 200 次提交返回到 portage 当前点的当前位置是您获得合理工作更新阶段的最佳位置(不要太多,也不要太破坏,也许在主要配置文件升级之前)。然后,您可以首先返回该数量的提交:
git checkout master~200
一旦你全部升级(希望你能找到带有那些旧软件包的镜像!),那么你可以继续前进,比如:
git checkout master~180
检查哪些软件包愿意升级,然后继续。
不要同步!
现在你的 portage 已经被实际的 Gentoo repo 困住了,如果你这样做,emerge --sync
它只会用当前数据替换所有数据。相反,假设您想走在前沿,
cd /usr/portage
git fetch
git checkout master #ensure you're back to the branch
git merge --ff-only
如果你从不运行 --sync,你不应该有问题,否则你可能需要重置整个存储库,通常git checkout -- .
应该这样做。然后应该merge
可以工作。
镜子不见了
大多数镜像不会长期存储旧包/ebuild,因此您可能需要祈祷。此外,在您的系统中,镜像列表应该已过时,并且某些/许多根本无法工作。
如果您不再拥有mirrorselect
或不再有一些奇特的工具来为您进行更新,目前似乎可以使用http://distfiles.gentoo.org/
.您想将其添加到GENTOO_MIRRORS=
中的行中/etc/portage/make.conf
。