気の向くままに辿るIT/ICT/IoT
システム開発

Debian 9.9 Stretchを10.0 Busterにアップグレード

ホーム前へ次へ
古いパソコンの活用方法は?

Debian 9.9 Stretchを10.0 Busterにアップグレード

Debian 9.9 Stretchを10.0 Busterにアップグレード

[2019/07/09]

 以前の32bit PCから約2年前に買った64bitのdynabook B45にSSDを換装、その後、追加インストールした64bit版Debian Stretch amd64をBuster(米国時間2019/07/06リリース)にアップグレードすることにしました。

 ちなみに、つい先日、32bit Debianは削除、今は、amd64 Debianと使う機会もないけど極小サイズゆえ邪魔にもならないFreeDOSのみ。

メインのマシンで実行する前に

 それはさておき、いきなり、メインとしているこのPCのDebianをアップグレードしようというわけではありません。

 対象は他にも4つあります。

 というか、Raspbianは一足先にBusterがリリースされていたことを知り、Debianに先んじて、まず、失敗しても痛手のないデスクトップPC用ラズパイのRaspberry Pi 3B+/Raspbian StretchからBusterにアップグレードしてみることに。

 アップグレード自体は、相応の時間がかかるのは当然もあっさり完了、Buster起動後は、ssh接続で使う分には、申し分ないものの、モニタ認識の不具合があり、対処法があるも一時的で再起動すると不具合が再発、物理モニタやVNCを使う場合は、改善されるまで待った方がよさ気な状況に...。

 となるとVNCを使うサーバ及びメールクライアント共有としているRaspberry Pi 2B/Raspbian Stretchは、保留決定。

 次の候補は...と、このノートPCのDebianでは、HDMI接続しないしと思い、アップグレードしようとすると後述のようにインストール済みだったappstreamに関するエラーに遭遇。

 これの対処方法をLiveUSBのDebian Stretchで試そうとsources.listをbusterに書き換え、apt updateしてみるとうまくいきそう、ただ、よく考えるとUSB2.0では気が遠くなるのでLiveUSBに関しては、結果、別途、自身初となるUSB3.0のUSBメモリにBusterをクリーンインストールすることに。

 が、このUSB3.0のLiveUSB、インストール完了後、操作してみるとGUI操作において動作が遅い気が...。

 ちなみにRaspbian Busterの方は、一時的な確認しかできなかったとは言え、GUIの遅さは感じなかった気がします。

[2019/08/04] 詳細はリンク先に譲りますが、USB3のDebian Live用については、起動の遅さは/etc/fstabの設定、動作の遅さはUSBメモリに起因するものの模様でした。

ここでメインマシンのDebianを更新してみることに

 残る2択でより不安がないのは、スマートスピーカーのRaspbianですが、LiveUSBの方の遅延感は、気のせいか、Busterならそんなもんか、実は、USB2.0とUSB3.0では体感できるほど差がないか、USBメモリ自体の不具合に起因するか、といった可能性もあるし、確認の意味でも...ということでサブのデスクトップ用ラズパイも不完全な中、思いきってメインPCのDebian Stretchをアップグレードしてみることにしました。

Busterアップグレード後の感想

 結果、PCでアップグレードしたBusterは、GUI操作もサクサクで良好です。

 ただ、テキストフォントが大きくなっている(ように感じる?)というちょっとした違和感があるのと、デスクトップ右下に移動不能?操作不能?な日本語変換系バーが固定されているのが、かなり迷惑。

 と思ったら、日本語変換バーについては、メニューからなぜか2つある内、一方の[入力メソッド]を選択すると現状uimになっているっぽく、もう1つの[入力メソッド]を選択すると設定パネルが表示され、[ツールバー]タブで[表示の挙動]、[表示:]が[常時]になっていたからのようで[なし]にすると常に表示されず、[モード依存]にすると日本語入力可能となるシーン(テキストエディタ上やブラウザのURL入力欄など)でキーボードの[半角/全角]キーで全角にした時のみ表示されるようになりました。

 尚、十分サクサクですが、操作が追いつかなくなるくらい超高速になったらそれはそれで面白いかもと思い、LiveUSBで試した方法をPCでも試してみたところ、なんら変化は感じませんでした。

