Slide 1

Slide 1 text

自分自身を再インストール unarist 2018-05-19 OSC2018 Nagoya 東海道らぐLinuxライトニングトーク大会

Slide 2

Slide 2 text

議題 昔 #gentooinstallbattle したまま放置しているPC、 ありませんか? > Last emerge --sync was Thu Aug 28 08:05:01 2014

Slide 3

Slide 3 text

古い環境を新しくする 1. とりあえず emerge --sync する 2. まずは portage のアップデート 3. emerge -1 portage 4. 新しいEAPIが使われているので先にportageを 更新しろと言われる

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

そんな御無体な • こういった変更は数ヶ月の猶予を持って行われ ている • `emerge --sync` した時にnewsとしてお知らせ も届く TL;DR 数年も放置するのが悪い

Slide 6

Slide 6 text

どうするの • 少し古いパッケージツリーを取得して段階的に 更新する • 最新のstage3環境にchrootして、元の環境に パッケージをインストールする https://wiki.gentoo.org/wiki/Upgrading_Gentoo# Updating_old_systems

Slide 7

Slide 7 text

後者をやってみた # emerge --root=/mnt/host -1 portage

Slide 8

Slide 8 text

後者をやってみた $ emerge python-exec: Invalid impl in /etc/python- exec/python-exec.conf: python3.3 /usr/bin/python3.5: /lib64/libc.so.6: version `GLIBC_2.25' not found (required by /usr/lib64/libpython3.5m.so.1.0)

Slide 9

Slide 9 text

glibcも更新しないといけない • それはそう • glibcも更新すればよい • ただしglibcに依存する全パッケージを再インス トールすることになるので時間がかかる

Slide 10

Slide 10 text

そうだ、再インストールしよう

Slide 11

Slide 11 text

そうだ、再インストールしよう • インストール先は古い Mac mini • 外部メディアからGentoo環境を起動するのも面 倒 • 稼動中の環境を置き換えられないものか

Slide 12

Slide 12 text

稼動中の環境を置き換える Replace a Linux installation with Gentoo in-place - Gentoo Wiki https://wiki.gentoo.org/wiki/Replace_a_Linux_ins tallation_with_Gentoo_in-place

Slide 13

Slide 13 text

稼動中の環境を置き換える Wikiのやりかた(別ディストリを置換え) 1. 現存するファイルの更新日時を揃える 2. stage3をルートディレクトリに上書き 3. 起動に必要な最低限のセットアップを行ってか ら再起動 4. 1で揃えた更新日時から変わっていないもの (=stage3で上書きされなかったもの)を削除

Slide 14

Slide 14 text

でも… • 今回はGentoo同士なので、設定ファイルが多分 ぶつかる – 前の設定も残したい(上書きさせたくない) – 初回再起動時に余計な設定を読ませたくない →元環境は別ディレクトリに移動しておき、きれ いな場所にstage3を展開

Slide 15

Slide 15 text

今回の手法 1. stage3環境にchroot 2. ホスト環境のルート直下にある諸々を別ディレ クトリに移動 3. stage3をホスト環境に展開 4. 起動に必要な最低限のセットアップを行ってか ら再起動

Slide 16

Slide 16 text

stage3環境から/を触る 1. /mnt/work に stage3 を展開 2. /mnt/work/{dev,sys,proc} を用意 3. mount /mnt/work/mnt/gentoo に / を bind mount (rslaveがいいかも) ここで /mnt/work に chroot すると、 /mnt/gentoo マウント後のセットアップ環境のよ うになっている

Slide 17

Slide 17 text

そんな雑でいいの • いけた • カーネルも流用しようとしたら起動途中でこけ たが、新しいものをコンパイルしなおして got kotonaki (gentoo-sourcesのdistfilesを別環境で取得する など面倒はあった)

Slide 18

Slide 18 text

まとめ > 要するに、Gentooは更新をサボっている と置いて行かれてハマるということです。 古くなってしまった Gentoo Linuxを更新す る方法 - 技術情報 - Walbrix http://www.walbrix.net/tech/update-old- gentoo.html