狠狠撸

狠狠撸Share a Scribd company logo
1
NetBSD on Google Compute Engine
2016-02-13
Ryo ONODERA
<ryo_on@yk.rim.or.jp>
<ryoon@NetBSD.org>
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)

More Related Content

NetBSD on Google Compute Engine

  • 1. 1 NetBSD on Google Compute Engine 2016-02-13 Ryo ONODERA <ryo_on@yk.rim.or.jp> <ryoon@NetBSD.org>
  • 2. 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. 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. 4 NetBSD と Google Compute Engine ?vioscsi(4) と言うのが NetBSD current にコミットされ た。 Google Compute Engine にはこれが必須でした。 ?FreeBSD では、 virtio_scsi(4) がこれに相当するように思います。 10.0 以降含まれているようです。
  • 5. 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. 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. 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. 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. 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. 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. 11 おわり https://creativecommons.org/licenses/by/4.0/ Copyright (c) 2016 Ryo ONODERA CreativeCommons Attribution 4.0 International (CC BY 4.0)