Raspberry Pi OS(Buster版)をROM化する

 

以前、Raspbian StretchでのラズパイROM化記事を書きましたが、Raspberry Pi OS(Buster)はもっと簡単にROM化することができます。

 

ROM化手順

ターミナルを起動して、コマンドラインからROM化を行います。

raspi-configコマンドを実行して、以下の順に選択します。

sudo raspi-config
7 Advanced Options
 AB Overlay FS

overlay file systemを有効にします。


Would you like the overlay file system to be enabled?
 Yes

bootパーティションを書き込み禁止にするか聞かれるので、こちらも有効にします。

Would you like the boot partition to be write-protected?
 Yes

リブートします。

Would you like to reboot now?
 Yes

これだけでROM化完了です。

 

ROM化の確認

df コマンドでファイルシステムを確認してみます。

pi@raspberrypi:~ $ df
Filesystem     1K-blocks   Used Available Use% Mounted on
udev              433916      0    433916   0% /dev
tmpfs              94808   2832     91976   3% /run
overlay           474036 103348    370688  22% /
tmpfs             474036      0    474036   0% /dev/shm
tmpfs               5120      4      5116   1% /run/lock
tmpfs             474036      0    474036   0% /sys/fs/cgroup
/dev/mmcblk0p1    258095  68280    189816  27% /boot
tmpfs              94804      0     94804   0% /run/user/1000

ルートディレクトリのファイルシステムがoverlayとなっていればROM化されています。

編集しても、リブートすればもとに戻ります。

bootパーティションが書き込み禁止になっているかも確認してみます。

pi@raspberrypi:~ $ touch /boot/aaa
touch: cannot touch '/boot/aaa': Read-only file system

ファイルを作ろうとするとエラーになります。

 

ROM化解除手順

編集したい場合は、ROM化の逆の手順を行ってROM化を解除します。

raspi-configコマンドを実行して、以下の順に選択します。

sudo raspi-config
7 Advanced Options
 AB Overlay FS

overlay file systemを無効にします。

Would you like the overlay file system to be enabled?
 No

bootパーティションを書き込み禁止にするか聞かれるので、無効にします。

Would you like the boot partition to be write-protected?
 No

リブートします。

Would you like to reboot now?
 Yes

これでROM化が解除されます。

Raspberry Pi OSをインストールしてWindowsからsshでログインする

Raspberry Pi OSをインストールしてみる

RaspbianからRaspberry Pi OSに変わったのでインストールしてみます。

ハードウェアはRaspberry Pi Model 3B+

インストーラ

インストーラも新しくなりました。

https://www.raspberrypi.org/downloads/

からインストーラをダウンロードしてインストールします。バージョンは1.4。

SDカードリーダー等でMictoSDカードをPCに接続します。

インストーラを起動後は、Operating Systemとインストール先のSD Cardを選択してWRITEをクリックするだけ。

今回はRaspberry Pi OSのDesktop版を選択しました。

公式ページの情報だとこんなバージョンです。


            Raspberry Pi OS (32-bit) with desktop
            Image with desktop based on Debian Buster
            Version:August 2020
            Release date:2020-08-20
            Kernel version:5.4
            Size:1133 MB

他にはRaspberry Pi OSのLite,Fill、Ubuntuなども選択できます。

 

初期設定

せっかくDesktop版を選びましたが、ここからはターミナルで初期設定を行います。

 

キーボードレイアウト

ラズパイは初期設定では英国キーボードになっていて使いにくいので、日本語キーボードに変更します

ターミナルを開きます。

sudo raspi-config

コンフィグ画面が開きます

4. Localisation Options
        I3 Change Keyboard Layout

の順に選びます。

Keyboard modelを聞かれましたが、使っているキーボードが選択肢になかったので適当にLogitechを選びました。

次にKeyboard Layoutを選択します。こちらは重要です。

Other
        Japanese
            Japanese - Japanese (OADG 109A)

の順に選択しました。

最後の(OADG 109A)は使用しているキーボードに合わせて選択してください。

 

続いてkey function as Altgrを選択します。

AltGrというキーは日本語キーボードには無いのでNo AltGr keyを選択します。

 

さらにCompose keyを選択します。

こちらはよくわからなかったので、No compose keyを選択しました。

 

これですべての設定が終わったのでYesを選択したら完了です。

 

ssh

次にsshの設定を行います。

sudo raspi-config

コンフィグ画面が開きます

5 Interfacing Options
        P2 SSH

の順に選べばsshでアクセスできるようになります。

 

ラズパイのIPアドレスを確認しておきます

ipconfig

eth0の後のIPアドレスを覚えておきます。

私の環境では192.168.11.13でした。

 

Windowsからsshでアクセス

sshでアクセスする準備ができたので、ここからはWindowsに戻ります。

Windowsコマンドプロンプトを開きます。