Busterへのアップグレード時の異変

 Busterにアップグレードすべく、sources.list編集後、apt-updateする際、appstreamというパッケージが入っているとエラーとなりますが、後述の方法で対処可能です。

 apt full-upgrade -y(apt-get dist-upgrade -y)を実行後、途中でCinnamonデスクトップがクラッシュ、アップグレードが中断したような状態になりました...が、後述のように事なきを得ました。

 ちなみにapt-getとaptは微妙に違うらしい程度の認識で、いつしか、aptでいっかと思うようになり、これまで何の気なしにapt dist-upgradeとしていましたが、実は、full-upgradeがapt、dist-upgradeがapt-getのオプションだということを今回、manを眺めて初めて知りました。

 あと、なぜか、以前、pip3 installしておいたfeedparserが削除されていました。

 RSSを解析、テキスト抽出、スマートスピーカーで再生させていたニュースが、再生できなくなり、ん?と端末でスクリプトを実行してみると[ModuleNotFoundError: No module named 'feedparser']と表示され、気づいた次第。

 更にバックアップスクリプトが効かない...なんでだ...と思ったら、rsyncも消えてました...というか、dpkg -l rsyncでバージョンが表示される(入ってるはず?)...なのにない...apt installするとインストールされました...。

$ sudo apt autoremove
...
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージは「削除」されます:
ash bdf2psf dmz-cursor-theme docbook-xml fonts-noto-hinted g++-6
gcj-6-jre-lib gir1.2-gepub-0.4 gir1.2-javascriptcoregtk-3.0
gir1.2-mate-panel gir1.2-matepanelapplet-4.0 gir1.2-tracker-1.0
gir1.2-zeitgeist-2.0 gnome-tweak-tool guile-2.0-libs hamster-applet
iputils-arping libass5 libavdevice57 libavfilter6 libavformat57
libavresample3 libbind9-140 libblas-common libbluray1
libboost-date-time1.62.0 libboost-filesystem1.62.0 libboost-iostreams1.62.0
libboost-random1.62.0 libboost-system1.62.0 libboost-thread1.62.0 libc-ares2
libcamel-1.2-59 libcdio-cdda1 libcdio-paranoia1 libcdio13 libcryptui0a
libcue1 libdirectfb-1.2-9 libdns162 libebook-1.2-16 libebur128-1
libedata-cal-1.2-28 libedataserver-1.2-22 libedataserverui-1.2-1
libemail-address-perl libestools2.4 libevent-2.0-5 libexempi3
libfile-copy-recursive-perl libfolks-telepathy25 libfreerdp-cache1.1
libfreerdp-codec1.1 libfreerdp-common1.1.0 libfreerdp-core1.1
libfreerdp-crypto1.1 libfreerdp-gdi1.1 libfreerdp-locale1.1
libfreerdp-primitives1.1 libfreerdp-utils1.1 libfwupd1 libgcj-bc
libgcj-common libgcj17 libgconfmm-2.6-1v5 libgcr-3-common libgegl-0.3-0
libgepub0 libgfortran3 libgit2-24 libgles2-mesa libglew2.0 libgltf-0.0-0v5
libgmime-2.6-0 libgnome-autoar-common libgnome-desktop-3-12
libgom-1.0-common libgoocanvas-common libgoocanvas3 libgutenprint2
libgweather-3-6 libhttp-parser2.1 libhunspell-1.4-0 libical2 libicu57
libidl-2-0 libilmbase12 libindicate0.1-cil libindicate5 libisc160
libisccc140 libisccfg140 libjavascriptcoregtk-3.0-0 libjim0.76 liblastfm1
liblouis12 liblouisutdml7 liblwres141 libmagick++-6.q16-7
libmagickcore-6.q16-3 libmagickcore-6.q16-3-extra libmagickwand-6.q16-3
libminiupnpc10 libmlt++3 libmlt-data libmlt6 libmono-data-tds4.0-cil
libmovit8 libmozjs-24-0 libmygpo-qt1 libnfs8 libnm-glib-vpn1 libnm-glib4
libnm-gtk0 libnm-util2 libnotmuch4 libntfs-3g871 libopencv-calib3d2.4v5
libopencv-contrib2.4v5 libopencv-core2.4v5 libopencv-features2d2.4v5
libopencv-flann2.4v5 libopencv-gpu2.4v5 libopencv-highgui2.4-deb0
libopencv-imgproc2.4v5 libopencv-legacy2.4v5 libopencv-ml2.4v5
libopencv-objdetect2.4v5 libopencv-ocl2.4v5 libopencv-photo2.4v5
libopencv-stitching2.4v5 libopencv-superres2.4v5 libopencv-ts2.4v5
libopencv-video2.4v5 libopencv-videostab2.4v5 libopenexr22 liborbit2
liborcus-0.11-0 libpango1.0-0 libpangox-1.0-0 libperl5.24 libpoppler64
libpostproc54 libprotobuf10 libpython3.5 libpython3.5-dev
libpython3.5-minimal libpython3.5-stdlib libqjson0 libqpdf17 libqt4-dbus
libqt4-designer libqt4-network libqt4-opengl libqt4-qt3support libqt4-script
libqt4-sql libqt4-sql-mysql libqt4-sql-sqlite libqt4-xml libqtcore4
libqtdbus4 libqtgui4 libqxt-core0 libqxt-gui0 librarian0 libraw15 libre2-3
libreoffice-ogltrans libreoffice-pdfimport librtaudio5a librtaudio6
libruby2.3 libsac-java-gcj libsane-extras libsane-extras-common libsbsms10
libsdl-ttf2.0-0 libsodium18 libsox2 libsrtp0 libstdc++-6-dev
libsuitesparseconfig4 libswscale4 libtracker-control-1.0-0
libtracker-miner-1.0-0 libtracker-sparql-1.0-0 libtxc-dxtn-s2tc
libunique-3.0-0 libwayland-egl1-mesa libwinpr-crt0.1 libwinpr-crypto0.1
libwinpr-dsparse0.1 libwinpr-environment0.1 libwinpr-error0.1
libwinpr-file0.1 libwinpr-handle0.1 libwinpr-heap0.1 libwinpr-input0.1
libwinpr-interlocked0.1 libwinpr-library0.1 libwinpr-path0.1
libwinpr-pool0.1 libwinpr-registry0.1 libwinpr-rpc0.1 libwinpr-sspi0.1
libwinpr-synch0.1 libwinpr-sysinfo0.1 libwinpr-thread0.1 libwinpr-utils0.1
libwnck-common libwnck22 libxfont1 linux-headers-4.9.0-8-amd64
linux-headers-4.9.0-8-common linux-image-4.9.0-8-amd64 melt openshot-doc
python-asn1crypto python-certifi python-cffi-backend python-cryptography
python-enum34 python-gconf python-gnome2 python-gobject-2 python-gtk2
python-httplib2 python-idna python-imaging python-ipaddress python-mlt
python-notify python-olefile python-openssl python-pam python-pexpect
python-pil python-ptyprocess python-pyasn1 python-pygoocanvas
python-pyinotify python-pyorbit python-requests python-urllib3 python-wnck
python-xdg python3-pyasn1 python3-tz python3.5 python3.5-dev
python3.5-minimal python3.5-venv qdbus qpdf qt-at-spi qtchooser qtcore4-l10n
rarian-compat rename rsync ruby2.3 seahorse-daemon sgml-data tcpd xml-core
アップグレード: 0 個、新規インストール: 0 個、削除: 266 個、保留: 0 個。
この操作後に 752 MB のディスク容量が解放されます。
...
続行しますか? [Y/n]

 そうなるとautoremoveで消えた?

 Busterアップグレード後のautoremove対象数が、え?このタイミングでこんなに?と思ってコピーしておいたんですが、なんでしょうね?

 python3系のアップグレードに伴って不要となったものがあるようですが、あ、rsync、思いっきり入ってる...まぁ、scp推しでもはやrsyncは非推奨なんでしょうが、少なくとも今はrsyncはオプション指定でssh転送もできるわけで、何よりscpと違って差分バックアップできるのが気に入って置き換える気になれないんですよね...。

