みなさんこんにちは。suginokoです。
最近はLinuxと友達になるために奮闘しています。
今年に入ってからWebフロントエンジニアなのに、Webを触ったのが2か月だけでほぼLinuxを触っています。
Raspberry Pi、Tinker Board、Jetson nanoを触ってきて、Webのフロントエンジニアだということを忘れてしまいそうになります。(肩書は何でもいいのですが)
それでは本題です。
きっかけ
【ロボット】Linux+Vue.js+Electron使ったトラブルシューティング【備忘録】案件の延長戦です。(使わなかったけど)
ですが、今回はDebianの話しか登場しません。
以前はJetson nanoを使ってElectronの対応をしていたのですが、お客様の都合でTinker Boardに変わったので、その時に出くわしました。
ロボットとのデバッグをVNCを使って確認するべく、SSH使って入ろうとするときにパッケージがインストールできませんでした。(apt update
もapt upgrade
もエラー)
その理由がOSのバージョンをlsb_release -a
で詳細を見たら、Debianのバージョンが9でした(サポートから外れていた)
サポート外はまずいので、アップデートしなければならないのでは?ということが事の始まりです。
※一応許可をもらってバージョンアップしています。
やりたいこと
- Debian9でSSH繋げてVNCでGUIでの確認ができるようになりたい(バージョンアップの許可もらう前)
- Debianのバージョンを11まで上げたい
スペック
- Tinker Board
- Linux tinkerboard 4.4.132+ #1 SMP Wed Aug 21 19:15:55 CST 2019 armv7l GNU/Linux
- Debian GNU/Linux 9 (stretch)
Debian9でSSH繋げてVNCでGUIでの確認ができるようになりたい
バージョンアップの許可をもらってなかったので、Debian9でSSH繋げてVNCで確認できるところまで対応してみます。
sudo apt update
sudo apt upgrade
そうしたら、もっと項目は多かったのですが大体こんな感じのエラーが出まして
0% [Working]Ign:1 http://security.debian.org/debian-security stretch/updates InRelease
0% [Waiting for headers]Ign:2 http://deb.debian.org/debian stretch InRelease
0% [Working] Ign:3 http://deb.debian.org/debian stretch-updates InRelease
0% [Waiting for headers]Err:4 http://security.debian.org/debian-security stretch/updates Release
404 Not Found
0% [Waiting for headers]Err:5 http://deb.debian.org/debian stretch Release
404 Not Found
0% [Working] Err:6 http://deb.debian.org/debian stretch-updates Release
404 Not Found
というような感じで、404 Not Foundと出てしまい、そもそもファイルがない状態でした。
stretchのサポートは2022/06/30から切れており、stretchのリポジトリから消えたので、archive.debian.org
に移動されたのです。
なので、aptのパッケージのリポジトリ情報が記載されている/etc/apt/sources.list
を編集する必要がありました。
# バックアップ取っておく
cd /etc/apt/
sudo cp sources.list sources.list.bak
# 編集する(sedコマンドで置換するの怖くて地道にやっていた)
sudo vi sources.list
sources.list
before
deb http://http.debian.net/debian/ stretch main contrib non-free
deb-src http://http.debian.net/debian/ stretch main contrib non-free
deb http://security.debian.org/ stretch/updates main contrib non-free
deb-src http://security.debian.org/ stretch/updates main contrib non-free
deb http://http.debian.net/debian/ stretch-updates main contrib non-free
deb-src http://http.debian.net/debian/ stretch-updates main contrib non-free
deb http://tprd.asus.com:8000 stretch main contrib non-free
deb-src http://tprd.asus.com:8000 stretch main contrib non-free
after
deb http://archive.debian.org/debian/ stretch main contrib non-free
deb-src http://archive.debian.org/debian/ stretch main contrib non-free
deb http://archive.debian.org/debian-security// stretch/updates main contrib non-free
deb-src http://archive.debian.org/debian-security// stretch/updates main contrib non-free
deb http://tprd.asus.com:8000 stretch main contrib non-free
deb-src http://tprd.asus.com:8000 stretch main contrib non-free
archive.debian.orgに置き換えました。
改めてapt update
とapt upgrade
を試し、一応完了できました。
次にSSH繋げたいので、
sudo apt-get install avahi-deamon
sudo apt-get install ssh
しまして、
Tinker BoardのIPアドレスを確認したくifconfig
したかったのですがコマンドなかったので、ip addr
コマンドでIPの確認をしました。
次にPCでの作業で、
ssh ユーザー名@ロボットのIPアドレス
でTinker Boardに接続できるか確認します。
PWまで入力できたら接続できたかと思います。
次にVNCまで繋げていこうと思います。(このへんは調べたら出るんでざっくりと)
Tinker Boardの設定でGUI設定になっているかわからなかったので
sudo tinker-config
でGUIモードに設定をします。
VNCで起動するために、Jetsonの時と同じようにx0vncserverを使おうかなと思ってましたので、
sudo apt install tigervnc-common tigervnc-standalone-server tigervnc-scraping-server
# PWを設定
vncpasswd
します。
VNCはVNCViewerを使っていたので、こちらで起動できるようにします。
新規でプロパティ作ってIPアドレスと名前を入力。
sshでTinker Boardを起動していたら
x0vncserver -display :0 -passwordfile ~/.vnc/passwd
で起動しておいて、
VNCで起動できるか確認しましょう。大体これで起動できます。
Debianを9→10にする
Debianのバージョンを上げる許可が下りたんで、最終的には11にしたいのですが、順々に上げていきます。
先人の知恵としてほぼこちらのサイトに記載している内容で完了です。(ありがとうございました。)
バックアップにとっておいていた
/etc/apt/sources.list(.bak)
を元のsources.list
に戻します。
deb http://http.debian.net/debian/ stretch main contrib non-free
deb-src http://http.debian.net/debian/ stretch main contrib non-free
deb http://security.debian.org/ stretch/updates main contrib non-free
deb-src http://security.debian.org/ stretch/updates main contrib non-free
deb http://http.debian.net/debian/ stretch-updates main contrib non-free
deb-src http://http.debian.net/debian/ stretch-updates main contrib non-free
deb http://tprd.asus.com:8000 stretch main contrib non-free
deb-src http://tprd.asus.com:8000 stretch main contrib non-free
stretchになっているところをbusterに置き換えます
deb http://http.debian.net/debian/ buster main contrib non-free
deb-src http://http.debian.net/debian/ buster main contrib non-free
deb http://security.debian.org/ buster/updates main contrib non-free
deb-src http://security.debian.org/ buster/updates main contrib non-free
deb http://http.debian.net/debian/ buster-updates main contrib non-free
deb-src http://http.debian.net/debian/ buster-updates main contrib non-free
deb http://tprd.asus.com:8000 buster main contrib non-free
deb-src http://tprd.asus.com:8000 buster main contrib non-free
あとは
apt update
apt autoremove
apt clean
apt-get upgrade
apt full-upgrade
# 最後に再起動してもらって
cat /etc/debian_version
でバージョン確認してDebian10になってればOKです
Debian10→11にする
こちらがややめんどくさく。
先人の方がいらっしゃいましたのでこちらのサイトを参考にバージョンを上げます。
まず/etc/apt/sources.list
を以下から
deb http://http.debian.net/debian/ buster main contrib non-free
deb-src http://http.debian.net/debian/ buster main contrib non-free
deb http://security.debian.org/ buster/updates main contrib non-free
deb-src http://security.debian.org/ buster/updates main contrib non-free
deb http://http.debian.net/debian/ buster-updates main contrib non-free
deb-src http://http.debian.net/debian/ buster-updates main contrib non-free
deb http://tprd.asus.com:8000 buster main contrib non-free
deb-src http://tprd.asus.com:8000 buster main contrib non-free
こちらに置き換えます
deb http://http.debian.net/debian/ bullseye main contrib non-free
deb-src http://http.debian.net/debian/ bullseye main contrib non-free
deb http://security.debian.org/debian-security bullseye-security main contrib non-free
deb-src http://security.debian.org/debian-security bullseye-security main contrib non-free
deb http://http.debian.net/debian/ bullseye-updates main contrib non-free
deb-src http://http.debian.net/debian/ bullseye-updates main contrib non-free
deb http://tprd.asus.com:8000 buster main contrib non-free
deb-src http://tprd.asus.com:8000 buster main contrib non-free
-
buster
はbullseye
に置き換え -
buster/updates
はbullseye-security
に変更 -
bullseye-security
になっているURLはhttp://security.debian.org/debian-security
に置き換え(debとdeb-src)
ここまで置き換えたら
9→10に置き換えたように
apt update
apt autoremove
apt clean
apt-get upgrade
apt full-upgrade
# 最後に再起動してもらって
を実行するのですが、色々エラーが出ました。
apt update
やapt-get upgrade
を試しましたが、パッケージがうまく落とせてる感じがしません。
sudo apt full-upgrade
を叩いてみると
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
これらを直すためには 'apt --fix-broken install' を実行する必要があるかもしれません。
以下のパッケージには満たせない依存関係があります:
libcogl20 : 依存: libgles2
libegl1-mesa-dev : 依存: libegl-dev しかし、インストールされていません
libepoxy-dev : 依存: libegl-dev しかし、インストールされていません
依存: libgl-dev
libgles2-mesa : 依存: libgles2
libgles2-mesa-dev : 依存: libgles-dev しかし、インストールされていません
libglvnd-dev : 依存: libegl-dev (>= 1.3.0-1) しかし、インストールされていません
依存: libgl-dev (>= 1.3.0-1)
依存: libgles-dev (>= 1.3.0-1) しかし、インストールされていません
libqt5gui5 : 依存: libgles2
libqt5multimedia5-plugins : 依存: libgles2
libwebkit2gtk-4.0-37 : 依存: libgles2
mesa-utils-extra : 依存: libgles2
qtbase5-dev : 依存: libegl-dev しかし、インストールされていません
依存: libgles-dev しかし、インストールされていません
E: 未解決の依存関係です。'apt --fix-broken install' を実行してみてください (または解法を明示してください)。
このような感じでエラーが出て。
libegl-dev
をインストールをしようとするもうまくいかず。
おとなしくエラー文にあるようにapt --fix-broken install
を実行します。
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
依存関係を解決しています ... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
apt-transport-https dh-python gir1.2-notify-0.7 idle-python2.7
libboost-filesystem1.62.0 libboost-iostreams1.62.0 libboost-system1.62.0
libcwidget3v5 libdc1394-22 libdouble-conversion1 libenchant1c2a
libfluidsynth1 libgcr-3-common libgl1-mesa-glx libgles2-mesa-dev libglew2.0
libglvnd-core-dev libhunspell-1.4-0 libilmbase12 liblogging-stdlog0
libmpdec2 libopencv-calib3d2.4v5 libopencv-features2d2.4v5
libopencv-flann2.4v5 libopencv-highgui2.4-deb0 libopencv-objdetect2.4v5
libopencv-video2.4v5 libopenexr22 libpython3.5 libpython3.5-dev
libpython3.5-minimal libpython3.5-stdlib libpython3.7-minimal
libqgsttools-p1 libsrtp0 libva-wayland1 libvte-common libvte9
libwayland-egl1-mesa libx11-xcb-dev libxcb-dri2-0-dev libxcb-dri3-dev
libxcb-glx0-dev libxcb-present-dev libxcb-randr0-dev libxcb-shape0-dev
libxcb-sync-dev libxcb-xfixes0-dev libxshmfence-dev libxxf86vm-dev
python-gobject-2 python3-dbus python3.5 python3.5-dev python3.5-minimal
python3.7-minimal squeak-plugins-scratch x11proto-composite-dev
x11proto-dri2-dev x11proto-gl-dev x11proto-kb-dev x11proto-xf86vidmode-dev
これを削除するには 'sudo apt autoremove' を利用してください。
以下の追加パッケージがインストールされます:
libegl-dev libegl1 libgl-dev libgles-dev libgles2
以下のパッケージが新たにインストールされます:
libegl-dev libegl1 libgl-dev libgles-dev libgles2
アップグレード: 0 個、新規インストール: 5 個、削除: 0 個、保留: 797 個。
26 個のパッケージが完全にインストールまたは削除されていません。
218 kB のアーカイブを取得する必要があります。
この操作後に追加で 2,427 kB のディスク容量が消費されます。
続行しますか? [Y/n] Y
取得:1 http://cdn-fastly.deb.debian.org/debian bullseye/main armhf libegl1 armhf 1.3.2-1 [29.5 kB]
取得:2 http://cdn-fastly.deb.debian.org/debian bullseye/main armhf libgles2 armhf 1.3.2-1 [18.2 kB]
取得:3 http://cdn-fastly.deb.debian.org/debian bullseye/main armhf libgl-dev armhf 1.3.2-1 [100 kB]
取得:4 http://cdn-fastly.deb.debian.org/debian bullseye/main armhf libegl-dev armhf 1.3.2-1 [19.6 kB]
取得:5 http://cdn-fastly.deb.debian.org/debian bullseye/main armhf libgles-dev armhf 1.3.2-1 [50.3 kB]
218 kB を 2秒 で取得しました (115 kB/s)
(データベースを読み込んでいます ... 現在 83441 個のファイルとディレクトリがインストールされています。)
.../libegl1_1.3.2-1_armhf.deb を展開する準備をしています ...
libegl1:armhf (1.3.2-1) を展開しています...
dpkg: アーカイブ /var/cache/apt/archives/libegl1_1.3.2-1_armhf.deb の処理中にエラーが発生しました (--unpack):
'/usr/lib/arm-linux-gnueabihf/libEGL.so.1' を上書きしようとしています。これはパッケージ libmali-rk-midgard-r13p0-r0p0:armhf 1.5-4 にも存在します
.../libgles2_1.3.2-1_armhf.deb を展開する準備をしています ...
libgles2:armhf (1.3.2-1) を展開しています...
dpkg: アーカイブ /var/cache/apt/archives/libgles2_1.3.2-1_armhf.deb の処理中にエラーが発生しました (--unpack):
'/usr/lib/arm-linux-gnueabihf/libGLESv2.so.2' を上書きしようとしています。これはパッケージ libmali-rk-midgard-r13p0-r0p0:armhf 1.5-4 にも存在します
.../libgl-dev_1.3.2-1_armhf.deb を展開する準備をしています ...
libgl-dev:armhf (1.3.2-1) を展開しています...
dpkg: アーカイブ /var/cache/apt/archives/libgl-dev_1.3.2-1_armhf.deb の処理中にエラーが発生しました (--unpack):
'/usr/include/KHR/khrplatform.h' を上書きしようとしています。これはパッケージ libmali-rk-dev:armhf 1.5-4 にも存在します
.../libegl-dev_1.3.2-1_armhf.deb を展開する準備をしています ...
libegl-dev:armhf (1.3.2-1) を展開しています...
dpkg: アーカイブ /var/cache/apt/archives/libegl-dev_1.3.2-1_armhf.deb の処理中にエラーが発生しました (--unpack):
'/usr/include/EGL/egl.h' を上書きしようとしています。これはパッケージ libmali-rk-dev:armhf 1.5-4 にも存在します
.../libgles-dev_1.3.2-1_armhf.deb を展開する準備をしています ...
libgles-dev:armhf (1.3.2-1) を展開しています...
dpkg: アーカイブ /var/cache/apt/archives/libgles-dev_1.3.2-1_armhf.deb の処理中にエラーが発生しました (--unpack):
'/usr/include/GLES/egl.h' を上書きしようとしています。これはパッケージ libmali-rk-dev:armhf 1.5-4 にも存在します
処理中にエラーが発生しました:
/var/cache/apt/archives/libegl1_1.3.2-1_armhf.deb
/var/cache/apt/archives/libgles2_1.3.2-1_armhf.deb
/var/cache/apt/archives/libgl-dev_1.3.2-1_armhf.deb
/var/cache/apt/archives/libegl-dev_1.3.2-1_armhf.deb
/var/cache/apt/archives/libgles-dev_1.3.2-1_armhf.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
という感じで、長々とエラーを吐きます。
libegl-dev
が先ほどインストールされてない、と出ましたが、ここでインストールしようとしてるみたいです。
だけど、これはパッケージ libmali-rk-dev:armhf 1.5-4 にも存在します
とあるように、多分これが邪魔しているので、libmali-rk-dev:armhf 1.5-4
を消しちゃってあとで入れればいいんじゃん?となりました。
が、apt
でもdpkg
使っても削除できず。どうもこれを消すと他の依存関係に影響が出そうで影響範囲も広そう?な感じだったので断念。
dpkg
コマンド使って削除方が細かく設定できると思うんですけど、なんかうまくいかないんですよね…。
エラー文に
処理中にエラーが発生しました:
/var/cache/apt/archives/libegl1_1.3.2-1_armhf.deb
/var/cache/apt/archives/libgles2_1.3.2-1_armhf.deb
/var/cache/apt/archives/libgl-dev_1.3.2-1_armhf.deb
/var/cache/apt/archives/libegl-dev_1.3.2-1_armhf.deb
/var/cache/apt/archives/libgles-dev_1.3.2-1_armhf.deb
とありますので、これらを処理できればいいので、force-overwrite
を使えばいいかなと思いまして、
sudo dpkg -i --force-overwrite /var/cache/apt/archives/libegl1_1.3.2-1_armhf.deb
のように1つずつ処理しました。
これで9→10と同じようなコマンドを叩いて、なんとか10→11にバージョンアップすることができました。
force-overwriteすればいいんだ、はここで わかりました。
ごり押しではありますが、解消はできました。
最後に
OSのバージョンアップなんて、MacやWindowsが通知してくれたし、それで自動アップデートすればよかったのに、まさかLinuxでバージョンアップすることになるとは思ってなかったので、貴重な経験になりました。
また、この対応をしたおかげで、別の要件で役に立ったこともあるのでやっておいてよかったこともありました。
ごり押しだけどバージョンアップが一応できたのはよかったです。(この後多分バージョンアップしてからまた別に色々やることがあるんでその対処も必要なんだろうなと思いつつそれはまた別のお話。)
それでは。