- 投稿日:2021-07-20T23:18:21+09:00
WSL上にRaspberry Pi OS(RaspbianBuster)をQEMUエミュレーターで動かす(Raspi2、Raspi3マシン)
はじめに VSCodeのRemort SSHにてRaspberry Pi OSに接続し C++のクロスコンパイルを実現しようとしたものの、リモート側とリモートホスト側がWindowsという組み合わせでは「vscode-server」はインストールできたのだが、その後の接続が安定しないのです。 リモートホスト側をLinuxにすれば、重いですがVSCode上でデバッグが出来るまでになりました。 Windows 10には、WSL(Windows Subsystem for Linux)というLinuxバイナリ実行可能ファイルをネイティブに実行するための互換性レイヤーが備わっているので、これでQEMUエミュレーターを動かしてみました。 環境 Windows 10 Home 64bit(21H1) ※MacのParallels Desktop 15 Standard Edition上で使用 QEMU 5.2 WSL(Ubuntu 20.04 LTS) ※WSL2は、Parallels Desktop Standard Editionだと「ネストされた仮想化を有効にする」が使用不可で断念 ParallelsでWindows 10のWSL2を使う WSLでGUI環境 QEMUのオプションnographicを指定すればGUI環境は不要になるのですが、GUI環境で動作させてみたかった。 本当はWSL2のGUI対応(WSLg)のプレビューが始まったので「WSLg」でやりたかったのですが、自分の環境では「Parallels Desktop Standard Edition」を使用しているため、WSL2が使用できませんでした。 導入手順 QEMUのインストール QEMUは、CPUエミュレーションをするためのソフトウェアになります。 Ubuntu 20.04 LTSでは「sudo apt install -y qemu-system」とすると、QEMU 4.2.1がインストールされます。 しかし、QEMU 5.1以降でUSBコントローラをサポートしたことでネットワーク等が使用できるようになったので、QEMU 4.2.1では意味がありません。 最新のQEMU 6.0があるのですが、コンパイル方法で躓いて諦めました。 UbuntuにはサーバーバックポートのPPA(Personal Package Archive)があり、QEMU 5.2をインストールすることができました。 第419回 長期サポート版で改めて見直す,PPAとのお付き合い $ sudo add-apt-repository ppa:canonical-server/server-backports $ sudo apt-get update $ sudo apt install -y qemu-system $ qemu-system-aarch64 -version QEMU emulator version 5.2.0 (Debian 1:5.2+dfsg-9ubuntu3~backport20.04-202104240125~ubuntu20.04.1) Copyright (c) 2003-2020 Fabrice Bellard and the QEMU Project developers GUI環境の構築 GUI環境の構築のために下記サイトを参考にWSL上にX11アプリケーションを実行できる環境にしました。 GUI環境は不要な場合、これより下の項目の作業は不要になります。 X11のインストール sudo apt install x11-apps VcXsrvのインストール SourceForge.netからVcXsrvをダウンロードします。 https://sourceforge.net/projects/vcxsrv/ VcXsrvを起動 スタートメニューからVcXsrvフォルダを開き、XLaunchアイコンをクリックします。 画面の設定は下記サイトを参照してください。 https://dev.classmethod.jp/articles/wsl-x-window/ WSLに設定 タスクバーの右横にある「通知領域」にXLaunchアイコンがあるので、マウスを合わせるとツールチップスにアドレスが表示されます。そのアドレスを設定します。(PCによって値が異なります。) $ export DISPLAY=48C2:0.0 $ echo $DISPLAY ターミナルを起動したときに環境変数の追加を自動でやってほしい場合「.bashrc」を編集すればいいです。 .bashrc $ sudo nano ~/.bashrc # 最下行に追加 export DISPLAY=48C2:0.0 xeyesの確認 Windowsのデスクトップ上に、xeyes等ののX11アプリケーションが表示されるのを確認します。 $ xeyes xeyesは2つの動眼を表示するグラフィカルなプログラムで、動眼がまるでマウスカーソルを見ているかのようにその動きを追うようになっています。 GUI環境 GUI環境は、下記サイトを参考に導入します。 RaspberryPi3フォルダを作成して、run.shファイルを新規作成します。 $ mkdir RaspberryPi3 $ cd RaspberryPi3 $ touch run.sh $ nano run.sh Linux版との違いとしてWSLでは容量が少ないことを考慮して、イメージなどはWindowsフォルダ「/mnt/c/RaspberryPi3」を指定しています。 run.sh #!/bin/sh cd `dirname $0` qemu-system-aarch64 \ -m 1024 \ -M raspi3 \ -kernel /mnt/c/RaspberryPi32/kernel8.img \ -dtb /mnt/c/RaspberryPi32/bcm2710-rpi-3-b.dtb \ -drive format=raw,file=/mnt/c/RaspberryPi32/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=1280 bcm2708_fb.fbheight=720" \ -serial stdio \ -no-reboot \ -device usb-kbd \ -device usb-tablet \ -device usb-net,netdev=net0 \ -netdev user,id=net0,hostfwd=tcp::2222-:22 ターミナル上でrun.shに実行権限を追加してから実行すれば、 数分でRaspberry Pi OSが起動します。 Linux版と比べて何か表示されるまでに数分かかります。 $ chmod 755 run.sh $ ./run.sh XLaunchアイコンが起動していない場合、下記のエラーになります。 Unable to init server: Could not connect: Connection refused gtk initialization failed CUI環境 今回は、Raspi3マシンのみとします。 GUI版に合わせたためデスクトップイメージを使用していますが、用途によってはライトイメージを使用してもいいと思います。また、その際にはイメージサイズも4Gと小さくしてもいいでしょう。 イメージサイズを8Gに変更します。 $ qemu-img resize /mnt/c/RaspberryPi3/2020-08-20-raspios-buster-arm64.img 8G WARNING: Image format was not specified for '/mnt/c/RaspberryPi3/2020-08-20-raspios-buster-arm64.img' and probing guessed raw. Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted. Specify the 'raw' format explicitly to remove the restrictions. Image resized. RaspberryPi3フォルダを作成して、run.shファイルを新規作成します。 $ mkdir RaspberryPi3 $ cd RaspberryPi3 $ touch run.sh $ nano run.sh GUI版との違いとして画面表示なしオプションの「-nographic」を追加することで、キーボードやマウスなどのデバイスや画面サイズの指定などを省いています。 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" \ -nographic \ -device usb-net,netdev=net0 \ -netdev user,id=net0,hostfwd=tcp::2222-:22 ターミナル上でrun.shに実行権限を追加してから実行すれば、 数分でRaspberry Pi OSが起動します。 Linux版と比べて何か表示されるまでに数分かかります。 $ chmod 755 run.sh $ ./run.sh ログインを求められます。 デフォルトの管理者 ユーザー名:pi パスワード:raspberry ネットに繋がっているか確認します。eth0 または usb0 が表示されるはずです。 $ ip addr 2: usb0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000 SSHを有効化する $ sudo systemctl enable ssh --now 空き容量を増やします。 設定画面が表示されるので、「7 Advanced Options -> A1 Expand Filesystem」を選択する。 $ sudo raspi-config スワップ領域も少ないので下記コマンドで修正を行います。 $ sudo nano /etc/dphys-swapfile /etc/dphys-swapfile CONF_SWAPSIZE=2048 設定を反映します。 $ sudo dphys-swapfile install $ sudo dphys-swapfile swapon $ swapon -s VSCode クロスコンパイル環境を実現したいため、Remort SSHを使用してC++による開発を行えるようにします。 Remort SSH Remort SSHするだけなら、Raspberry Pi OS側にVSCodeをインストールする必要はありません。 VS Code Serverは、ネットワークが遅いのでインストールが完了するまでに30分くらいかかります。 開発言語にC++として拡張機能をインストールしました。ネットワークが不安定なので何度か繰り返したりしました。 C/C++ C/C++ IntelliSense 最後に これで、WindowsならVirtual BoxでLinuxをインストールしなくても、WSLを使用すればいいです。 どうしてもWSL2でやってみたくなったため、「Parallels Desktop 16 for Mac Standard Edition」から「Parallels Desktop for Mac Pro Edition」にアップグレードしました。 これで「ネストされた仮想化を有効にする」ことができるため、WSL2やWSLgやqemu-kvmなどいろいろ試せそうです。
- 投稿日:2021-07-20T22:15:16+09:00
linuxショートカットキー一覧
コマンド入力系 コマンド履歴を検索する Ctrl + r コマンド履歴を中止する Ctrl + g 行頭に移動する Ctrl + a 行末に移動する Ctrl + e カーソル左の全てを削除する Ctrl + u カーソル右の全てを削除する Ctrl + k カーソル左の一単語を削除する Ctrl + w vi 一番下にいく Shift + g 一番上にいく gg 一番下から検索する ?hoge 一番上から検索する /hoge 上から大文字小文字区別せず検索する /hoge\c 下から大文字小文字区別せず検索する ?hoge\c 一括置換する :%s/hoge/fuga/g 一つ戻る u やり直す Ctrl + r 右にある一単語を削除する dw 一行削除する dd 一行コピーする yy コピーした行を一行下に挿入する p
- 投稿日:2021-07-20T22:14:08+09:00
業務で使う最低限のSSH接続設定
はじめに 新しい案件に参画する際に、SSH関連の設定を行うが、よく忘れるため自身のメモとして以下内容を記載する。 SSH接続とは 公開鍵と秘密鍵の作成 SSH接続に利用するコマンド ~/.ssh/配下のファイルの内容 SSH接続とは リモートコンピュータと通信を行うためのプロトコル ネットワーク中でやり取りするデータが暗号化されるため安全 パスワード認証と公開鍵認証がある 公開鍵と秘密鍵の作成 $ ssh-keygen # パスワードを未設定にすると、以降の接続でパスワードの入力が不要 # もし~/.ssh/が存在しない場合は以下で作成しておく $ mkdir ~/.ssh/ $ chmod ~/.ssh/ 700 $ touch ~/.ssh/config SSH接続に利用するコマンド 基本は以下オプションを含めたsshコマンドを利用することが多い。 ※ ~/.ssh/id_rsaのパーミッションは600にする必要がある。 ※ chmod 600 ~/.ssh/id_rsa $ ssh -i ~/.ssh/id_rsa apache@11.111.111.11 -p 22 # -i:秘密鍵の指定 # ~/.ssh/id_rsa:秘密鍵 # apache:ユーザ名 # 11.111.111.11:接続先のホスト名 # -p:ポート番号を指定 # 22:利用するポート番号 しかし、ssh接続をする機会が1日に複数回あるため、正直面倒である。そこで、後述する~/.ssh/configに接続情報などの情報を記述することで、上記sshコマンドの内容を省略することが出来る。 ~/.ssh/config Host dev HostName 11.111.111.11 Port 22 User apache IdentityFile ~/.ssh/id_rsa ~/.ssh/configを記述した場合のsshコマンドは以下の通り。 $ ssh dev ~/.ssh/配下のファイルの内容 id_rsa ssh-keygenで生成された秘密鍵 id_rsa.pub ssh-keygenで生成された公開鍵 config SSH接続の情報を記述するためのファイル known_host 今まで接続したサーバの情報が書き込まれる
- 投稿日:2021-07-20T12:10:48+09:00
macOSの.DS_Storeを一括削除する方法
macOSが各ディレクトリに生成するファインダーファイル(.DS_Store)を一括で削除するコマンド。 $ find . -name '.DS_Store' -type f -ls -delete