StretchからBusterへアップグレードする手順

$ sudo apt update
$ sudo apt upgrade -y
$ sudo apt autoremove
$ sudo apt clean
$ sudo vi /etc/apt/apt.conf.d/50appstream
...
#APT::Update::Post-Invoke-Success {
# "if /usr/bin/test -w /var/cache/app-info -a -e /usr/bin/appstreamcli; then appstreamcli refresh-cache > /dev/null; fi";
#};
:wq
$ sudo vi /etc/apt/sources.list
...
:%s/stretch/buster/g
:wq
$ sudo apt update
$ sudo apt full-upgrade -y
...
$ sudo apt autoremove

 念の為、Stretchでapt update/upgrade/autoremove/clean。

 appstreamパッケージがインストールされている場合、後述の通り、apt updateでエラーとなるので、これに対処すべく、/etc/apt/apt.conf.d/50appstream最終行3行をコメントアウト。

 リポジトリを変更すべく、/etc/apt/sources.listのstretchをbusterへ変更。

 Busterでapt update/full-upgrade/autoremove。

 回線は光もハブは10Base/100BaseT、無線は遅そうなのなため、有線LAN環境でアップグレード時のデータ取得に4分38秒、アップグレードに約1時間20分。

appstreamパッケージがインストールされている場合

