目的:ワークショップの貸出PCのため
IoTワークショップなどに使う PC を何台か用意する必要がある。
- Arduino開発環境を使ったり
- RaspberryPi に SSH で接続して KVM(キーボード・ディスプレイ・マウス)の代りとして使ったり
ワークショップは半年に一度ぐらい。そのための PC を USB 起動の Ubuntu で構成した。
MS-Windows がツライ
今までは WindowsPC を使っていたがつらくなってきた。お金があればいいのだけれど、半年に一度ぐらいしか使わないものなので数千円/台で揃るようにすると・・・
- 格安中古をかき集めたので大きくて重い。
- WindowsUpdate にかける管理コストが多大
- 雑多な環境をいちいち設定するのが大変
- ソフトウェアの垢が溜まって調子が悪いことが多い
- ハードウェアの突然死のリスク
これを抜本的に解決するために、USB起動のLinuxを使うことにした。
USBメモリを刺すだけでセットアップできるので、
- HDD/SSD起動不能のジャンクPCでいい。格安なのでウルトラブックPCで揃え直し
- 不要な処理がバックグラウンドで動くのをコントロールがしやすい。
- USBメモリ内に構築した環境はクローンするのが簡単。
- ワークショップごとにソフトウェア環境をリセットすることも簡単なので、履歴の垢が貯まらない。
- PCに問題があっても、適当なPCにUSBメモリを刺し直せば代りとなる。大体のハードウェアは設定無しで使えるし、ライセンス認証をかけなくても良い。
Ubuntu を USB 起動に設定するツール
Linux には Ubuntu を使用した。
カスタマイズの手間はなるべく省きたい。半年ごとにリリースされるISOイメージが使えるので、他のディストリビューションに比べて修正アップデートも少なく抑えられる。
ISOイメージから作る方法をいくつか試してみた
Ubuntu上の「ブータブルUSBの作成」
使ってみたが、persistentファイルシステムの作成機能が無さそうである。
persistent ファイルシステムが無いとカジュアルに変更を反映できないのでNG.
Unetbootin
Windows/Mac/Linux いずれも使えるのがいい感じ。しかしながら容量は9999までしか入力できず、更に作成されたpersistentファイルシステムの容量は4GBytesであった。
こちらは persistent ファイルシステムのサポートがある。
Unetbootin + Ubuntu 18.04 LTS 日本語 Rimix 版
一見うまく動くように思えたが・・・
Languageの日本語設定ができなかった。
Unetbootin + Ubuntu 18.04 LTS
恐らく、Unetbootinが対応していないのだろうということで、日本語 Rimix 版ではないISOを使い、日本語関連の設定を追加することにした。
このやりかたがうまくいったので、これを採用。
設定手順
設定したUSBメモリで起動し、以下設定していく。
1度目の起動
ここでは英語環境である。タスクバーの右上の「Settings」から、設定していく。
- 「Details」の「Date&Time」でTimeZoneを設定。
- 「Wi-Fi」でネットワークに繋ぐ。
- 「Region & Language」の「Manage Installed Languages」を選ぶと
「The language support is not installed completely」と出るので
「Install」とする。 - 「Language support」の画面で「Install/Remove Languages....」を選び、「Japanese」を選択。
- 「Language」を「Japanese(Japan)」に
- 「Input Sources」を「Japanese」に
- 再起動
2度目の起動
ここから設定が日本語でできる。
- 「設定」ー「電源」で省電力をOFFに。
- メニューの左上にUbuntuインストールアイコンがあるので、apt-get remove ubiquity でメニューから消す。
Ubuntu18.04日本語Remix版と同じにする
「Ubuntuの日本語環境」と同じことをする
https://www.ubuntulinux.jp/japanese
wget -q https://www.ubuntulinux.jp/ubuntu-ja-archive-keyring.gpg -O- | sudo apt-key add -
wget -q https://www.ubuntulinux.jp/ubuntu-jp-ppa-keyring.gpg -O- | sudo apt-key add -
sudo wget https://www.ubuntulinux.jp/sources.list.d/bionic.list -O /etc/apt/sources.list.d/ubuntu-ja.list
sudo apt update
sudo apt-get upgrade
sudo apt-get install ubuntu-defaults-ja
- 「設定」-「地域と言語」でフォーマットを日本に
- 「入力ソースの追加」で「日本語」を押して、「日本語(Mosc)」を選ぶ
- 「英語(US)」を削除
この状態でUSキーボード配列の設定になっているが再起動で日本語キーボード配列の設定になる(再起動する)。
3度目の起動
この時点で、基本的な設定はできている。
容量確認
persistent-filesystem 4GBytesのうち、2GB弱を使用している。
アプリをインストール
そのままで追加パッケージをインストールしようとしてもうまくできないのでレポジトリの設定を行う。
- 「ソフトウェアとアップデート」をメニューから選択
- universeとmultiverseが無効になっていたので有効にします。
- 更にCanonicalパートナーのレポジトリを有効にする必要があるけれども、一覧に無かったので追加をクリックして次の設定を追加します。
deb http://archive.canonical.com/ubuntu bionic partner
その上で、以下をインストール。
- vim
- inkscape
- gimp
- conky
- flash
- ubuntu-restricted-extras
- google-chrome
容量確認すると、persistent-filesystemは3GBytesぐらい使用していた。
残り1GBytes。これに Arduino 開発環境を入れたりすることを考えると、ぎりぎりですな。今回はこれで使うことにするけれども、今後要改善。
完成したシステム
合計で6GBytesぐらい利用している。persistent-filesystemはcasper-rwというファイル内に構築されているので、Ubuntu利用中に保存したりしても利用総量は変化しない。
結果20GBytes以上余っていることになるので、これを有効活用する方法を今後考えたい。
バックアップ
USBメモリ中の casper-rw ファイルをコピーする。
クローンするには
Unetbootin で環境を作った後に、casper-rw ファイルをバックアップしたもので上書きすればOK.
おまけ LinuxノートPCを自分で用意するようになった理由
## ワークショップにノートPCを使う理由
タブレットやスマホなども考慮したが、ノートPCを持ち込むことに落ち着いている。
以下のような理由で、他の選択肢は淘汰。
デスクトップPC
PCルームなどに備え付けてあるデスクトップPC。しかしながら環境をインストールするのが大変。インストールできればいいが、余計なソフトはインストールできないなどというところも多い。
タブレット・スマホ
PCで環境構築は必須なので、二重の手間。CUIプログラミングやSSH行うとなるとキーボードは必須。キーボードの大きさがばかにならない。
Chromebook
ブラウザのみで完結するならOKだが、Arduino環境やSSHを使うとなるとChromebookでLinuxを動かすのが良さそうで、結局ノートPCでLinuxを使うことになる。
Raspberry Pi
KVMを揃えなければならず、それが相当な荷物になる。
ノートPCをどこから調達するか
会場などから借りる?
会場を運営している関係者や、身の回りから借りることができる。しかしながら借りたPCを使うのは難しい。環境が揃わない、事前確認に手間がかかる、セキュリティ設定などでうまくいかないが、設定を変更することが許されない場合も多い。
受講者に持ってきてもらう?
これが一番良い。しかしながら貸出PCも必須。何割か開発環境がうまく動かない場合もあり、その場合は貸出PCで凌ぐ必要がある。また、30分ぐらいの体験で気軽に参加してもらう場合には持ってきてもらうのは敷居が高くなる。
自前で用意する?
荷物にならなければこれが望ましい。しかしながら2~3kgのPC、および
ACアダプタを5台持ち込むと10~15kgとなる。1kg程度のウルトラスリムノートを用いることにする。そうすればACアダプタと本体で6kg程度。
Linuxで環境を揃える
半年に一度程度使う場合、WindowsUpdateがネック。管理コストがかかりすぎる。
かといってWindows7ではセキュリティが不安。
ということから、Linuxを使うことにする。