日経Linux2021年11月号はセキュリティ特集でした

f:id:ueponx:20211013220618p:plain

先日発売された日経Linux2021年11月号ですが内容を確認しながら読んでいます。自分はIT技術とは無縁の業務になっているので、業務中に勉強するのはちょっとむずかしい状況なので、雑誌などで自分の興味のないところを補強していかないとなかなかに新しい知識をインプットすることができない印象があります。特に今回はセキュリティという内容だったので、できるだけ避けてきているところなのでかなり難しいです。

というか、付録である「今どきのLinuxのはじめ方」が厚くてビビりました。

気になった記事などをここでメモっておいて、あとから調べてみようかなと思っています。

続きを読む

Amazon Fire HD10をPCのサブモニター化する

以前、開催されていたAmazonさんのセールでFireHD10を購入しました。キーボードセットもその当時は魅力的ではありましたが、これまでこういう端末でキーボードを購入 しても全く使ってないというようなことがよくあったので、そのときは、買うまいという意思を固めて購入をやめました。その選択肢は予想通りあたり、今はSNSをみたり、動画サービスをみるような端末として大活躍しています。ただ10インチもいる?といわれるとたぶん8インチを選択したほうがよかったのかもなあという気分です。10インチは手持ちするとかなりの大きさなんですよね。

最近は、古いモニタを捨てたこともあり、家での作業でデュアルモニタを使えない状態になっています。そこで、モバイル液晶っぽいモニターがほしいなあと感じていました。2k、13インチぐらいであれば値段もこなれてきているなあとは思ったのですが、折角ある10インチの液晶デバイスFireHD10があるので、これをなんとかできないかと思ってサブモニタ化してみることにしました。サブモニタなので、資料を表示して確認するような用途だったりとか音楽プレーヤなどのGUIを表示しておくなどの用途とします。バリバリとその上で作業をするというよりは一時的なデスクトップという程度でしょうか。

以前は、タブレットiPadなど)の映像をFire Stickに表示するというエントリを書きましたが、今回は逆のことをやっていきます。

使用したアプリケーションはspacedeskになります。

続きを読む

WSL2環境でQEMU実行環境を構築しRaspberryPi OS(GUI環境)を起動する

タイトルがクソ長い…

以前からWindows上でもRaspberryPi OSの動作ができるというQEMUの存在は知っていたのですが、もっと手軽に使えないかなと思っていました。そんな中、最近ネットを検索しているとWSL2環境で構築したQEMU上でもRaspberryPi OSが動作し、X Window Systemも起動できるということを知りました。

f:id:ueponx:20211006134854p:plain

ja.wikipedia.org

e-words.jp

QEMUとは、コンピュータの挙動をソフトウェア的に再現するエミュレータ型の仮想化ソフトの一つ。コンピュータ内で別のコンピュータを起動し、ソフトウェアを実行することができる。(IT用語辞典より引用)

とのこと、アーキテクチャ違いのものでも動くのは気になります。

そこで今回は、以下2つの情報をもとに挑戦してみようと思います。参考情報元の方々ありがとうございます。

【参考】

qiita.com

qiita.com

qiita.com

準備

必要となるファイルの準備

まずは必要となるファイルをダウンロードします。ファイルの保存場所をC:\RaspberryPi3にしようと思いますので、まだ作成していない場合には作成します。Cドライブの直下にしているのはパス名が長くならないようにする工夫です。

github.com

RaspberryPi OSのイメージは以下のサイトなどからダウンロードします。 お気づきかもしれませんが、今回使用しているOSイメージは少し古めです。自分も試してみたのですが、最新のイメージであるraspios_armhf-2021-05-28で動作させようとするとエラーが発生するようです。(参考情報でも似たような現象があるとの話でした)そのため、今回はraspios_armhf-2020-08-24を使用しています。

ftp.jaist.ac.jp

