ことはじめ

Linux + コマンド入門って本を買いました。 今更入門!?って感じですが、やっぱりどんな本も学ぶべきものはあります。この本では、「いきなりLinuxの物理コンピュータを準備するのは初心者には難しいから、最初はVMでLinuxをいじってみよう!」って書いてあるんですね。で、vmは大学2年の時に触ったのですが、ちゃんと理解したことがなかったので、これを機にまとめてみようって感じですね。

前提知識

OSが起動されるまでの流れを改めておさらいしておきたいと思います。コンピュータが付きます。ROMに保存されているBIOSが起動されます。UEFIとも言いますね。BIOSがブートローダを起動します。GRUBっていうやつです。こいつは、カーネルをメインメモリにロードする役割を担います。ブートローダがカーネルをメインメモリにロードします。カーネルは、systemdを起動して、systemdがそれぞれのプロセスを順番に起動していきます。

さらに、仮想マシンが何かについて、改めておさらいしておきたいですね 仮想マシンですね。ハードウェアで実行される命令セットレベルでマシンの動きを再現しているので、Dockerとかのコンテナ仮想化に比べてかなり動きが遅いですね。

virtualboxのインストール方法

公式ホームページに富んで、インストーラからインストールしてください。

osのインストール方法

まずは物理サーバにインストールするときと同じように、ホストOSのストレージにインストールをしないといけません。 ちなみに、ホストOS (windows) 上で、ゲストosがインストールされるのは、C:/Users/hoge/VirtualBox Vmsってところです。ここに各vmごとにディレクトリが作られる感じです。

で、インストールの仕方ですが、まずはISOファイルってのを、各ディストリビューションプロバイダー?からダウンロードします。これがOSの元です。 余談ですが、「ISOイメージは、国際標準化機構 の定義した形式の光ディスク用アーカイブファイル」。ってかんじで、別にOSのために作られた専用のファイル形式とかではないって感じですね。わかりました。

で、virtualBox開いて、割り当てる資源量とかを設定して、起動するって感じですね。自動インストール設定がONになっていると、自動でインストールしようとしますが、大体失敗します。ですが、ここであきらめずにどのISOをマウントするか聞かれるので、マウントするISOを選択して再起動するとうまくマウントされます。

ネットワーク周りの設定

仮想化ソフトウェア (virtualBox) は、vm用に新しいネットワークを作ります。10.x.x.xとかだった気がしますが。 で、このネットワークのデフォルトゲートウェイが仮想化ソフトウェアってことです。ルータでもありますね。外界とインタラクションするには、NATをする必要があるってことです。 設定で変更が可能です。しかし、NATの設定は、基本的に内部ネットワークから外部への通信を可能にするだけで、外部から内部への通信はできませんよね。 それを可能にするためには、ネットワーク設定を「ブリッジモード」にする必要があります。これにすると、ipアドレスが割り振られますね。そのipアドレスにホストosからsshすると、ちゃんとつながるんですね。こりゃすごいことです。まあ、当たり前っちゃ当たり前なのかもしれませんが。僕は結構すごいと思っちゃいます。

ただね、ブリッジモードにした時の疑問なんですが、なんか知らんけど、ゲストOSと同じネットワークのIPをもらっちゃってるんですね。これ、どういうこっちゃと。

また、NATだけでは、vm同士の通信はできません。 vm同士を通信させたいときは、NATネットワークモードで動かしましょう。

centos上で、特定のuserにsudo権限を与える方法

centosではデフォルトでroot以外のユーザのsudo権限が与えられていません。いかにsudo権限の与え方を載せておきます。 rootでログインして、visudoをしてください。以下の方ナ行があると思うんで、

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL

この下に、username ALL=(ALL) ALL を追記しましょう。

疑問

仮想マシンは命令セットレベルでコンピュータの動きを再現しているってのは理解しました。だから、ISOファイルをインストールするときは、armなのか、x86-64なのかを選んでインストールしないとだめなんですよね。ただですね、わからないのが、vmがいつどの段階で命令セットを理解しているのかって話。どの段階で命令セットアーキテクチャを理解するのだ?わからない。 x86_64上で動かしているから、x86_64じゃないと動かないのか、もしかして!そんな気がしてきた