RPiのupdateエラー

なにかとエラーの多いラズパイですが、Updateでよくエラーが発生します。
今日は、

パッケージリストを読み込んでいます... エラー!
E: Encountered a section with no Package: header
E: Problem with MergeList /var/lib/apt/lists/raspbian.raspberrypi.org_raspbian_dists_stretch_non-free_binary-armhf_Packages
E: パッケージリストまたはステータスファイルを解釈またはオープンすることができません。

困ったときのAskUbuntuですが、
https://forums.ubuntulinux.jp/viewtopic.php?id=4592
に回答がありました。

:~ $ sudo mv /var/lib/apt/lists/raspbian.raspberrypi.org_raspbian_dists_stretch_non-free_binary-armhf_Packages{,.bak}
:~ $ sudo apt-get check
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
:~ $

(^o^)


AIYのUpgrade(2018-04-13)

ラズパイをアップデートしたら起動しなくなった。
画面を見る限り、カーネルの読み込み段階で止まっているので、ファイルの一部が壊れているのだろう。
これまでも何度か経験しているので、リカバリの方法も最初からやり直すだけとわかっているため、淡々と手順を追うことにした。

1. Raspberry Piの入っているAIY Projectのディスクイメージをダウンロード

今回は、2018-04-13版が出ていることを知ったので最新版を落とす。1Gも容量があるので、夜に開始して朝起きたら落ちているようにする。
Voice KitもV1というバージョン番号がついている。つまりこれまではベータ版だったということなのか。
https://aiyprojects.withgoogle.com/voice-v1/

2. SDカードへの焼付

Etcher.IOなどのツールは使わず、Ubuntuのファイルマネジャを開いてダウンロードフォルダにあるディスクイメージファイルを右クリックすると、焼付のコンテキストメニュが出てくる。これは便利。

3. 設定ファイルのコピー

SDカードに、起動時にSSH接続できるよう空ファイルsshと、WiFi設定の入っているwpa_supplicant.confをコピー。
ここで気がついたのは、SSHは既に入っていた。進化している。よってwpa_supplicant.confのみコピー。
このファイルはいつも設定時に使うので、PCの方に保存してある。

4. SDカードをRPIに入れて電源を繋いで起動

テレビにつなげてあるので、電源を入れたら起動画面が出る・・・はずだが出ない。
おかしいなと思ったら、HDMIが抜けていた。初歩的ミス。

無事にAIYの画面が立ち上がったら、マウスを使ってみる。ワイヤレスマウスを最初からUSBにつなげていたので、マウスの電源を入れたらそのまま使えた。これは便利。

早速、キーボードをBluTooth連携する。

5. ロケールなどを設定

ロケールやタイムゾーンを日本に設定
キーボードの型をPC98xx
カメラをオフ
ホスト名をraspberrypiから、プロジェクトの名前に変更

リブートすると、日本語表示になった。

6. SDカードの領域を確保

ディスクイメージを焼いただけでは、16Gあるディスクのうち数十メガしか使われることがなく、しかもダウンロードなどすると容量が足りなくなるというエラーに何度かぶつかっている。これは、rpi-configでディスク容量を拡大するという処理をしなければならないが、なぜかメニュがない。
ファイルマネジャで容量を見たら、既に拡大されていた。おそらく初心者が最初に失敗する部分だけに、これは助かる。

7. OSを更新

sudo apt update
sudo apt upgrade

今回、これまでの蓄積が相当活用できたという点でかなり手際よく更新が出来るようになった。またAIY Projectsのほうも設定が省略されている部分がいくつかあり、使いやすくなったと言える。

8. 日本語入力環境のインストール

大事なことを忘れていました。
fcitx-mozcのインストールをしないとブラウザなどで日本語が入力できません。

sudo apt install fcitx-mozc


AIY: 2018年2月版に更新