また、起動に際してはOSイメージ以外にもカーネルとデバイスツリーのファイル(Device Treeが記述されたバイナリ(dtb: Device Tree Blob)も必要になります。RaspberryPiへインストールするSDカードイメージからこれらを取り出すことも可能なのですが、以下のGitHubリポジトリを使うことで、かなり容易に準備することができます。

以下のリポジトリからZipファイルをダウンロードします。

qiita.com

リポジトリにアクセスして、以下の操作を行ってZipファイルをダウンロードします。

f:id:ueponx:20211005233519p:plain

ダウンロードしたZipファイルの中にある

qemu-rpi-kernel-master.zip\qemu-rpi-kernel-master\native-emulation\5.4.51 kernelsにある、kernel8.imgをC:\RaspberryPi3にコピーします。

f:id:ueponx:20211005234245p:plain

加えてqemu-rpi-kernel-master.zip\qemu-rpi-kernel-master\native-emulation\dtbsにある、bcm2710-rpi-3-b.dtbをC:\RaspberryPi3にコピーします。

f:id:ueponx:20211005234251p:plain

これで、必要なファイルの準備は完了です。

WSL2の環境にQEMUをインストールする

続いての準備はWSL2上のUbuntu環境にQEMUをインストールしていきます。

WSL2の設定などに関しては過去のエントリを確認して設定を行ってください。(Dockerのことも記載していますが、今回は不要です)

uepon.hatenadiary.com

設定できたらUbuntuのターミナルに接続し、QEMUのインストールしていきます。

Ubuntu 20.04 LTSでQEMEをインストールするときにsudo apt install -y qemu-systemと行うと、QEMU 4.2系がインストールされます。 インストールされるバージョンを確認するには以下のコマンドを実行すればOKです。

$ apt list -a | grep qemu-system

今回はネットワーク機能も使用するため、USBコントローラをサポートしたQEMU 5.1以降のバージョンが必要になります。 そこでUbuntuのサーバーバックポートのPPA(Personal Package Archive)から、QEMU 5.2をインストールしていきます。

【参考】

WSL2(WSLg)上にRaspberry Pi OS(RaspbianBuster)をQEMUエミュレーターで動かす(Raspi3マシン) - Qiita

PPA(Personal Package Archive)を使用して、QEMU 5.2をインストールする

PPAを使用するにはaptコマンド側にインストールパッケージの含まれたリポジトリを追加する必要があります。以下のコマンドを実行することでリポジトリの追加、更新が行われます。最後のコマンドで実際にインストール可能なバージョンに5.2系が含まれるかを確認しています。

$ sudo add-apt-repository ppa:canonical-server/server-backports
$ sudo apt update
$ apt list -a | grep qemu-system

無事にQEMUの5.2系がインストールパッケージに含まれる様になったら、先程述べたインストールコマンドを実行していきます。

$ sudo apt install -y qemu-system

完了したら、念の為バージョンを確認しておきましょう。

$ qemu-system-aarch64 --version

f:id:ueponx:20211006123956p:plain

これで準備は完了です。

QEMUの起動スクリプトを使用してRaspberryPi OSを起動する

QEMUの起動スクリプトは以下のようになります。このスクリプトX Window System環境(以下GUI環境)を起動できます。このスクリプトはCドライブの直下にRaspberryPi3というフォルダを作成し、その中にあるカーネルイメージ、デバイステーブル、OSイメージを配置して、使用するようにしています。WSL2ではWindows上のファイルも/mnt/c/というパスでマウントされているため、WSL環境下のOSのボリューム容量が小さい状態であってもマウントしてあるWindows側のパスを使うことができるというメリットがあります。

今回は以下で設定してあります。これらのファイルはC:\RaspberryPi3というフォルダに保存済です。

  • カーネル … kernel8.img
  • バイスツリーのファイル(dtb: Device Tree Blob) … bcm2710-rpi-3-b.dtb
  • OSイメージ … 2020-08-20-raspios-buster-arm64.img

run.sh

#!/bin/sh
cd `dirname $0`

qemu-system-aarch64 \
-m 1024 \
-M raspi3 \
-kernel /mnt/c/RaspberryPi3/kernel8.img \
-dtb /mnt/c/RaspberryPi3/bcm2710-rpi-3-b.dtb \
-drive format=raw,file=/mnt/c/RaspberryPi3/2020-08-20-raspios-buster-arm64.img \
-append "console=ttyAMA0 root=/dev/mmcblk0p2 rw rootwait rootfstype=ext4 dwc_otg.fiq_fsm_enable=0 bcm2708_fb.fbwidth=1920 bcm2708_fb.fbheight=1080" \
-serial stdio \
-no-reboot \
-device usb-kbd \
-device usb-tablet \
-device usb-net,netdev=net0 \
-netdev user,id=net0,hostfwd=tcp::2222-:22

作成した実行スクリプトは実行権限を与えます。

その後、実行を行うとQEMU上でRaspberryPi OSが起動し以下のように表示されます。私のPCは第6世代のCore-i7ですがXの環境が表示されるまでに8分ほどかかりました。 ログインプロンプトが表示されるまでは4分程度となっています。起動後すぐにGUI側の表示にRaspberryPiのロゴが出てくれるので動作していることはわかりやすいと思います。

起動直後 f:id:ueponx:20211006125941p:plain

ログインプロンプトが表示 f:id:ueponx:20211006130043p:plain

起動完了(Windows画面上に表示されています) f:id:ueponx:20211005231349p:plain

初回起動時のダイアログも表示されます f:id:ueponx:20211005231357p:plain

chromiumを起動してみました f:id:ueponx:20211005231411p:plain

aptで新しいパッケージを入れてみました

f:id:ueponx:20211006132401p:plain

CPUの負荷はかなりあるようです

f:id:ueponx:20211006132442p:plain

ちなみにshutdownするとKernel panicが発生しますw

f:id:ueponx:20211006133803p:plain

CLI環境での起動

GUI環境は負荷が大きいので実用的とは言い難い状況です。そこでCLI環境でも試してみました。 起動スクリプトは以下のようになります。-nographicオプションをつけているところがポイントになります。

runCLI.sh

#!/bin/sh
cd `dirname $0`

qemu-system-aarch64 \
-m 1024 \
-M raspi3 \
-kernel /mnt/c/RaspberryPi3/kernel8.img \
-dtb /mnt/c/RaspberryPi3/bcm2710-rpi-3-b.dtb \
-drive format=raw,file=/mnt/c/RaspberryPi3/2020-08-20-raspios-buster-arm64.img \
-append "console=ttyAMA0 root=/dev/mmcblk0p2 rw rootwait rootfstype=ext4 dwc_otg.fiq_fsm_enable=0 bcm2708_fb.fbwidth=1920 bcm2708_fb.fbheight=1080" \
-nographic \
-device usb-net,netdev=net0 \
-netdev user,id=net0,hostfwd=tcp::2222-:22

f:id:ueponx:20211006133806p:plain

f:id:ueponx:20211006133810p:plain

X環境ほどの負荷はありませんが、起動には2分ほどかかりますね。

おわりに

今回はQEMUを使ってWindows上でもRaspberryPi OSの起動を試してみました。実際に使うのであればQEMUWindows版をインストールした方が負荷が少ないので現実的でしょう。 一度やってみたかったんですよね…っていうネタでした。

超いまさらcron設定を行ってみました

f:id:ueponx:20211005000919p:plain

技術の仕事をしているわけでもないため、普段全くcron処理などをしない人生なのですが、とあるキッカケがありsyslogcronを使うことになりました。基本的にはcronのログ設定なんてデフォルトでされてんだろうと思っていたのですが、違うみたいですね。cronの実験をしているのに全くログファイルが書き込まれず、悩んでいました。いままでの知識はなんだったのか…。

ということで、cron処理を行ったときのログファイルへの書き込み設定をまとめてみます。今後、使うことがあるのかわかりませんが。

最近ではcronではなくsystemdを使った方がいいようなことも目にするんですが実際のところはどうなんでしょうか。実務やっている方に聞いてみたいです。

【参考】

qiita.com

続きを読む

Raspberry PiにMicrosoft Teamsをインストールする

以前、Raspberry PiZoomをインストールしてみたという内容のエントリを書いていました。

参考 uepon.hatenadiary.com

uepon.hatenadiary.com

負荷は結構あるもののそこそこの動作をしてくれるみたいなのですが、x86エミュレータなどを使用しているような状況での動作なので、 一応使用はできるなというレベルなのかなと。

実は会社ではMicrosoft Teamsを使用しています。基本的には私用では使うことはほぼないのですが、たまにALGYAN(あるじゃん) のイベントで使うことがあるくらいでしょうか。

Zoomとの比較ということも兼ねて、Microsoft Teamsもインストールをしてみようと思います。

Microsoft Teamsをインストールする

Microsoft Teamsのインストールに関してはZoomに比べると比較的容易です。ただし、aptコマンドでのインストールではなくsnapによるインストールになるのが少し違います。

snap(Snappy)Wikipediaによると以下のようなパッケージマネージャのようです。

Snappyとはカノニカルが設計・開発したソフトウェアデプロイメントシステムかつパッケージ管理システムであり、元々はUbuntu Phoneオペレーティングシステム用に設計・開発された。Snappyのパッケージは 'Snap' と呼ばれ、Snapを使うツールは 'Snapd' と呼ばれる。Snapは様々なLinuxディストリビューションで動作するので、ディストリビューションの上流のソフトウェアデプロイメントに依存しない。Snappyのシステムは携帯電話、クラウド、IoTやデスクトップパソコン向けに設計されている。

aptに登録されていないプロプライエタリソフトウェアなソフトウエアがインストールできるのかな?という感じでしょうか。

以下のコマンドを実行していきます。snapdaptコマンドでインストールしたあと再起動していますが、snapdの起動をsystemctlなどで実行できれば、不要かもしれません。snapdのインストールが終わったら、Microsoft TeamsLinux版であるteams-for-linuxをインストールします。これで作業は終了です。

$ sudo apt update
$ sudo apt install snapd
$ sudo reboot
$ sudo snap install teams-for-linux

インストールが完了しても、Zoomなどのインストールとは異なりGUIメニューには登録されないので、必要があれば手作業で操作する必要があります。

実行

インストールが完了したら、実行してみます。コマンドラインからteams-for-linuxと実行すれば起動します。起動後に大量のエラーログが出力されますが、動作しますので無視して進めていきます。

Microsoft Teamsを実行する

$ teams-for-linux

大量のエラーメッセージ

f:id:ueponx:20210928001231p:plain

起動すると少し時間が必要ではありますが、Microsoftのサインダイアログが表示されるので、サインインします。(ユーザID/パスワード)

f:id:ueponx:20210926222333p:plain

ログインが終わってTeamsの組織選択が画面が表示されます。ここからは一般的な使い方になります。個人利用であればPersonalを選択することになります。会社用の組織も選択肢にでていたので、うまく動作しているようでした。

f:id:ueponx:20210926222341p:plain

組織選択が終わるとよく見かける画面になっています。

f:id:ueponx:20210926222345p:plain

かなり負荷のかかる作業を行っているようで、ボタンなどのクリック後もかなりもたつく印象ですが最低限の使用はできるようです。

RaspberryPiのGUIメニューへMicrosoft Teamsを追加

基本的な流れとしてはここまでで終了していますが、さすがにここまでだと使い勝手があまり良くないのでGUIのメニュー上にもMicrosoft Teamsを追加したいと思います。

まずは、メニューの【ラズベリーパイのアイコン】→【Preferences】→【Main Menu Editor】を選択します。

f:id:ueponx:20210927221538p:plain

すると、【Main Menu Editor】ダイアログが開きます。ここからメニューへ追加を行います。

f:id:ueponx:20210927221545p:plain

追加するカテゴリ(今回はInternet)に追加します。左側のカテゴリの【Internet】を選択し、右側の【New Item】ボタンをクリックします。

f:id:ueponx:20210927221552p:plain

開いたダイアログにデータを入力していきます。Commandのパラメータ部分には/snap/bin/teams_for_linuxを入力しましょう。

f:id:ueponx:20210927221558p:plain

あとはMicrosoft Teamsのロゴを設定して、【OK】ボタンをクリックします。

f:id:ueponx:20210927221603p:plain

無事にTeamsがメニューに追加されたので、【OK】ボタンをクリックします。

f:id:ueponx:20210927221609p:plain

実際にメニューにも追加されています。

f:id:ueponx:20210927221614p:plain

おわりに

Zoom以外のテレカンアプリも問題なく使えるような状況になってきました。本気でRaspberry Piで使用するのかという話になると少し(?)がつきまといますが、使えると知っていれば色々な事ができる可能性も広がります。

ちなみにUbuntuなどでも同様の作業でインストールができるようなのでそちらを使うほうが現実的かもしれません。