11
1 NetBSD on Google Compute Engine 2016-02-13 Ryo ONODERA <[email protected]> <[email protected]>

NetBSD on Google Compute Engine

Embed Size (px)

Citation preview

1

NetBSD on Google Compute Engine

2016-02-13

Ryo ONODERA<[email protected]><[email protected]>

2

NetBSD とは ?

➢ BSD (Berkeley System Distribution) の系統のオペレーティングシステムの一つ。

➢ 多くのアーキテクチャーに移植されているのが特徴。➢ Alpha, ARM, MIPS, PowerPC, m68k, 32/64-bit Sparc, SuperH, x86, x86_64, VAX

➢ OrenRISC 1000, RISC-V, 64-bit ARM とかもあるが…

➢ x86_64 アーキテクチャーで動くものは、 NetBSD/amd64 と呼ばれている。

3

Google Compute Engine とは ?

➢Google の提供する Google Cloud Platform の一つ。

➢IaaS (Infrastructure as a Service) 。➢VirtIO による準仮想化された仮想マシンが提供されます。

➢VirtIO に対応していないオペレーティングシステムは動かせないっぽい。

➢つまり、「遅くて良いので完全仮想化を使う」のは無理。

➢300 ドルまたは 60 日間の無料体験が可能 (2016-01-10 現在 ) 。➢標準では、各種 Linux distribution と Windows Server のイメージが提供されています。

4

NetBSD と Google Compute Engine

➢vioscsi(4) と言うのが NetBSD current にコミットされ

た。 Google Compute Engine にはこれが必須でした。

➢FreeBSD では、 virtio_scsi(4) がこれに相当するように思います。

10.0 以降含まれているようです。

5

Google Cloud SDK の導入と設定

➢pkgsrc/net/py-google-cloud-sdk から Google Cloud SDK をイン

ストールします。これは Python スクリプトです。

➢私は Python 2.7.11 で実行しました。

➢ウェブブラウザーをインストールします。➢私は Firefox 43.0.4 を使いました。 pkgsrc/www/firefox からインストールでき

ます。 Webkit ベースなものでも良いはずですが試してはいません。

➢/usr/pkg/py27-google-cloud-sdk/bin/gcloud auth login を実行します。

➢Firefox が立ち上がり、ユーザー認証の後、紐付けされます。

6

プロジェクトの作成とディスクイメージの準備

➢gcloud config set project netbsd-79925 のようにしてプロジェクトを作ります。

➢https://cloud.google.com/compute/docs/quickstart が参考になります。インスタンスは立ち上げる必要はありません。

➢NetBSD/amd64 current のディスクイメージを用意します。

➢cd /usr/src && ./build.sh release && ./build.sh live-image のようにすると、 NetBSD-7.99.25-amd64-live-sd0root.img が生成されます。

➢./build.sh live-image は、 gzip されたものを最終的に生成しますが、再度展開するのは面倒なので、中間生成物を使います。

➢NetBSD-7.99.24-amd64-live-wd0boot.img というのも作られますが、こちらは root ファイルシステム

がwd0 なので使えません。

➢これを作業ディレクトリーに disk.raw と言うファイル名でコピーしてきます。

7

ディスクイメージの調製

➢sudo vnconfig vnd0 disk.raw を実行して、 /dev/vnd0 にdisk.raw を割り当てます。

➢sudo mount /dev/vnd0 /mnt && sudo chroot /mnt /bin/sh としてディスクイメージの中身を調整します。

➢vioif0 でDHCP クライアントとして働くようにする。

➢/etc/rc.conf に ifconfig_vioif0=dhcp を追加する。

➢ユーザーを追加して、 ssh 公開鍵を配置する。

➢sshd が自動的に起動するようにする。

➢/etc/rc.conf に sshd=yes を追加する。

➢sudo umount /mnt && sudo installboot -e -o console=com0 /dev/rvnd0a を実行して、シリアルコンソールに起動メッセージを出すように設定します。

➢tar -Sczf netbsd79925.tar.gz disk.raw を実行して、ディスクイメージの雛形を作成します。

8

ディスクイメージのアップロードと仮想マシンの作成

➢Google Cloud Storage またはhttps な場所にnetbsd79925.tar.gz を置きます。

➢Google Cloud Storage にはgsutil コマンドでもウェブインターフェイスからでもアップロードできます。

➢gsutil cp netbsd79925.tar.gz gs://netbsd-compute-engine/netbsd79925.tar.gz

➢Google Cloud Storage に置いた場合には、gcloud compute images create netbsd79925 --source-uri gs://netbsd-compute-engine/netbsd79925.tar.gz のようにし仮想マシン生成用イメージを作成します。

➢netbsd79925 イメージをベースに仮想マシンを作成し起動させます。

➢gcloud compute instances create instance-1 --image netbsd79925 --zone us-east1-b --machine-type f1-micro➢自動的に起動します。

➢gcloud compute instances get-serial-port-output instance-1 --zone us-east1-b のようにして、ブートメッセージを得ることができます。ウェブインターフェイスからもダウンロードできます。

➢しかし、シリアルコンソール経由で操作をすることはできません。 ssh 経由で操作しないといけません。

9

起動メッセージ (1/2)

(snip)

pci0 at mainbus0 bus 0: configuration mode 1

pcib0 at pci0 dev 1 function 0: vendor 8086 product 7110 (rev. 0x03)

piixpm0 at pci0 dev 1 function 3: vendor 8086 product 7113 (rev. 0x03)

piixpm0: SMBus disabled

virtio0 at pci0 dev 3 function 0

virtio0: Virtio SCSI Device (rev. 0x00)

vioscsi0 at virtio0: Features: 0x0

vioscsi0: qsize 8192

scsibus0 at vioscsi0: 253 targets, 1 lun per target

virtio0: interrupting at ioapic0 pin 11

virtio1 at pci0 dev 4 function 0

virtio1: Virtio Network Device (rev. 0x00)

vioif0 at virtio1: Ethernet address 42:01:0a:f0:00:02

vioif0: Features: 0x30020<CTRL_VQ,STATUS,MAC>

virtio1: interrupting at ioapic0 pin 11

isa0 at pcib0

10

起動メッセージ (2/2)

com0 at isa0 port 0x3f8-0x3ff irq 4: ns16550a, working fifo

com0: console

com1 at isa0 port 0x2f8-0x2ff irq 3: ns16550a, working fifo

attimer0 at isa0 port 0x40-0x43

pcppi0 at isa0 port 0x61

midi0 at pcppi0: PC speaker

sysbeep0 at pcppi0

attimer0: attached to pcppi0

acpicpu0 at cpu0: ACPI CPU

sd0 at scsibus0 target 2 lun 0: <Google, PersistentDisk, 1> disk fixed

sd0: fabricating a geometry

sd0: 2048 MB, 2048 cyl, 64 head, 32 sec, 512 bytes/sect x 4194304 sectors

sd0: fabricating a geometry

(snip)

11

おわり

https://creativecommons.org/licenses/by/4.0/

Copyright (c) 2016 Ryo ONODERA

CreativeCommons Attribution 4.0 International (CC BY 4.0)