AIYを一月ほど寝かせていたら、比較的安定してきたような感じだったが、結局RaspbianのUpdateをしたらまたhotword起動しなくなった。わりと気難しい性格らしい。
調べていたら、2月に新しいバージョンが出ているようで、どうやらこれで日本語が使えるとのこと。

結局更新してみることにした。

  1. サイトからイメージファイルをダウンロード(今回は1Gを超えている!)
  2. UbuntuのファイルマネジャであるNautilusに標準で装備されているイメージ作成機能でSDカードをつくる
  3. sshの空ファイルとwpa_supplicantをルートにコピー(今回のバージョンは、sshは既に用意されていたので、実際に使ったのはwpa_supplicantのみ。これには家庭LANへの接続パラメタが入っている)
  4. RPiにSDカードを入れて電源をつなぐ。TVでモニターすると、簡単に起動しているのが分かる。
  5. PCからsshでログインする(ここで躓いた。sshのログインをRSA認証を使っていたので、ホスト側となるラズパイのOSをまっさらに変更したことから、鍵が合わなくなってしまった。認証系はよく理解していないので、どこかのサイトを参考にしたのだが、結局、エラーメッセージのとおりにキーを打って一旦認証を消去して、新しく認証しなおせばよいことがわかった。
  6. SDカードのパーティションの拡張(デフォルトでは3Gしか使わない設定)
  7. ロケールやタイムゾーンを設定
  8. リブート

この後、OSのアップデートをするべく sudo apt updateをしたら、また新たなエラーメッセージが・・・(´・ω・`)

パッケージリストを読み込んでいます... エラー!
E: Problem parsing dependency 20
E: golang-github-google-cadvisor-dev を処理中にエラーが発生しました (NewVersion2)
E: Problem with MergeList /var/lib/apt/lists/mirrordirector.raspbian.org_raspbian_dists_stretch_main_binary-armhf_Packages
E: パッケージリストまたはステータスファイルを解釈またはオープンすることができません。

例によってぐぐってみました。コチラのサイト(ナントカnet:apt-getできないトラブル)によると、アップデートのリストが何らかの形で壊れているので、それを削除しなさいとのこと。わりと単純なエラーですね。今回はアップデート項目が多いようなので、読み込みに失敗したのでしょう。

その後エラーの出るファイルを/var/apt/cache/の中で探しては消去しつつ、しつこく何度もUpdateとUpgradeを繰り返し、SDカードの更新に成功。

次いで、Google Cloud Platformの自分のダッシュボードから認証ファイルassistant.jsonをダウンロードして設定終了。

結局、終日を使ってしまった。

日本語化は週末に挑むことにするが、本当にできるのか、心配になってきたぞ。


ラズパイのupgradeがまたもや失敗

毎度おなじみの、apt updateとupgradeですが、ラズパイはどうも失敗率が高いです。
特に大容量のアップデートが発生するとエラーが多いようです(経験則ですが)。

今回のエラーはupgrade中に発生した初めて見るメッセージで大量の文字化けを含むものでした・・・(´・ω・`)

~ $ sudo apt-get -f install
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 45 個。
1 個のパッケージが完全にインストールまたは削除されていません。
この操作後に追加で 0 B のディスク容量が消費されます。
samba-common (2:4.5.12+dfsg-2+deb9u2) を設定しています ...
/var/lib/dpkg/info/samba-common.templates のスタンザ 1 の `Description-pt_BR(ここから文字化け始まる。画面2ページ分程度。)  付近でテンプレートの解析に失敗しました
dpkg: パッケージ samba-common の処理中にエラーが発生しました (--configure):
 サブプロセス インストール済みの post-installation スクリプト はエラー終了ステータス 255 を返しました
処理中にエラーが発生しました:
 samba-common
E: Sub-process /usr/bin/dpkg returned an error code (1)

これを気安くリブートしたりすると、再起不能になってSDカードから作り直すというのは、過去に経験していますので、update/upgradeはとことんやってからリブートするというのを肝に銘じています。

しかし何度Update/Upgradeしてもエラーメッセージは消えず、aptの代わりのaptitudeをしても補正の代替案が出てきません。

うーむ困ったぞ。

一応、システム自体は動いているので、アップデート関係の設定が壊れたかダウンロードして更新されるはずのファイルが壊れているか、そのあたりに問題があると見当をつけ(られるようになった!)て、エラーメッセージでぐぐってみました。

こちらを参照(いつもお世話様です。)

結局、/var/lib/dpkg/info/samba-commonというファイルの更新版が壊れていたようで、消去した後にapt upgradeしたら次に進むことができました。

しかーし。
今度は、ハッシュサムが適合しませんと言われています・・・(´・ω・`)

