在正在运行的系统上从 Funtoo 迁移到 Gentoo

Tim*_*Tim 5 migration gentoo funtoo

我现在有一个 Funtoo 系统,但想迁移(返回)到 Gentoo。如果可能的话,在安装过程中保持一个可用的系统(不要使用 Live CD 从头开始​​重建)。两个系统都应该~amd64

我找到了一个关于相反的人的旧描述。对我来说,听起来好像步骤是:

  1. 替换/usr/portage/为 gentoo portage 快照。
  2. 重新生成 portage 的 ebuild 清单。
  3. Reemerge portage 并做 emerge --sync
  4. 重建系统 ( emerge -e @system)。
  5. 必要时重建其余部分 ( emerge -uND @world)

我想念什么吗?

个人资料呢?init 脚本(例如网络接口和配置)中是否可能存在不兼容问题?我应该在引导期间(使用 grub)预料到 UEFI 会出现问题吗?genkernel 有区别吗?

Tim*_*Tim 3

好吧,首先,你必须失去什么?如果不起作用,您仍然可以进行全新安装。

备份

不用说,您需要备份重要项目。甚至可以存档/etc,以防您想回顾。

就我个人而言,每当我尝试一些激进的方法时,我都会事先将根文件系统同步到单独的磁盘。每当出现严重错误时,我都会将其重新同步;)。将根分区安装在单独的安装点上,以防止递归到所有已安装的分区。并运行类似的东西:

rsync -av --delete /mnt/root/ /mnt/backup
Run Code Online (Sandbox Code Playgroud)

恢复:

rsync -av --delete /mnt/backup/ /mnt/root
Run Code Online (Sandbox Code Playgroud)

只需确保备份文件系统是 Linux 类型(不是 FAT 或 NTFS),即可正确上下传输权限、符号链接和文件所有权。


尽管从未亲自做过,但您可以尝试以下选项作为指导。上面的一些评论建议不同的编译器配置文件,但其中大部分只是 gcc 和CFLAGSin的 useflags make.conf,我没有看到真正的问题。

选项1

你可以尝试,但没有个人经验,就是这样做repo.conf。创建一个单独的目录,例如/usr/gentoo将普通的 Gentoo portage 树放在那里。

文件/etc/portage/repos.conf/gentoo.conf

[DEFAULT]
main-repo = gentoo

[gentoo]
location = /usr/gentoo
sync-type = rsync
sync-uri = rsync://rsync.gentoo.org/gentoo-portage
auto-sync = yes
priority 10
Run Code Online (Sandbox Code Playgroud)

Funtoo 也应该存在类似的东西,并且优先级较低。运行后emerge --sync,两棵树将并排存在。如果存在相同版本的软件包,则优先级较高的存储库获胜(理论上)。您可以通过添加所需的存储库后缀来强制选择软件包,如下所示:

emerge sys-devel/gcc::gentoo
Run Code Online (Sandbox Code Playgroud)

使用此设置,您可以逐步迁移到 Gentoo。两个存储库中的配置文件都可供选择,因此您可以emerge --pretend在选择 Gentoo 配置文件时尝试一些命令,使用 useflags 等。从 Gentoo 树中出现 gcc、portage 等。如果您只是确保 GCC 已重新启动,出现相同的 useflags(根据您的喜好编辑 make.conf)并且保留相同的 CFLAGS,您可能甚至不需要清空系统树。

也许您想阅读GCC 升级指南,并且/usr/share/portage/config/make.conf.example

最后,您可以删除repo.conffuntoo 的条目并执行emerge -uND --newrepo @world.

选项#2

以前,当我进行一些大的配置文件更改时,我使用了这种方法。

  1. 确保您的系统完全是最新的 ( emerge -uND @world),处理@preserved-rebuild集和depclean
  2. 将条目移至/var/lib/portage/world用户定义的集合中。这可以是一组,或者如果您想进行组织,也可以是一组类别。例如,我创建了 3 组,可在该过程的不同阶段使用。

/etc/portage/sets/boot

sys-boot/grub
sys-kernel/gentoo-sources
[network tools etc]
Run Code Online (Sandbox Code Playgroud)

/etc/portage/sets/admin

app-editors/vim
app-portage/gentoolkit
[...]
Run Code Online (Sandbox Code Playgroud)

/etc/portage/sets/desktop

 # All the rest
Run Code Online (Sandbox Code Playgroud)

确保迁移后/var/lib/portage/world和都是空文件。word_sets

  1. 运行emerge --depclean以删除所有被拉入的包@world
  2. 现在,清理掉/etc/portage/package.use。(如果您打算稍后再次使用该文件,请将其移至某处。
  3. 注释掉USE=其中的行make.conf
  4. 降至尽可能简单的配置文件。在 gentoo 中,它会是这样的:default/linux/amd64/17.0
  5. emerge -uND @world && emerge --depclean您将采用 Funtoo 尽可能最小的配置,冲突风险最小。
  6. 将 portage 树替换为 Gentoo 的树。(大概在repos.conf
  7. 这应该给你最简单的Gentoo配置文件系统emerge -1 sys-apps/portageemerge -1 sys-devel/gccemerge -e @system
  8. emerge @boot并执行您需要执行的操作来配置内核、grub 等(遵循手册)这将为您提供一个完全可重新启动的 Gentoo 系统。如果此时想测试,请重新启动。
  9. 设置您想要的配置文件,重新启用 useflagsmake.conf并可能打包特定标志package.use
  10. emerge -uND @world @admin @desktop && emerge --depclean:如果一切顺利,您已成功将 Funtoo 转移到 Gentoo!

不兼容性

回答剩下的问题;在重新安装软件包的过程中,portage会检查文件是/etc/原始的还是修改过的。如果它们自安装后未修改,portage 将替换它们。/etc/init.d 中的文件也是如此。这些文件最终都属于一个包。包重建最终应该给出正确的版本。

修改后的配置文件受config-protect保护。这些需要使用诸如etc-update.

笔记

我知道这是一个老问题,可能不再对OP有帮助了。然而,这个话题让我感兴趣。如果遇到这个答案的人能够真正尝试一下,那就太好了:)。