$ sudo apt update
E: Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/cache/app-info -a -e /usr/bin/appstreamcli; then appstreamcli refresh > /dev/null; fi'
E: Sub-process returned an error code
$

 appstreamパッケージがインストールされている場合、sources.listをbusterに書き換えた後、apt updateするとこのようなエラーが表示されます。

 検索すると情報がたくさんあり、そのほとんどは、/etc/apt/apt.conf.d/50appstreamのリネームのようですが、リネームするとアップグレード中、後述のように質疑応答が1つ増えたり、これが必要でアップグレード中に更新・作成した場合、最終的にリネームしたファイルが余分になり、削除するならその手間も増えます。

 よって前掲のように当該ファイル内のエラーとなる最後の3行をコメントアウトする方が自動で置き換えてくれそうなので無難かも。

 ちなみにbusterやsipからこの問題のない最新のappstreamをdpkg -iするという情報もあり、試してみましたが、libappstream4など依存関係にあるパッケージを芋づる式にインストールする羽目になりそうだった為、やめました。

apt full-upgrade -y後の放置は禁物

 apt full-upgrade -yしても数件質疑応答を要するので放置は禁物です。

 ちなみに自身の場合、Raspbianの時は、データ取得直後の[Samba サーバおよびユーティリティ]と[Configuring libc6:amd64]の2件でした。

 が、環境によるのか、Debianでは、この間に[minissdpd の設定]があり、更にappstream対策でファイル名をリネームした場合、自身の環境では、進捗65%あたりで[構成ファイルがないけどどうするか]、/etc/pulse/default.paも変更していたため、進捗90%あたりで、これをどうするか問われました。

(-yは付けたけど答えないとアップグレードが進まない。)

 また、途中、目を離した隙に進捗77%あたりでCinnamonだったデスクトップが、MATE自体は元々入れてあったものの、なぜか、見た目からしてBuster版に更新されていると思しきMATEになっており、端末ほか開いているソフトウェアは、何れもウィンドウバーのない画面のみで動きがなく、アップグレードが止まっているように見える状態になりました。

 Debianに限らず、本来は、マシンを再起動するまでは、アップグレード前の状態のはず(...ですよね?)が、途中で更新が反映された結果、このような状況になったのでしょう。

 試しにいろいろ操作してみると各種アプリは起動するものの、端末は起動しない...とあれこれやっている内にCinnamonがクラッシュしたんだけど再起動するか否かのポップアップが表示され、再起動したところ、見た目にもアップグレードが再開され、最終的に起動せず、何度もクリックした端末も複数開きました。

(以前と同じならデスクトップの元になるウィンドウマネージャのベースとなっていると思われる端末を開いてみたのが功を奏した可能性もある?仮に何もせず放置していたらどうなっていたんでしょう?)

後始末

 アップグレード中、構成ファイルを更新・作成したため、50appstreamファイルは作成されており、diffで比較の結果、元のファイルは不要と判断し、削除しました。

ホーム前へ次へ