VirtualBoxの仮想マシンでUbuntu 18.04.3 LTS Server版をインストールしたはいいものの...

f:id:ts0818:20200125191022j:plain

Ubuntu(ウブントゥ[ʊˈbʊnt] ( oo-BOON-too)はDebian GNU/Linuxをベースとしたオペレーティングシステム(OS)である。Linuxディストリビューションの1つであり、自由なソフトウェアとして提供されている。カノニカルから支援を受けて開発されている。開発目標は「誰にでも使いやすい最新かつ安定したOS」を提供することである。デスクトップOSとして利用されることが多いLinuxディストリビューションである。

Ubuntu - Wikipedia

⇧  皆様ご存知、Linuxディストリビューションの1つ「Ubuntu」のロゴですね。

 

Linux界隈と言えば、なんか、Linus 氏の発言でザワザワしてるらしい。

kuenishi.hatenadiary.jp

  • Linusが非難したのはOracle ZFSであってOpenZFSではない
  • とはいえLinuxZFSがマージされることはないだろう
  • Ubuntuはライセンスは問題ないと3年以上前に宣言している

あたりが事実。

LinusがZFSにLKMLで言及した件 - kuenishi's blog

⇧  Oracle ZFSってファイルシステムLinuxにマージされたら著作権の問題が勃発するやろうが~!って至極真っ当な意見だったというようです。

かくして、Ubuntu は守護られた(守られた)のであった。 

 

2007年6月12日、Sun Microsystems(2010年1月27日にOracleに吸収合併される)に対してのLinusのメールには、

「サンはLinuxのリソース(特にドライバ類)を使いたいというわけだ。でも、彼らは何ひとつとして見返りを与えたりはしないだろう(中でも非常に非常に数少ない彼らの輝かしい成果であるZFSについては)」。リーナスは、よほどSolarisの次世代ファイルシステムZFS」が気に入っているらしく(参考記事:ノートPCでこそ使いたいZFS)、何度も繰り返しZFSを例にして、サンは重要でない部分ばかり公開して、技術的に優れた肝心の部分をGPLとしてオープンソースコミュニティに提供するということをしていないし、今後もしないだろうと指摘する。

Debian GNU/Solarisという選択肢 − @IT

⇧  とあり、Linus 氏としては「ZFS」の技術については認めているように見えますかね。「Linux」に「ZFS」を取り入れたいって気持ちはありそうだけど、13年経ってOracleになってからもOracle側から歩み寄るってことは無さそうね...

 

最近、技術書で有名な「O'Reilly」の創始者、「Tim O'Reilly」の本を読んだけど、


WTF経済 ―絶望または驚異の未来と我々の選択

⇧  技術は公開したほうが、技術革新の速度は上がるって話があったけど、さもありなん。

やっぱり、「オープンソースソフトウェア(英: Open Source Software、略称: OSS)」ってものが生まれたからこそ、ここまでWeb系の技術は発展してきた気がしますしね、企業のように潤沢な資金を持たない、私のような一個人が学習するには、「OSS」ってものをどんどん公開してくれたほうが、助かるんですけどね(ただ、ドキュメントは詳細に載せて欲しいことを切に願うけど。)

 

ま、

wired.jp

⇧  Linus 氏も、問題発言が多かったらしいっすね。

改心の懺悔と言ったところでしょうか...

のはずが、

japan.zdnet.com

⇧  またもや、ダークサイドに...

Linux は良くしてもらいたいけど、Linux コミュニティは大丈夫かな...

 

qiita.com

Linuxを最初に作ったのはリーナス・トーバルズだが、今のLinuxを作ったのはリーナス・トーバルズではない。
何人もの頭の良い人達が集まって作られているのがLinuxであり、リーナスの功績はそういった頭の良い人達をリードし調整したこと。

技術系の名言まとめ++ - Qiita

⇧ それでも、Linus 氏の性格はともかくとして、功績は大きいですと。

 

というわけで、Ubuntu 18.04 LTS(Server版)をインストールに、レッツトライ~。

 

仮想マシン作成(Ubuntu 18.04 LTS のServer版)

むちゃくちゃ泥沼にドハマりした(涙)。

コマンドでインストールしたのがね、地獄への幕開けでしたかね...

そんでは、その軌跡を載せていきます。

環境は、

  • Windows 10 Home(64bit)
  • VirtualBox(バージョン 5.1.30 r118389(Qt5.6.2))

の組み合わせです。

 

VBoxManageコマンドだけでいく(CLIだけ、つまりコマンドだけで)って場合は、

zaki-hmkc.hatenablog.com

⇧  上記サイト様が詳しいです。

GUIで操作していくって場合は、

www.sejuku.net

⇧  上記サイト様が詳しいです。

 

今回は、これまでやったことなかったので、VBoxmanage.exe で「仮想マシン作成、OSのインストール」までやってみようと。

ちなみに、PowerShellスクリプトファイルで試してみようってことで、拡張子「.ps1」のファイルを保存する際の文字コードってどうしたら良いのかな?って思ったので調べてみたところ、

qiita.com

(この記事では、Windows PowerShell(5.1 以前: powershell.exe)を PowerShell と書きます。PowerShell Core(6.0 以降: pwsh.exe)とは異なるので注意。)

PowerShell には文字コードの自動判別機能がない。また、実行時に文字コードを指定することもできない。ファイルに BOM(byte order mark: バイト順記号)があれば文字コードがわかるけれど、BOM がなければデフォルトの文字コードで読もうとする。デフォルトの文字コードは、日本語ロケールでは Shift-JIS。なので、BOM なし UTF-8 で書かれたファイルは読めない。

したがって、PowerShell が読める日本語のファイルは Shift-JIS か BOM 付きユニコードということになる。

日本語を含む PowerShell スクリプトの文字コード - Qiita

⇧  上記サイト様がまとめてくださっていました。意外に、情報が少なかったので助かりました。

PHPのファイルとかだと、「BOMなし」じゃないと不具合出たりするけど、PowerShellだと逆を行ってるんすね、PowerShell 独特だな~。 

とりあえず、iosイメージファイル(仮想マシンにインストールするOSのイメージファイル) をダウンロードしておきます。今回は、Ubuntu 18.04 LTS のServer版(GUI機能が無いもの)の iosイメージファイルを使いたいと思います。

https://ubuntu.com/download/server にアクセスします。

ubuntu.com

アクセスしたら、「Ubuntu Server 18.04.3 LTS」の「Download」をクリックで。

f:id:ts0818:20200119210621p:plain

ダウンロードされるので、しばし待ちで。

f:id:ts0818:20200119210753p:plain

 

ダウンロードが完了したらば、適当な場所に、仮想マシン作成の作業用のディレクトリを作成して、必要なファイルを配置。

f:id:ts0818:20200119211152p:plain

 

zaki-hmkc.hatenablog.com

⇧  上記サイト様のファイル内容をほぼそのまま流用させていただきました。

 

# 仮想マシンの情報を記載した設定ファイル(vmconf.json)を使用する
$config = Get-Content "vmconf.json" | ConvertFrom-Json
# Virtual BoxのCUIである、VBoxManage.exe を使用して、仮想マシンを構築するため
$vboxmng = "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe"
# 仮想マシンにインストールするOSのiosイメージ
$isofile = "C:\Users\Toshinobu\Desktop\soft_work\virtualbox_work\ubuntu-18.04.3-live-server-amd64.iso"

# 現在作成されてる仮想マシンの一覧(VBoxManageで作成された仮想マシン一覧)
$vmLists = & "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" list vms

$vmNicHostOnly = "VirtualBox Host-Only Ethernet Adapter #2"

# 仮想マシンが既に作成されているか?
function VM-Exist($item, $vmLists) {
    return ($vmLists | Select-String -quiet $item.vmname)
}

# 現在VirtualBoxに存在するNICに、「VirtualBox Host-Only Ethernet Adapter #2」は存在するか?
function VM-Nic-Exist($item, $vmNicHostOnly) {
    return (& $vboxmng list hostonlyifs | Select-String -quiet $vmNicHostOnly)
}

# 設定ファイル(vmconf.json)に記載したvmconfの数だけ繰り返し
foreach ($item in $config.vmconf) {
    echo $item
    if ((VM-Exist $item $vmLists)) {
        echo " '$item.vmname' is already exists."
        exit 1
    }
    # create vm
    & $vboxmng "createvm" --name $item.vmname --ostype $item.ostype --register
    # vm configure
    & $vboxmng "modifyvm" $item.vmname --cpus $item.cpus --cpuexecutioncap $item.cpuexecutioncap --memory $item.memory
    # vm network
    if (!(VM-Nic-Exist $item $vmNicHostOnly)) {
        echo " '$vmNicHostOnly' is nothing."
        & $vboxmng hostonlyif create
        & $vboxmng hostonlyif ipconfig $vmNicHostOnly --dhcp
    }
    & $vboxmng "modifyvm" $item.vmname --nic1 natnetwork --nat-network1 static-nat --nic2 hostonly --hostonlyadapter2 $vmNicHostOnly
    # cd
    cd ($env:USERPROFILE + '\VirtualBox VMs\' + $item.vmname)
    # create storage controller
    & $vboxmng storagectl $item.vmname --name SATA --add sata --controller IntelAHCI
    # create storage
    $diskname = $item.vmname + ".vdi"
    & $vboxmng createmedium disk --filename $diskname --size $item.storage --format VDI
    # attach storage
    & $vboxmng storageattach $item.vmname --storagectl SATA --port 0 --type hdd --medium $diskname

    # create DVD contoller
    & $vboxmng storagectl $item.vmname --name IDE --add ide --controller PIIX4 --hostiocache on
    # attach DVD
    & $vboxmng storageattach $item.vmname --storagectl IDE --port 0 --device 0 --type dvddrive --medium $isofile
}

「vmconf.json」については、今回、1つだけ仮想マシンを作成するので、

{
    "vmconf" :
    [
        {
            "vmname": "keras-master",
            "ostype": "Ubuntu_64",
            "cpus": 4,
            "cpuexecutioncap": 100,
            "memory": 2048,
            "storage": 40960
        }
   ]
}    

⇧ みたいな感じで、1つの仮想マシンの設定だけにしています。

そしたらば、Visual Studio Code を起動して、必要なファイル群を配置しておいた、仮想マシン作成の作業用のディレクトリを開きます。(PowerShellスクリプトファイルが実行できれば良いので、Visual Studio Codeじゃなくて、PowerShellの起動でも良いです。)

f:id:ts0818:20200119212110p:plain

「表示(V)」>「ターミナル」を選択。 

f:id:ts0818:20200119212443p:plain

「ターミナル」として、PowerShell が起動するので、作成していたPowerShellスクリプトファイルを実行します。

 

VirtualBox マネージャーで確認したところ、仮想マシンが作成できています。

f:id:ts0818:20200119224425p:plain

f:id:ts0818:20200120221915p:plain

もう一回、作成しようとすると、既にあるので仮想マシン作成の処理は行わず、スクリプトファイルが終了します。

f:id:ts0818:20200120222026p:plain

仮想マシンを起動。

f:id:ts0818:20200121201632p:plain
結局、最初は「VirtualBox マネージャー」のほうのコンソールで操作することんなるんだけどね...

paperface.hatenablog.com

⇧  上記サイト様を参考にさせていただき、設定を進める。

とりあえず、日本語は無いので、「English」を選択した状態でEnterキー。

f:id:ts0818:20200121201906p:plain

Windowsなので、Variant: のほうも Japaneseにしときました。そしたら、「Done」てとこでEnterキー。

f:id:ts0818:20200121203229p:plain

なぜか、「enp0s3」じゃなくて、「enp0s8」のほうでDHCPの設定がされてるけども、そのままの状態で、「Continue without network」を選択した状態でEnterキーしました。

f:id:ts0818:20200121202450p:plain

プロキシは使う場合は、入力。今回は、使わないのでデフォルトの状態でEnterキー。

f:id:ts0818:20200121202533p:plain

どこのミラーサーバを参照するかを決める。デフォルトの状態で「Done」でEnterキーしました。

2020年1月25日(土)追記:↓  ここから

何か、ミラーサーバは国内のにしといたほうが良いみたい...あっしは手遅れでしたけど

linuxfan.info

2020年1月25日(土)追記:↑  ここまで

f:id:ts0818:20200121204150p:plain

ファイルシステムの構成。LVMとか使ってみたかったけど、よく分からんのでデフォルトっぽい「Use An Etire Disk」でEnterキー。

f:id:ts0818:20200121204346p:plain

デフォルトの状態で「VBOX_HARDDISK_~」を選択した状態でEnterキー。

f:id:ts0818:20200121204558p:plain

デフォルトの状態で「Done」でEnterキー。

f:id:ts0818:20200121204631p:plain

「Continue」でEnterキー。

f:id:ts0818:20200121204712p:plain

「username」「password」は、SSHで接続する際のものになります。入力したら「Done」でEnterキー。

f:id:ts0818:20200121204916p:plain

「Install OpenSSH Server」にカーソル移動し、Enterキーした後に、「Done」でEnterキー。

f:id:ts0818:20200121205617p:plain

「Reboot Now」でEnterキー。

f:id:ts0818:20200121205649p:plain

再起動されるので、「username」「password」を入力してEnterキー。

f:id:ts0818:20200121205933p:plain

いろいろ処理が走って、

f:id:ts0818:20200121215707j:plain

完了すると、Ubuntu 18.04 LTS が準備できてます。

f:id:ts0818:20200121221840p:plain

OS確認。

f:id:ts0818:20200121222228p:plain

仮想マシンIPアドレス確認。

f:id:ts0818:20200123194350j:plain

そんじゃ、Visual Studio Code の「ターミナル」から、仮想マシンSSHログインしてみます。初回認証時は、

eng-entrance.com

各サーバにおいて初回接続時には、以下のようなメッセージが表示されるが、これは「~/.ssh/know_hosts」に公開鍵の情報記録が存在しないため、鍵の正当性が確保出来ないそのため表示される。初回接続このメッセージは問題ない。

「Are you sure you want to continue connecting (yes/no)?

【SSHをはじめて触る人へ】Linuxのホスト間認証とは?

⇧  ってことみたいです。

yes したら、Ubuntuのインストール時に設定した「password」を入力で。

f:id:ts0818:20200121223635j:plain

ログインできました。

時間の都合上、仮想マシンを停止して翌日に持ち越しで。これが泥沼の始まりだったと(涙)。

 

DHCP(Dynamic Host Configuration Protocol)の罠

まぁ、何ていうか、私がネットワークの知識が皆無ってだけなんですがね...

さて、仮想マシンを再起動したんで、SSH接続せなってことで、仮想マシンIPアドレス確認しないとね、ってな状況になったわけで。

というわけで、VirtualBoxCUIで操作できるというVBoxmanage.exe っていうのがあるじゃろ?

んで、おもむろに、

Vboxmanage list hostonlyifs    

f:id:ts0818:20200122223411j:plain

で、IPAddress が表示されたし、

Vboxmanage list dhcpservers 

f:id:ts0818:20200122223955p:plain

ztetez.hatenablog.com

VirtualBoxの内部ネットワークでDHCPによるIPアドレス割り当てをする方法 - セキュリティ技術者見習い備忘録

⇧ 上記サイト様によりますと、「VBoxmanage list dhcpservers」で「DHCPサーバのIPアドレス」も表示されたんで、DHCP Server とかも機能してんのかな~と思って、んじゃ、接続してみるべ、で 

ssh [sshユーザ名]@[ホスト] 

f:id:ts0818:20200122224325p:plain

弾かれると...何でやねん...初めて起動したときは繋がったやないかい~!

んで、仕方ないんで、一旦、仮想マシンを停止して、通常モードで起動で。

 

んで、普通にログインして、サーバ内からIPアドレスを確認。

f:id:ts0818:20200122225544j:plain

ん?IPアドレスが一致しないんだが...

www.komee.org

⇧  上記サイト様の説明を拝見させていただいた限りは、サーバ側の「enp0s8」でIPv4については、DHCPが有効になってるから、IPアドレス自体は設定されてるんではないかと。

 

superuser.com

You can use the VBoxManage command to extract the IP address, as shown in this forum post on virtualbox.org:

VBoxManage guestproperty enumerate <vmname>

Unless you have very good reasons, though, you'll want to strongly consider assigning a static IP address to your guest vm. This is possible even though you are probably using DHCP. Just pick an IP address outside the range that your DHCP server allocates.

virtualbox - How to get IP address assigned to VM running in background? - Super User

IPアドレスが確認できるコマンドあったやん。

f:id:ts0818:20200123201803p:plain

ん?IPアドレス確認できんけど?

 

9      that command did not return the IP address – amphibient Aug 20 '13 at 14:01

virtualbox - How to get IP address assigned to VM running in background? - Super User

⇧  「guest additions」がインストールされとらんと駄目らしい。

f:id:ts0818:20200123202359p:plain

⇧  「guest additions」がインストールされとらんらしい。 

 

blog.oracle48.nl

www.server-world.info

⇧  上記サイト様によりますと、「VBoxGuestAdditions.iso」ってものを事前に、ホスト側でインストールしておく必要がありますと。

ホストOSがWindowsの場合は、

f:id:ts0818:20200123203718p:plain

⇧  「C:\Program Files\Oracle\VirtualBox\VBoxGuestAdditions.iso」に配置されとるらしい。もし、ここに「VBoxGuestAdditions.iso」が配置されとらん場合は、使用しているVirtualBox のバージョンに合致する「VBoxGuestAdditions.iso」をダウンロードして配置すれば良いのではないかと。

VirtualBox のバージョン確認は、

Vboxmanage -v

f:id:ts0818:20200123204310p:plain

⇧  でいけるかと。「5.1.30r118389」って、だいぶ旧いな...

VirtualBox 本体のバージョンアップも時間がある時にせねばですね。 

 

そんでは「VBoxGuestAdditions.iso」をゲスト側にインストールしていきたいと思います。

まずは、「ホスト側から対象の仮想マシンドライブに GuestAdditions ディスクをアタッチ」で。PowerShellを使ってるので、

qiita.com

⇧  上記サイト様を参考にさせていただきました。

VBoxManage storageattach [仮想マシン名、または、UUID] `
--storagectl [ストレージのコントローラー名] `
--port [ポート番号] `
--type [dvddrive、hdd、fdd のどれか] `
--medium [ゲストアディションのisoイメージファイルまでのパス\VBoxGuestAdditions.iso]

f:id:ts0818:20200123213124p:plain

エラー。

www.virtualbox.org

at this point a full restart of all VBox processes is required.

#17515 (VBoxManager gets into a bad state) – Oracle VM VirtualBox

VirtualBoxのプロセスを再起動って言っとりますね。 

gist.github.com

Other issues:

VBOX_E_INVALID_OBJECT_STATE (0x80BB0007)

Solution: After the vm exports the .ovf, use the vbox to open the .vmdk. You don't have to import .ovf.

In windows you can kill the VboxHeadless.exe process in task manager. CMD prompt was opened in Administrative mode.

https://gist.github.com/hsiboy/7ef27ab2f14e76f5c3f4

⇧ 何か分からんのだけど、とりあえず、VirtualBox のすべてのプロセスをすべて再起動しろってことらしく。

やってみたんだけど、

f:id:ts0818:20200123213631p:plain

エラーは変わらず。

何か、アタッチ(Vboxmanage storageattach ~)のコマンドが間違ってたらしい。

f:id:ts0818:20200123215656j:plain

⇧  指定してた「ストレージ」の「コントローラー」の「SATA」が、「ポート 0」を使ってたんで、「ポート 1」とかにする必要があったちゅうことですかね。

 

vboxmania.net

SATA コントローラ

2003年に導入された比較的最近登場したストレージコントローラーで、ポート0から29まで、最大30ドライブを接続できます。
本物のSATAコントローラーと同様に、IDEコントローラーと比べ転送速度が速くCPUリソースの消費も少なくなっています。

このため、選択したゲストOSに応じて、新しく作成された仮想マシンの仮想ハードディスクイメージはデフォルトでSATAを使用します。

ストレージ設定 – VirtualBox Mania

⇧ 「ポート」は「0 ~ 29」まで使えると。

エラーなんすけど...

f:id:ts0818:20200123230150p:plain

 

なんか、

superuser.com

(this one is empty, so there are no device controllers, whether hard disks or CD/DVD drives)

C:\Oracle\VirtualBox>vboxmanage showvminfo "Windows 7 SP1 - SandBox 01" | find "SATA"
Storage Controller Name (1):            SATA
SATA (0, 0): d:\VirtualBox VMs\Windows 7 SP1 - SandBox 01\SnapShots/{71b8bf72-dca1-4816-89ff-feba271ec262}.vmdk (UUID: 71b8bf72-dca1-4816-89ff-feba271ec262)
SATA (1, 0): Empty

SATA(0,0) has a(the) virtual disk, and SATA(1,0) is empty (first number between parentheses is known as type, second one is device), so it should be the CD/DVD drive.

VirtualBox: How can I add (mount) a ISO image file from command-line? - Super User

⇧  上記サイト様を参考に、SATAコントローラー見てみたら、

f:id:ts0818:20200123225653p:plain

そもそも「ポート 1」の枠が無いんすけど...自分で作らないといかんってことかね?

 

その前に、いまいち「ストレージ」って何なん?という情弱な私です。

Computer data storage, often called storage, is a technology consisting of computer components and recording media that are used to retain digital data. It is a core function and fundamental component of computers.

Computer data storage - Wikipedia

Google 翻訳したところ、

『デジタルデータを保持するために使用される「コンピューター」コンポーネントと「記録メディア」で構成されるテクノロジーです。』

ですと。

The central processing unit (CPU) of a computer is what manipulates data by performing computations. In practice, almost all computers use a storage hierarchy, which puts fast but expensive and small storage options close to the CPU and slower but larger and cheaper options farther away.

Generally the fast volatile technologies (which lose data when off power) are referred to as "memory", while slower persistent technologies are referred to as "storage".

Computer data storage - Wikipedia

⇧  言わんとしてることは、

『「CPU」が処理する際に使うデータなんかを保持しとく場所が「ストレージ」で、「ストレージ」は「ストレージ階層」ってものに分かれてて、「CPU」と「ストレージ」の距離が近くなれば「CPU」の処理も高速に、「CPU」と「ストレージ」の距離が遠くなれば「CPU」の処理も低速になるんじゃと。』

んで、「CPU」に近づけるには、「ストレージ」を「小型」にする必要があり「小型」されたものを「メモリ」って呼ぶそうな。

「ストレージ階層」は、

Generally, the lower a storage is in the hierarchy, the lesser its bandwidth and the greater its access latency is from the CPU. This traditional division of storage to primary, secondary, tertiary and off-line storage is also guided by cost per bit.

f:id:ts0818:20200124214001p:plain

Computer data storage - Wikipedia

⇧ 「primary storage」「secondary storage」「tertiary storage」「off-line storage」の4タイプに分類されるそうな。

「CPU」の処理の速度に関わってくる「帯域幅」は「primary」が一番大きく、「off-line」が一番小さいそうな。(「帯域幅」が大きければ、「CPU」の待ち時間は小さく、「帯域幅」が小さければ、「CPU」の待ち時間は大きくなるようです。)

つまり、「primary」が一番、「CPU」が高速に処理できるんですと。

ストレージのタイプ 代表的な例
primary storage RAM( random-access memory )、
secondary storage HDDS( hard disk drives )、SSDS( solid-state drives 
teritary storage tape librariesoptical jukeboxes
off-line storage Optical discs、 flash memory、magnetic tape

ってな具合ですと。

んじゃあ、「ストレージ コントローラー」って? 

A storage controller is a device that controls storage arrays, and mainly comprises the three types of components—"CPU" (central processing unit), "cache memory" and "connection interface with the network and memory devices." It is otherwise called "storage processor" or "array controller," among other names.

Storage controller : Research & Development : Hitachi

⇧  「storage arrays」を制御する「デバイス」ですと。(「strage arrays」は「ストレージの配列」ってことらしいから、複数の「ストレージ」ってことなんでしょうね)

んで、「メモリ」は「ストレージ」の1種であることから、

A storage controller integrates the memory areas in multiple memory devices and provides them as a single memory area to the server. When receiving a request from the server to write data, the storage controller determines to which device from multiple memory devices the data is allocated, and stores the data in the selected device. When it receives a request from the server to read certain data, the storage controller finds the location where the relevant data is stored, reads the data from the memory device and transfers it to the server. Performing these processing tasks in an efficient and stable manner is the role of the storage controller. Aside from reading and writing data, the storage controller performs processing tasks to realize a variety of added-value functions, including dynamic allocation of the volume capacity and acquisition of snap shots.

Storage controller : Research & Development : Hitachi

⇧ 複数の「メモリ」を統合して、単一の「メモリ」としてサーバに提供してくれるんであると。(「ストレージ」にいろんな種類のファイルを設定できるってことですかね、最終的には、1つの「ストレージ」として統合されるってあるけど。)

んじゃ、「ストレージ コントローラー」の1種である「SATA」は?

シリアルATASATASerial ATA、シリアルエーティーエー、エスエーティーエーエスアタ、サタ)とは、コンピュータにハードディスクSSD光学ドライブを接続する為のインタフェース規格である。2010年時点において、SCSIパラレルATAに代わって主流となっている記録ドライブの接続インタフェース規格である。

シリアルATA - Wikipedia

⇧  ってな具合に、「コンピュータ」と「ストレージ」の接続のインターフェイス、つまり『「コンピュータ」と「ストレージ」の接続の仕様』ってことですと。

イメージ的には、

⇧ 上記サイト様のイメージ図のような感じですかね?

「NAND」は、

⇧ 「フラッシュメモリ」であるから、「メモリ」の1種であると仮定して、「メモリ」は小型化された「ストレージ」であるから、「フラッシュメモリ」である「NAND」は「ストレージ」と考えて矛盾しない。

なので、「ストレージ コントローラー」と接続してる「ストレージ」を判別するために「ポート」が用意されてますと。(「ストレージ」は、最終的に1つの「ストレージ」に統合されるけど、統合される前の各々の「ストレージ」にどんなファイルがセットされたのかを判別するために、「ポート」が必要ってことですかね?)

ここで、今一度、VirtualBox の「ストレージ コントローラー」を確認してみます。

f:id:ts0818:20200124223828p:plain

⇧  現状、「ストレージ」の「コントローラー:SATA」には、「ポート 0」で「ストレージ」と接続していて、「ストレージ」には「keras-master.vdi」というVirtualBox仮想マシンのイメージファイル がセットされてる状態です。

ちなみに、ここでの「vdi」は、「VDI(Virtual Disk Image)」であって、「VDI (Virtual Desktop Infrastructure)」とは別物です。(活字にしないと、どの「VDI」の話をしてるか分からんくなるな...略語って認識齟齬を生み出す元凶よね)

 

だいぶ、脱線しましたが、ホストOS側で「guestAdditions」のイメージファイルを「ストレージ」の「コントローラー:SATA」の「ポート 1」にセットしてあげれば良いようです。

ただし、VBoxmanageコマンドで「storageattach」する際のオプションの説明で、

docs.oracle.com

--medium

Specifies what is to be attached. The following values are supported:

  • additions: For a virtual DVD drive only, this attaches the VirtualBox Guest Additions image to the given device slot.

7.19. VBoxManage storageattach

⇧  「guestAdditions」は、「ストレージ」のタイプが「dvddrive」だけ対応ってなってるんで要注意ですかね。

そんでは、改めて、「VBoxmanage storageattach ~」コマンドを実施していくわけですが、その際、仮想マシンは停止しておかないと駄目なようです。仮想マシンが止まっている状態で、コマンドを実行すると、

f:id:ts0818:20200124230818p:plain

⇧ エラー無くイケました。

f:id:ts0818:20200124231006p:plain

⇧ 「コントローラー:SATA」の「ポート 1」で「ストレージ」に接続ができて、「ストレージ」には「VBoxGuestAdditions.iso」がセットされています。

「ストレージ」にセットした「VBoxGuestAdditions.iso」を使って、ゲストOS側で「guestAdditions」をインストールします。

仮想マシンを起動して、ログインします。

んで、必要なライブラリをインストールしようとしたら、エラー。というか、

f:id:ts0818:20200124235637p:plain

⇧  ネットワークが上手くいっとらんらしい...何でやねん。

時間の都合上、一旦、仮想マシンをシャットダウン。

翌日、繋がりました...謎過ぎる。ネットワーク安定しなさ過ぎでしょ...

f:id:ts0818:20200125135941p:plain

必要なライブラリをインストールなんだけど、初めにシステムを更新しとく必要があるみたいです。

なんか、スーパーユーザー(root)である必要?があるらしい。

sudo su    

そしたらば、システムのアップデート。

apt-get update

必要なライブラリをインストール。

LINUX_HEADERS=$(uname -r)
apt -y install gcc make bzip2 linux-headers-$LINUX_HEADERS   

f:id:ts0818:20200125140948p:plain

そしたらば、「guestAdditions」のインストールですが、ホスト側で「コントローラー:SATA」の「ポート 1」の「ストレージ」にセットした「VBoxGuestAdditions.iso」を、ゲストOS側で『マウント』しておく必要があります。

ちなみに、

kledgeb.blogspot.com

見た目で一番異なる点はこれでしょう。
CドライブやDドライブといった表現はありません。

LinuxではHDD内のパーティションをマウント(接続)すると、
フォルダのような扱いになり、HDDの中身にアクセスできるようになります。

必要なくなったらアンマウント(切断)できます。
これはHDDに限ったことではなく、CD/DVDやUSBメモリもそういう扱いです。
余談ですが、zipやCDイメージ(ISO)等のアーカイブでも同じような扱いができます。

UbuntuのHDD管理 その1 - HDDの管理方法 - kledgeb

⇧  上記サイト様で仰られておるように、『マウント』が必要な理由は、ファイルシステムの違いに由るようです。

なので、自分の場合は、「/dev/sr1」をマウントしてやれば、「VBoxGuestAdditions.iso」がマウント先(ここでは「/mnt」を指定)で認識される?みたいです。あとは、「/mnt」に配置されたスクリプトファイルを実行した後、再起動します。

f:id:ts0818:20200125155504p:plain

XFree86 Window System 見つからないって言ってるけど、Server版でもこのへんのライブラリって必要なのかね?

というのも、

The XFree86 Project, Inc is a global volunteer organization which produces XFree86®, the freely redistributable open-source implementation of the X Window System continuously since 1992.

XFree86® Home to the X Window System

⇧ ってあるように、「X Window System」の仕様を実装してるオープンソースってことなんで、

X Window Systemエックスウィンドウシステム、別称:「X11」・「X」など→名称については後述)とは、ビットマップディスプレイ上でウィンドウシステムを提供する表示プロトコルである。

リファレンス実装として X.Org Server があり、標準ツールキットとプロトコルを提供し、Unix系オペレーティングシステム (OS) やOpenVMSなどでのグラフィカルユーザインタフェース (GUI) を構築するのに使われる。他の多くの汎用OSにも移植されている。

X Window System - Wikipedia

GUI を構築ってあるから、今回、Ubuntu 18.04 LTS Server でGUI環境は無いし、CUIしか使ってない気がするから、不要なんじゃないかな?って思って、

What XFree86 does, is provide a client/server interface between the display hardware (those physical things like the mouse, keyboard, and video displays) and the desktop environment, (this is typically called a window manager as it deals with how X is displayed i.e. the overall appearance). Yet X it goes beyond that and also gives the infrastructure and a standardized application interface (API).

X Window System - Wikipedia

All of this which makes XFree86 platform-independent, network-transparent and fully extensible. In short, XFree86 is the premier open source X11-based desktop infrastructure. Our group's goals and overall purpose are Detailed in goals and purpose detailed in our Mission Statement.

X Window System - Wikipedia

⇧ 『XFree86は最高のオープンソースX11ベースのデスクトップインフラストラクチャです。』って宣ひたまう様子。

いや~、使ってるのサーバ版だからな~、と思ってたら、

blog.hirokiky.org

⇧  上記サイト様によりますと、「Guest Additions」をインストールするにはサーバ版でも「X Window System」の実装が必要なんですと...

と思ったら、

linuxize.com

⇧ オプションを付ければいけるらしい。

一旦、再起動して、改めてトライ。

f:id:ts0818:20200125160648p:plain

そしたらば、再起動で。

f:id:ts0818:20200125160851p:plain

再起動後、モジュール(「Guest Additions」)が読み込まれているか確認。

f:id:ts0818:20200125161103p:plain

⇧  読み込まれてるらしい。

再起動後、仮想マシンIPアドレスが確認...

f:id:ts0818:20200125162445p:plain

⇧  できないやんけ~!

「Guest Additions」インストールした意味ねぇ~。(まぁ、「コントローラー:SATA」に「ストレージ」が追加されてることは確認できましたけど。)

なんか、「デスクトップ版」「サーバ版」で「Ubuntu 18.04 LTS」の扱いがだいぶ変わるんですかね?

そもそも、「Ubuntu」って「サーバ」向けじゃないのかしら?

 

2020年1月28日(火)追記:↓ ここから

「GuestAdditions」が何で機能しないんだろうって思ったら、

f:id:ts0818:20200128214822p:plain

なんか、サービスが落ちてた...oh,my gosh...

f:id:ts0818:20200128214722p:plain

 

● vboxadd-service.service
   Loaded: loaded (/opt/VBoxGuestAdditions-5.1.30/init   Active: failed (Result: exit-code) since Tue 2020-0  Process: 1351 ExecStart=/opt/VBoxGuestAdditions-5.1.
Jan 28 21:37:53 keras systemd[1]: Starting vboxadd-serJan 28 21:37:53 keras vboxadd-service[1351]: vboxadd-sJan 28 21:37:53 keras vboxadd-service.sh[1369]: StartiJan 28 21:37:53 keras vboxadd-service.sh[1387]: VirtuaJan 28 21:37:53 keras systemd[1]: vboxadd-service.servJan 28 21:37:53 keras systemd[1]: vboxadd-service.servJan 28 21:37:53 keras systemd[1]: Failed to start vbox   

⇧ なんか、vboxadd-service.serviceってのは、failed ってなっとるね...

 

f:id:ts0818:20200128215427p:plain

● vboxadd.service
   Loaded: loaded (/opt/VBoxGuestAdditions-5.1.30/init   Active: active (exited) since Tue 2020-01-28 21:37:  Process: 1054 ExecStart=/opt/VBoxGuestAdditions-5.1. Main PID: 1054 (code=exited, status=0/SUCCESS)       

Jan 28 21:37:52 keras systemd[1]: Starting vboxadd.serJan 28 21:37:53 keras vboxadd[1054]: vboxadd.sh: StartJan 28 21:37:53 keras vboxadd.sh[1241]: Starting the VJan 28 21:37:53 keras vboxadd-x11.sh[1316]: InstallingJan 28 21:37:53 keras vboxadd-x11.sh[1328]:  modules iJan 28 21:37:53 keras vboxadd-x11.sh[1329]: InstallingJan 28 21:37:53 keras vboxadd-x11.sh[1337]: Window sysJan 28 21:37:53 keras vboxadd.sh[1350]: .
Jan 28 21:37:53 keras systemd[1]: Started vboxadd.serv

⇧ vboxadd.service ってほうは動いてるように見えるけど...

っていうか、

  • vboxadd-service.service
  • vboxadd.service

⇧ 2つのサービスの違いがまず分からん...

VirtualBox のバージョンが、 5.1.30 r118389(Qt5.6.2)で、/opt/VBoxGuestAdditions-5.1.30 だから、バージョンの違いってことはないとは思うんだけど...

調査するしかなさそうね...時間かかりそうね(涙) 

2020年1月28日(火)追記:↑ ここまで

2020年1月29日(水)追記:↓ ここから

GuestAdditions のバージョンは、5.1.30r118389 で、

f:id:ts0818:20200129223920p:plain

VirtualBox のバージョンも、5.1.30r118389 だから

f:id:ts0818:20200129224143p:plain

バージョン違いってことは無くなったかと...う~ん、何だろう?

サービスが落ちてるのは分かったんだけど、原因が...分からん...

f:id:ts0818:20200129232136p:plain

2020年1月29日(水)追記:↑ ここまで

  

とりあえずは、仮想マシンSSHするために必要な仮想マシンIPアドレスについては、仮想マシンに直接ログインして確認するしかなさそうですかね...

仮想マシンにログインするために必要な情報が、仮想マシンにログインしないと分からないって、本末転倒な感が満載な気がするけども...

 

Ubuntu使いやすさを重要視している。

Ubuntu - Wikipedia

⇧ どのへんのことを仰られておるのか...

どっと疲れが...

今回はこのへんで。

 

2020年1月25日(土)追記:↓ ここから

VBoxmanage.exe の信頼性がいまいち無いんだけど、VBoxmanage.exe を使わない、つまりVirtualBox のコマンドとは関係ないコマンドで仮想マシンIPアドレスを確認する方法があるそうです。

ただ、IPアドレスがどのクラスに属しているかとかでもだいぶ処理時間とか変わってきそうな気がしますが、いまのところ、これぐらいしか解決手段が思いつかんですね。

IPアドレスのクラスについては、

ja.wikipedia.org

Wikipediaさんの「アドレスクラス」をご参照ください。

 

ちなみに、ここからは仮想マシンIPアドレスが「192.168.99.101」で割り振られた状態の時の話になります。(初回の仮想マシン起動時のIPアドレスは「192.168.99.100」だったため、「192.168.99.100」で繋がらん、何でや!?っていう状況でした。)

 

orebibou.com

one-it-thing.com

⇧  上記サイト様を参考に、ARPキャッシュにホスト(IPアドレス)を記憶させる。

for($i=0; $i -lt 255; $i++){ping -w 3 -n 1 [自分のIPの末尾の8bit以外].$i; arp -a 192.168.0.$i}

 

IPアドレスを確認。

f:id:ts0818:20200122230808j:plain

よく分からんけど、「192.168.99.101」が仮想マシンIPアドレスとして、仮想マシンDHCPで割り振られてるってことらしい。

だから、VBoxmanage list dhserver で表示されるIPアドレスは全くあてにならんってことですかね。

 

2020年1月25日(土)追記:↑ ここまで

2020年1月26日(日)追記:↓ ここから

また、ネットワークの問題が発生。エラーメッセージは、「connect: Network is unreachable」ってね...いやいやいや、だから原因が知りたいんだってば!

「ネットワークが届いていない」って、ping した結果が返ってきてないんだから、そこについては言われんでも「ネットワーク」に問題があるのは分かるのよ、何が原因かを知りたいのにね...もうちょっとエラーメッセージの設計を頑張って欲しい気がするけど...OSSにそこまで求めるのは酷ですかね?

 

VirtualBox のネットワークについては、

iwsttty.hatenablog.com

⇧ 上記サイト様の図が分かりやすいです。

 

時代の流れなのか、

slacknotebook.com

上記のログで2つのネットワークインターフェイスが表示されていることがわかるだろう。
1番目の lo はただのローカルループバック
2番目のインターフェイスが eth0 ではなく、 なぜ enp6s0 という奇妙なインターフェイス名が割り当てられているのかというと systemd/udev によってデバイスに割り当てられた 「Predictable Network Interface」 (予測可能なネットワークインターフェイス)だからだ。
これは旧来のカーネルインターフェイスを発見した順番に名前を eth0 、 eth1 、wlan0 、wlan1 というように割り振るのがセキュリティ上危険だと判明したためだ。
例えばカーネルのブート前などに複数のデバイスをつないでしまえば、インターフェイス名が以前と変わってしまう場合があり、その回線向けに設定したファイヤーウォールなどが無意味になってしまう。
これを解決するため、 systemd ではハードウェアの物理的な位置をもとに割り振るようになった。 en は ethernetイーサネット)。 p は イーサネットカードのバス番号。 s はスロット番号。

Linux:ネットワーク設定の確認を行う、ipコマンドを読み解く | SlackNote

⇧  上記サイト様によりますと、「ネットワークインターフェース」の名前が変わっているようです。

 

code.g-nab.net

⇧ 上記サイト様を参考に、「ネットワークインターフェース」の状態を確認してみた。私の環境では、

f:id:ts0818:20200126154211p:plain

⇧  「eth0 → enp0s3」「eth1 → enp0s8」という状況らしい。

現状、仮想マシンの「ネットワークインターフェース」は、

f:id:ts0818:20200126162529p:plain

⇧  「NAT ネットワーク」「ホストオンリーアダプター」の2つなので、

インターフェース名
現在 旧称 タイプ 名前
enp0s3 eth0 NAT ネットワーク NatNetwork
enp0s8 eth1 ホストオンリーアダプター VirtualBox Host-Only Ethernet Adapter #2

⇧  ってな構成になってると思うんだけど、 気になったのは、「enp0s3」が「state Down」ってなってるっていうね。

これが、「NAT ネットワーク」が機能してないって意味だとすると、外部に繋がらんという原因になると思うんだけど、確証が持てんです。(疎通できてた時の状態が確認できとらんのよね)

 

usado.jp

⇧  上記サイト様を参考に「インターフェースの通信状態」を確認してみる。

f:id:ts0818:20200126165327p:plain

⇧  う~ん、「ホストオンリーアダプター」のほうしか機能してないのが気になるんよね。「NAT」「NATネットワーク」のどっちかが有効になってないと、ホストOS側のインターネットが使えない気がするしと思ったけど、Ubuntu をインストールする段階で「enp0s3」は普通に「disable」とかなってたから元から機能してないのかな、だとするとどうやってインターネットに接続できてたん?っていう謎が(一時的に、仮想マシンから、ping 8.8.8.8 にアクセスできたので)

 

qiita.com

⇧  上記サイト様でも、仮想マシンから「インターネット」に接続するには「NAT」「NAT ネットワーク」のどっちかが有効になってる必要があるような説明ですから。

 

VirtualBox のドキュメントの説明でも

⇧ 「VM→Net/LAN」ができるのは、「Bridged」「NAT」「NATservice」ってありますしね。(「Bridged」はセキュリティの観点から好ましくないらしい。「NATservice」は「NAT ネットワーク」のことかと。)

 

qiita.com

⇧  「仮想ブリッジ」が有効になってた可能性も気にはなりますけど、そもそも、Ubuntu 18.04.3 LTS Server版に「brctl」コマンドがインストールされてないという...

 

あと、気になったのは、 

kledgeb.blogspot.com

「Netplan」はネットワークの設定を抽象化する仕組みであり、実際にネットワークインターフェースを操作するのは、バックエンドの役割です。
現状「Netplan」では、以下の2種類のバックエンドをサポートしています。

  • NetworkManager
  • systemd-networkd

バックエンドの指定を行わなかった場合、デフォルトでは「systemd-networkd」が使用されます。
しかし「systemd-networkd」は無線LANをサポートしていないため、現状無線LANをサポートするため「NetworkManager」に頼る必要があります。

Ubuntu 17.10 その29 - Netplanの紹介とNetplanの基本 - kledgeb

⇧  上記サイト様によりますと、

『「systemd-networkd」は無線LANサポートしていないため、現状無線LANをサポートするため「NetworkManager」に頼る必要があります。』って件ですかね。

ただ、ホストOS側のネットワークは、無線でインターネットと繋いでるけども、「guestAdditions」をインストールする時は普通に接続できたから、関係ないと思うんよねと思ったけど、

q.hatena.ne.jp

⇧  パッケージ管理ツールの「apt-get」とかは、インターネット経由で無くてもイケるとか...じゃあ、関係ないか...

 

blog.dshimizu.jp

⇧  上記サイト様を参考に、「systemd-networkd」が有効になってるのか確認。

f:id:ts0818:20200126144812p:plain

⇧「systemd-networkd」が有効みたいです。

そもそも、「nmcli(Network Manager command-line)」がインストールされてないところを見ると、「Ubuntu 18.04.3 LTS(Server版)」では、「NetworkManager」の使用を想定してないってことですかね?

ちなみに、これまで使用されてたらしい(Ubuntu 17.10 以前?)「/etc/network/interfaces」ってファイルの中身を見てみたんですが、

f:id:ts0818:20200126151850p:plain

⇧  使わないって感じになるんですかね?

ホストOS側では、ping 8.8.8.8 で普通に疎通できるんで、VirtualBox 、ゲストOS側の問題だとは思うんですが...

f:id:ts0818:20200126160815p:plain

f:id:ts0818:20200126160935p:plain

⇧  仮想マシン内から、外部(ホストOS側を経由したインターネットへのアクセス)へ繋がらん...
う~ん、分からん...

とりあえず、

linux.just4fun.biz

⇧  上記サイト様を参考にさせていただき、「NAT ネットワーク」の「ネットワークインターフェース」が有効になるか設定してみることに。

スーパーユーザー(「root」ユーザ)担ってる状態で、「/etc/netplan/50-cloud-init.yaml」を編集

vi /etc/netplan/50-cloud-init.yaml

f:id:ts0818:20200126181047p:plain

⇧  上図のキャプチャー画像のように、「NAT ネットワーク」を設定してる「ネットワークインターフェース」 である「enp0s3」の設定を追加し、保存。

そうしたらば、設定を反映させます。

netplan apply    

f:id:ts0818:20200126181221p:plain

⇧  「enp0s3」のネットワークが有効になったようです。

ping も疎通できました!

f:id:ts0818:20200126182315p:plain

Ubuntu をインストールした時は、「enp0s3」は「disable」になってたはずなので、どっかのタイミングで、「NAT」「NAT ネットワーク」が有効になって、すぐにまた無効になったということですかね...

モヤモヤは残りましたが、これで、機械学習用のPythonのライブラリとかインストールできそうですかね。
 

2020年1月26日(日)追記:↑ここまで