これは、経験則ではサーバ側のファイルが当方のアップデート途中で更新されたりすると起こりえますので、再度はじめからapt update/upgradeすれば、たいてい治ります。・・・4回ほど繰り返して漸く治りました。

OK Google

さて、ラズパイをリブートして最初からGoogle Assistantを設定してみました。
今回は、滞りなくVNCから設定することができました。
これまでは、ボタンによるWakeの方法と、OK Googleと話しかける方法とが、別々のソフトウェアで提供されていましたが、新しいバージョンでは、一つのコマンドで両方対応できるようになっています。

段々と便利になりますね。


AIY:ディスクから作り直し

AIYが調子が悪いので、ブートイメージから作り直すことにした。
もともとの作業が1月8日でその際のOSのダウンロードをしたのが数日前だったと思うが、9月日付だった。つまりこのキットができたときのまま。しかし今回調べたら、1月3日付けのイメージがサーバにあった。

1月8日の作業記録があるのでこれに従って再実行。

焼付が早く終わったのだが、よくよく見ると3G程度のファイル容量しか使っておらず、せっかくの16Gのうち4分の1しか使っていないことになる。これは後半の、「容量拡大」を参照。

今回の変更点は、sshとwpa_supplicantを最初のブート前に/bootにコピーしておく必要があるのだが、sshは既にイメージディスクに用意されていたことか。

ディスプレイは繋がっているので無事にブートしたことを確かめたが、sshで入ってもログインができない。No route to hostという冷たいメッセージが来るだけ・・・(´・ω・`)

arp -a でもよくわからない。調べてみると、デフォルトでraspberrypi.localというホスト名が割り当てられているということだ。これは朗報!

ping raspberrypi.local

Raspberry Pi 3 コンソールのみ(ヘッドレス)でRaspbianセットアップからLチカまで

やってみたら、これまでとは異なるIPアドレスが振られていた。固定IPにしなければイケないことを実感。

とりあえず無事に起動してsshログインまで成功。

この後にVNCサーバを立ち上げていきなりGUIでアクセスしたいのですが、まずは、sudo raspi-configで設定を変更。

  • hostnameをデフォルトのraspberrypiから自分の好みに
  • localeをJP_UTF-8にしてTime ZoneをTokyo

他はそのままで先ずは保存してリブート。
次回からアクセスは、

ssh usr@hostname.local

という形になる。

ディスクのパーティション容量拡大

3G程度しか使っていないのは勿体ないので、空いている領域を拡大して使おうと目論んだら、fdiskなるコマンドがあることを知った。だけどとても難しそうで、またぶっ壊しそうで怖い。さらに調べると、RaspbianOSの中のraspi-configにコマンドが用意されていることがわかった。これだと簡単(ただし、空き領域を拡張するだけなので割当などはできない。)。調べてよかった。

SDカードのパーティションの拡張

ここで一旦システムをリブートした後、アップグレードする。

sudo apt update
sudo apt upgrade -y

ついでVNCサーバとして、デフォルトのRealVNCではなく他でも使っているので慣れているtightvncserverに置き換える。

sudo apt install tightvncserver

さらに日本語も使えるように、fcitx-mozcをインストールしておく。

sudo apt install fcitx-mozc

これでRemminaからVNCアクセスできるようになったら一先ずシステム設定としては終わるので次に、AIYの設定に入る。