お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2024-09-10 08:03:55

Templer
メンバ
登録日: 2009-07-08

OSのアップグレードで失敗しないためにすること

OSのアップグレードに失敗した経験のある人が多いようですが、以下の点に気をつけると失敗を劇的に減らすことができます。

0. 大切なファイルのバックアップ
 アップグレードに失敗してクリーンインストールする事態も想定して大切なファイルのバックアップはしておきましょう。

1. 事前動作テスト
 1.1 仮想マシンが使用できるのであれば、仮想マシンで実環境と同じ構築環境にしてOSのアップグレードを試してみる。
  1.1.1 ついでに普段使用しているソフトウェアがアップグレード先のバージョンで動作するかテストしておく。
 1.2 目的のバージョンのLiveUSBを作成して実機(仮想環境で運用している方は仮想環境)で動作するかテストする。
   ※ ハードウェア周りのテストは実機でなければできないため。
  1.2.1その実機(仮想環境で運用している方は仮想環境)のLive環境で普段使用しているソフトウェアが動作するかテストする。
     ※ 上記1.1.1ではうまく動かなかったソフトウェアが動くようであれば、古い設定をうまく引き継げないソフトウェアである可能性が考えられます。ハードウェアドライバーによる動作の違いという可能性もあります。
     ※ 上記1.1.1で使えていたアプリが見つからなくてインストールできない場合は、リポジトリーからパッケージが削除されている可能性があります。

2. パッケージの事前整理
 2.1 PPAのパッケージを使用している場合はppa-purgeを使用してパッケージを正規のパッケージに戻す。
 2.2 独自に構築したパッケージや外部のパッケージなども同様に削除するか正規のパッケージに戻し、リポジトリーを追加している場合はそれを無効にする。
 2.3 i386のパッケージ(Wineなどをインストールすると自動でインストールされる)を削除する。
   ※ 例えば、Wineをインストールしている場合はターミナルアプリケーションで「 sudo apt autoremove wine-stable 」を実行する、など。
 2.4 使用OSがUbuntu Desktopであるならubuntu-desktopパッケージ(最小構成だとubuntu-desktop-minimal?)、Xubuntuであればxubuntu-desktop(最小構成だとxubuntu-desktop-minimal)パッケージなど、標準でインストールされているはずのメタパッケージが削除されている場合はインストールする。
   ※ 削除されていても、よほどのことがない限り修復されたりはします。
 2.5 「ソフトウェアの更新(update-manager)」でパッケージを最新の状態にする。

3. 落とし穴?
 3.1 アップグレード中にロック画面にならないようにロック画面の設定を無効にしておく。
   ※ 復帰できなくなってアップグレードの進捗状況がわからず電源ボタンを押して自滅、という話が昔から割とあります。
 3.2 システムの設定ファイル(/etcディレクトリー配下)を変更している場合はアップグレード中に変更されているファイルをどうするか訊ねられることがあるので、設定の見直しなど心の準備をしておく。
   ※ どうするか訊ねられたときは、どのファイルに変更があるのかをメモしておき「パッケージメンテナーのバージョンをインストールする」を選択して更新し、自身で施した設定に戻すのはアップグレード後で良いかと思います(なお、変更前のファイルが同じディレクトリーに「ほにゃらら-old」というファイル名で残っていますので更新前の設定内容を見返すことはできます)。メンテナーの設定に更新しておかしくなるようなら設定をしたものの責任と割り切りましょう(/etcディレクトリー配下をあちこち弄り回す迷惑なツールがあったりなかったりなので…)。
 3.3 アップグレードはdo-release-upgradeコマンドを直に実行するより「ソフトウェアの更新(update-manager)」を使う。
   do-release-upgradeコマンドを直に実行するのと比べると、update-manager経由のほうがうまくやりくりしてくれるようで成功率が遥かに高まります。
   ※ なお、「 update-manager -d 」や「 do-release-upgrade -d 」のように「-d」オプションをつけたやり方を掲載しているサイトがあったりしますが、「-d」オプションはターゲットとなるバージョンが開発中・調整中であってもアップグレードを行うという強行手段ですので、「-d」オプションは付けないようにしてください。