Windows10であればOpenSshが最初からインストールされているのでsshコマンドが使えます。

先ほど確認したラズパイのIPアドレスを使います。

ラズパイの初期パスワードは pi

パスワードは raspberry なので、以下のコマンドを実行します。

ssh pi@192.168.11.13

パスワードを聞かれたら raspberry と入力するとラズパイにログインできます。

Go Modulesで自作のサブパッケージを使う

Go Modulesでローカルのサブパッケージを使ってみる

ディレクトリ構成

└─gomodsample
  │ main.go
  │ sample.exe
  │
  └─sub
        sub.go

まずはGo Modulesの初期化

go mod init yrhw0609/sample

yrhw0609/sampleという名前で初期化しました

 

サブパッケージにSubFuncという関数を作成します

sub.go

import "fmt"

func SubFunc() {
  fmt.Println("sub")
}
    

先ほどのSubFuncをmainパッケージから呼び出します

main.go

package main

import (
  "yrhw0609/sample/sub"
)

func main(){
  sub.SubFunc()
}
    

yrhw0609/sample/subというパッケージになっています

あとはbuildするだけ

go build

Go言語 + Windowsでlinux用の実行ファイルを作成する

基本的には、環境変数でGOOS、GOARCHを設定した後にビルドするだけでlinux用の実行ファイルを作成できます。

> set GOOS=linux
> set GOARCH=amd64
> go build

powershellの場合は、環境変数の設定方法が異なります。

> $Env:GOOS="linux"
> $GOARCH="amd64"
> go build

ラズパイの場合

> $Env:GOOS="linux"
> $GOARCH="arm"
> $GOARM="7"
> go build

VirtualBoxの仮想マシンが開けない

VirtualBox仮想マシンを久々に起動しようとしたら、「セッションを開けませんでした」というエラーが表示されてしばらくハマっていました。

なんとか解決できたので、メモしておきます。

エラーの内容

Call to WHvSetupPartition failed: ERROR_SUCCESS (Last=0xc000000d/87) (VERR_NEM_VM_CREATE_FAILED).

動作環境

Windows10 pro

試したけどダメだったこと

うまくいったこと

以下の手順でHyper-VをOFFにする

1. コマンドプロンプトを管理者として起動

2. bcdedit /set hypervisorlaunchtype off

3. Windows再起動

その後VirtualBoxを起動したらうまくいった!

原因

どうやらDockerを使うためにHyper-Vを有効にしたのが原因だったらしい。

でもWindowsの機能の有効化でHyper-Vを無効にしてもダメだったのはよくわからない。

とはいえ、Dockerが使えないのは困るので、普段はHyper-VをONにしておく

Hyper-VをONにする手順

1. コマンドプロンプトを管理者として起動

2. bcdedit /set hypervisorlaunchtype auto

3. Windows再起動

GO言語+Windows10でSQLite

GO言語+Windows10でSQLiteをインストールしようしたらハマったのでメモ


go getでSQLite3をインストール

PowerShellを起動して以下のコマンドを実行します。

go get github.com/mattn/go-sqlite3
        # github.com/mattn/go-sqlite3
		exec: "gcc": executable file not found in %PATH%

gccが無いというエラーが出てしまいます。


gccをインストール

こちらのサイトを参考にしました。

https://www.write-ahead-log.net/entry/2016/07/01/133824

tdm-gccを以下のサイトからダウンロードします。

http://tdm-gcc.tdragon.net

今回は、64bitのWindows10を使っているので、TDM64 bundleをダウンロードして、デフォルトの設定のままインストールしました。

もう一度go getでSQLite3をインストールしてみます。

go get github.com/mattn/go-sqlite3

今度はエラーが出ないで終了しました。

ラズパイにwindowsからアクセスできる共有フォルダを作成する

sambaサーバーをインストール

ラズパイにsambaサーバーをインストールします。

$ sudo apt install samba

共有フォルダにするディレクトリを設定

/home/pi/sharedを共有フォルダにします。

$ mkdir /home/pi/shared

読み書き可能な共有フォルダにしたいので、ディレクトリの権限を変更します。

$ chmod 777 /home/pi/shared

sambaサーバの設定を変更します。

$ sudo /etc/samba/smb.conf

共有フォルダの設定を末尾に追記します。

プリンタ等の設定がデフォルトで書かれているので、必要な部分コピペして変更しました。

[shared] ;この名前が共有フォルダ名になります
            path = /home/pi/shared ;共有したいディレクトリのパス
            guest ok = yes ;ゲストアクセスを許可
            read only = no ;書き込み可能
            create mask = 777 ;作成するファイルの権限
        

sambaデーモンを再起動

$ sudo service smbd restart

 

windowsからアクセス

windowsexplorerで、\\<ラズパイのIPアドレス>\shared と入力

完了!