4. アップグレードに失敗してしまったときは?
 4.1 既知の不具合であるならネット上に回復方法があるかもしれません。
   ※ なければ下記コマンドを実行して修復を試みるしかないと思います。
    1つ目の「 sudo apt install -f 」で依存関係によりインストールが不完全となっているパッケージ群の修復を試み、2つ目の「 sudo apt upgrade 」で更新できるパッケージが残っている場合にそれを更新します。

コード:

sudo apt install -f
sudo apt upgrade

    エラーなく完了して、ディストリビューションのメタパッケージであるubuntu-desktopパッケージなどがインストールされていて、保留パッケージがわんさか残っていたりしなければ、一応はアップグレードは完了したと判断して良いかと思います。

オフライン

 

#2 2024-09-10 08:17:53

Templer
メンバ
登録日: 2009-07-08

Re: OSのアップグレードで失敗しないためにすること

なお、Ubuntu 22.04から24.04へdo-release-upgradeコマンドを使用してアップグレードをする際は、特に気をつけてほしいのが「パッケージの整理」です。
Ubuntu 24.04では多くのパッケージに名前の変更が加えられていて(※)アップグレード時にそれらパッケージの置き換えが行われます。この複雑な処理が悪く絡んでしまうと失敗してしまうのではないかと。
例えば、WineHQのパッケージをインストールしてほったらかしたままアップグレードしてしまうと復旧不能な状態に陥ります。
※ 例えば libasound2 が libasound2t64 などのように、パッケージ名の末尾に「t64」が付与されたものが沢山あります。

オフライン

 

#3 昨日 15:07:42

Templer
メンバ
登録日: 2009-07-08

Re: OSのアップグレードで失敗しないためにすること

24.04から26.04へのアップグレードに失敗するケースに遭遇しましたので報告します。
※ 現時点ではまだアップグレード通知が来ていませんので、解禁されたときには解消している可能性もあります。

内容は「'/tmp/apt-dpkg-install-6Atw1A/11-base-files_14ubuntu6.2_amd64.deb' がインストールできません」というものです。
端末と/var/log/dist-upgradeディレクトリー配下のapt-term.logファイルには下記のような内容が出力されます(下記抜粋はdo-release-upgradeコマンドでアップグレードしたときの出力メッセージより)。

コード:

.../11-base-files_14ubuntu6.2_amd64.deb を展開する準備をしています ...


******************************************************************************
*
* The base-files package cannot be installed because
* /lib32 is a dangling symbolic link.
*
* This is an unexpected situation. Cannot proceed with the upgrade.
*
* For more information please read https://wiki.debian.org/UsrMerge.
*
******************************************************************************


dpkg: アーカイブ /tmp/apt-dpkg-install-3uHREs/11-base-files_14ubuntu6.2_amd64.deb の処理中にエラーが発生しました (--unpack):
 new base-files package pre-installation script subprocess returned error exit status 1
ERROR: Cannot create report: [Errno 17] File exists: '/var/crash/base-files.0.crash'
                                                                                    motd-news.service is a disabled or a static unit not running, not starting it.
処理中にエラーが発生しました:
 /tmp/apt-dpkg-install-3uHREs/11-base-files_14ubuntu6.2_amd64.deb

バグ報告: https://bugs.launchpad.net/ubuntu/+source/base-files/+bug/2125816
           https://bugs.launchpad.net/ubuntu/+source/base-files/+bug/2131303

まず、どういう条件のときに失敗するのかを説明します。
失敗する条件は、「/lib32リンクファイルが存在しているが/usr/lib32ディレクトリーが無いためにリンクが切れている」状態のときです。lib32だけではなくlibx32なども同様で/usr/libx32がなく/libx32のリンクが切れていると失敗するようです。ファイルマネージャで確認してみてください。(なお、/lib32や/libx32が存在しない環境ではエラーにならないので問題ありません)
ターミナルアプリケーションでreadlinkコマンドやlsコマンドを使って確認するとこのようになります。(libx32も同様)

コード:

$ readlink /lib32 
usr/lib32
$ ls /usr/lib32
ls: '/usr/lib32' にアクセスできません: そのようなファイルやディレクトリはありません

この状態に合致する方は、アップグレードをする前にターミナルアプリケーションを起動し下記コマンドで「/usr/lib32」ディレクトリーを作成してください。「/libx32」が存在する環境では「/usr/libx32」も作成してください。(このリンク切れ状況を考えると、unlinkコマンドでリンク切れしている/lib32を削除してしまっても問題ないとは思うのですが、念の為に/usr/lib32の作成という方向で)

コード:

sudo mkdir /usr/lib32

※ アップグレード前にアップグレードをするための下準備をされる方は、アップグレードを実行する直前に再度確認してください。正直、私は何をしてこのような状況になったのかがわかりませんので注意してください。

もし、アップグレードをして失敗してしまったのであれば、クリーンインストールすることを推奨します。
どうしてもクリーンインストールは避けたいということであれば、以下が考えられはします(煮えきらない表現にしている理由は、インストールされているパッケージ構成によって状況が変わるため、"これが正解" とは言えなかったりするからです)。
「ソフトウェアの更新」でアップグレードをした場合と「do-release-upgrade」コマンドでアップグレードをした場合の2つに別けて説明します。

「ソフトウェアの更新」でアップグレードをした場合は、エラーが発生しても続行したかと思います。最終的に失敗はしますが、下記を行うことで環境構築を終えることはできそうです。
まずはターミナルアプリケーションで下記2つのコマンドを実行してください。

コード:

sudo mkdir /usr/lib32
sudo apt install -f

これでアップグレード自体は完了すると思われます。
そしたら、もし外部リポジトリーを使用していたのであればリポジトリーのバージョンを新しいUbuntuのバージョンに合わせて再登録し環境を整えてください。
次に「 sudo apt upgrade 」コマンドを実行して「自動でインストールされたが、もう必要とされていない」とされるパッケージ群を確認してください。それらは削除対象とされたパッケージ群です。もしそこに必要なパッケージが存在するようであれば「 sudo apt install パッケージ名 」コマンドを実行して手動でインストールしたことにすると良いでしょう。そうすればリストから外すことができますので、必要なものを一通りリストから外しましたら、残りのパッケージは「 sudo apt autoremove 」コマンドを実行してまとめて削除することができます。
続けて、「 apt list | grep "ローカル" 」コマンドを実行してください。そこに現れるパッケージはリポジトリーにはないパッケージです。それらは更新対象から外れているパッケージですので、不必要なパッケージであるなら削除したほうが良いでしょう。
作業は大体このあたりですが、しかし、ここまで終えてもクリーンインストールした環境とは差異がある状態であると認識してください。というのは、新しいOSはレガシーなソフトウェアをモダンなソフトウェアに置き換えていたりもするのですが、アップグレードする環境にはこれまでに運用してきたシステム基盤がありますので、その互換性を維持するために残るパッケージやインストールされないパッケージというものが生まれたりするわけです。(もちろん、取り残されただけの不要なパッケージもあったりはしますが……)
なお、新しいソフトウェアに移行したい場合はリリースノートに書かれているかもしれませんので確認してみてください。

さて、一方の「do-release-upgrade」コマンドでアップグレードに失敗した場合ですが、やることは「ソフトウェアの更新」の件で述べたのと同じです。しかし、アップグレードの冒頭でエラーにより終了してしまった場合は「sudo apt install -f」では反応を示さないかもしれません。その状況下では、一応、aptのupgradeやfull-upgradeで "パッケージのアップグレード" は可能ではあるのですが、そのやり方は根本的に破壊的操作と言っても過言ではないので、実行すると例えば、Not upgradingなパッケージがわんさかで対処に明け暮れたり、(Ubuntu desktopでは)別のエラーが出て終了したり、本来の姿ではない別のものになったりなどなど、芳しくありません。
別の方法として、おすすめというわけではないのですが、試した限りで意外とうまく行ったのが「リポジトリーを24.04に戻してupdateし/usr/lib32を作成して再びアップグレード」でした。とはいえ、やはり状況によるのでクリーンインストールを強く勧めたいですし、今私が大雑把に述べたことが理解できていないようであれば、なおさらクリーンインストール一択だと受け取ってください。

オフライン

 

Board footer

Powered by FluxBB