Ubuntu 24.04のVirtualBoxへのインストール

Ubuntu 24.04のVirtualBoxへのインストール手順のメモ

Ubuntu 24.04のVirtualBoxへのインストール手順をまとめてみた。
今回は 極力コマンドコピペで実行できるように書いてみた。

マスタイメージのインストール

Ubuntu 24.04 インストール媒体の入手

24.04は日本語Remixがリリースされないので(ニュース)、 本家 からダウンロードする必要がありますが、海外にあるサーバなのでとっても遅いです。
国内のミラーサーバの一覧がここ にあるので、お好きなところからダウンロードしてください。
(私がダウンロードしたときはKDDI研究所が速かった)

インストール

VirtualBox でインストールするときは、CPU数2個以上、メインメモリーを4096MB以上に設定しておくこと

[!NOTE] 推奨環境が2 GHzデュアルコアプロセッサ以上、4GBシステムメモリなので。

普通にインストール媒体からインストール。
以下の説明が図付きで分かりやすい:
Ubuntu 24.04 LTSのインストール

[!TIP] Ubuntu 24.04 LTSのインストールでは、「仮想マシンの作成」の「ハードウェア」で「EFIを有効化・・・チェックを入れます。」となっているが、 入れなくて可(入れて試してないので入れて動くのか未確認。図でもチェック入ってないし)。

[!TIP] インストーラにアップデートがある場合は「今すぐアップデート」をクリックしてアップデートし、 完了したら一旦インストーラを閉じる。
デスクトップにインストーラアイコンが出来ているので、そこから再度インストーラを起動し、 最初から設定を行う(これまでの入力は覚えているっぽい)
参照:Ubuntu24.04 LTSの新インストーラを徹底解説 の「インストーラにアップデートがあった場合」

[!TIP] Ubuntu 24.04 LTSのインストールでは、「アプリケーション」での「拡張選択」を選択とあるが、 余計なアプリを入れたくないので「既定の選択」のままにしておく。

[!TIP] 「Ubuntuの改善を支援する」のところは気になるなら「送信しません」に変更。

その後の設定手順

[!NOTE] 設定アプリ等のGUIで設定を変更した内容をスクリプト化したいとき、どのパスを変更すれば良いか調べるには、ターミナルで

dconf watch /

と実行しておくと、変更される度にパスと設定値が表示される。
これを dconf write で書き込めばGUIで設定した内容をコマンドラインで再現できる。
参考:デスクトップで変えた設定をCUIでやりたい!(gnome限定)
その関係で前回までgsettingsコマンドでの設定手順を載せていたが、今回はdconfコマンドに変更した。

インストール中にロックされるとうざいので、先に設定しておく

まだGuestAdditionをインストールしてないからコピペできないけど、BashのTab補完が効くので、 ちょろっと入力してあとは補完に頼れば大丈夫。

# ブランクスクリーン しない
gsettings set org.gnome.desktop.session idle-delay 0
# 自動画面ロック OFF
gsettings set org.gnome.desktop.screensaver lock-enabled false

[!TIP] dconfだと変更済みのパスしか補完対象にならないらしく入力が面倒なので、 ここは補完が効くgsettingsコマンドで。
ちなみに、dconfだとこんな感じ。

# ブランクスクリーン しない
dconf write /org/gnome/desktop/session/idle-delay 0

# 自動画面ロック OFF
dconf write /org/gnome/desktop/screensaver/lock-enabled false

GUIで設定する場合は以下の手順で。

[!TIP] ==== 画面ロックの抑制 ==============================================
設定 → Privacy & Security → Screen Lock → 自動画面ロックを off に

==== スクリーンセーバ(ブランクスクリーン)の抑制=====================
設定 → Privacy & Security → Screen Lock → Blank Screen Delay を「しない」に

最新版にアップデート

裏でソフトウェアの更新が動いていると、ロックファイルがロックされてしばらく適用できないので、
そうなっちゃったらお茶でも飲んでしばらくお待ちください。
ソフトウェアの更新による自動更新を止める方法は後ほど。

お約束。

sudo apt -U upgrade

[!TIP] upgradeinstall 時にオプション -U (--update)をつけると updateも一緒に実行してくれるので命令ひとつで済む。
(ubuntu 24.04に搭載された2.7.14以降)

gccとかmakeとかをインストールする

これが入ってないとGuestAdditionのインストールで失敗する

sudo apt install build-essential

色々使うのでインストール

なにかと使うのでインストール

sudo apt install net-tools dconf-editor gnome-tweaks 

一旦リブート

念のため一旦リブートしておく。

GuestAdditionのインストール

以前にマウントしたものが残ってたらアンマウントしておくこと(インストール後初めてなのでマウントされてることはないけれど)。
VirtualBox のメニューの「デバイス」→「Guest Additions CDイメージの挿入…」を選択
以下、ごにょごにょ。

[!TIPS] プログラムが自動で始まらない場合は、CDROMのマウント先(たぶん、/media/${USER}/VBox_GAs_x.x.xx/)に移動してsudo ./VBoxLinuxAdditions.runを実行すれば良い。

再度リブート

GuestAdditionによる更新適用のため、もう一度リブート。
(再ログインだけでもよさそうな感じではあるが、念のため)

ここでVirtualboxの拡張機能が使えるようになっているので、
Virtualboxのメニューから
「デバイス」→「クリップボードの共有」→「双方向」 を選択。
これでホストとゲストでクリップボードが共有できる。

また、デスクトップサイズの変更(仮想マシンのウィンドウのサイズ変更)にも対応できる。

使わないアプリのアンインストール

「アプリケーション」で「既定の選択」を選んでいれば要らないアプリは入っていないハズ。

お好みで

bashのクリップボードの挙動が以前と異なるようになったので対策

bashでクリップボードからペーストするとペーストした文字が反転表示になったり、改行がその場で入力されなかったりするようになった。
こればbash 5.1からブラケットペーストモード というのがデフォルトで有効になったためらしい。
以前の動作が良い場合は/etc/inputrcに設定を追加するため、以下を実行する。

sudo tee -a /etc/inputrc << '__EOF__'

# disable bracked-paste mode
set enable-bracketed-paste off
__EOF__

起動済みのbashには効かないが、設定以降に起動したbashでは有効になる(システムの再起動は不要)。

[!NOTE] teraterm使ってるときはteratermが確認ダイアログ出すので邪魔なんだけど、
gnome-terminalだと誤ペースト防止にそのままが良いかも。

参考: シェル - bash - ブラケットペーストモード(Bracketed Paste Mode)

bashの設定変更

以下のコマンドで~/.bashrcに設定を追加。
もちろんお好みで。
「# for pyenv」以降はそれぞれのツールをインストールしたとき用なので、インストールしないならなくて可。

tee -a ~/.bashrc << '__EOF__'

# プロンプトの設定
PS1="\w\$ "

# キーバインドの設定
bind '"\C-n": history-search-forward'
bind '"\C-p": history-search-backward'

# ディレクトリスタックの表示改善
function pushd() {
    command pushd $* > /dev/null
    command dirs -v
}
function popd() {
    command popd $* > /dev/null
    command dirs -v
}
function dirs() {
    command dirs -v
}

# 表示色変更
export LS_COLORS='di=01;32:ln=01;36:ex=01;31:'
export GREP_COLORS='mt=01;31:ml=:cx=:fn=01;32:ln=32:bn=32:se=36'

# lessのオプション
export LESS="-iMR"

# grepのオプション指定(GREP_OPTIONS)は廃止されたのでaliasで設定
# export GREP_OPTIONS="--exclude-dir .git"
alias grep='grep --exclude-dir .git'

# for pyenv
export PYENV_ROOT=/proj/.pyenv    #環境に合わせて修正してね
if [ -e $PYENV_ROOT ]; then
    export PATH=$PYENV_ROOT/bin:$PATH
    # 仮想環境名をプロンプトに表示しない場合は以下を有効化
    # export VIRTUAL_ENV_DISABLE_PROMPT=1
    eval "$(pyenv init --path)"          # pyenv 2.0以降で必要
    eval "$(pyenv init -)"
    eval "$(pyenv virtualenv-init -)"
    export PYTHON_CONFIGURE_OPTS="\
     --enable-shared\
    "
fi

# for nodenv
export NODENV_ROOT=/proj/.nodenv    # 環境に合わせて修正してね
if [ -e $NODENV_ROOT ]; then
    export PATH=$NODENV_ROOT/bin:$PATH
    eval "$(nodenv init -)"
fi

# x11からのログイン以外ならDISPLAYを設定する
# Ubuntu22.04/24.04だとwaylandになるらしい
if [ "$XDG_SESSION_TYPE" != "x11" ] && [ "$XDG_SESSION_TYPE" != "wayland" ]; then
    export DISPLAY=192.168.78.200:0.0
fi
echo DISPLAY="$DISPLAY"

# direnv 設定
if type direnv > /dev/null 2>&1; then
    export EDITOR=vi
    eval "$(direnv hook bash)"
    
    # # venvの仮想環境名を表示するための設定
    # show_virtual_env() {
    #   if [ -n "$VIRTUAL_ENV" ]; then
    #     echo "($(basename $VIRTUAL_ENV))"
    #   fi
    # }
    # PS1='$(show_virtual_env)'$PS1
fi

# __pycache__ディレクトリの生成を抑制する
export PYTHONDONTWRITEBYTECODE=1
__EOF__

[!TIP] ヒアドキュメント内での変数展開やコマンド置換を抑止するには、 ヒアドキュメント開始文字列(上記では__EOF__)をシングルクォートで囲む。
参考:bashのヒアドキュメントを活用する/変数展開・コマンド置換

[!NOTE] python でimportする度に__pycache__ディレクトリ*.pycファイルが作成されるのが 鬱陶しかったので、PYTHONDONTWRITEBYTECODEに1を設定している。
2回目以降、若干実行時間が延びるかもしれないが、気にするほどでもないので。
通常の動作がよければ削除してください。

Ubuntu Japanese Teamのパッケージリポジトリを追加

日本語特有のパッケージをインストールするため、Ubuntu Japanese Teamのパッケージリポジトリを追加します。
参考:Ubuntu 24.04 LTSの日本語Remixについて の最後の部分

sudo wget https://www.ubuntulinux.jp/sources.list.d/noble.sources -O /etc/apt/sources.list.d/ubuntu-ja.sources &&\
sudo apt -U upgrade &&\
sudo apt install ubuntu-defaults-ja

フォントのインストール

最近はUDEVゴシック がお気に入りなのでインストールしておく。
もちろん、他のフォントでもいいよ。
ブラウザでダウンロードしてもいいけど、あちこちファイルコピーしたり削除したりが面倒なので、 一時ファイルは/tmpに突っ込んでリブート時にまとめて消してもらおう。

フォントのインストールと言っても、ttfファイルを入手して/usr/share/fontsの下(自分専用なら~/.fonts/の下)にコピるだけ。
下では全部コピってる(移動だけど)けど、もちろん使いたいものだけでもOK。

pushd /tmp/ && \
wget https://github.com/yuru7/udev-gothic/releases/download/v1.3.1/UDEVGothic_v1.3.1.zip && \
unzip UDEVGothic_v1.3.1.zip && \
sudo mv UDEVGothic_v1.3.1 /usr/share/fonts/truetype/ && \
popd

gnome-terminalのフォントの変更

で、入手したフォントを端末のフォントに設定しておこう。

端末を起動し、右上の「≡」→「設定」を選択 使用中のプロファイル(最初のは「名前なし」)を選択し、
「フォントを指定」にチェックを入れ、その右側でフォントを選ぶ
さっきインストールした「UDEV Gothic JPDOC」を選んでサイズを指定。
ついでに起動時の端末サイズも修正しておくとよい
終わったら×で終了。

設定を反映するため、開いている端末をすべて閉じで、再度起動します。
開いたままだと設定が中途半端に反映されてしまいます。
また、一つでも端末が残っていると新しく開いた端末にも正常な反映がされません。

[!NOTE] CLIで設定するならこちら….なんだけど、UUIDが同じとは限らないので参考まで。

dconf write /org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9/use-system-font    false
dconf write /org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9/font               "'UDEV Gothic JPDOC 12'"
dconf write /org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9/default-size-rows  40

すべてのプロファイルに適用するならこんな感じでもできるかな。

for prof in $(dconf list /org/gnome/terminal/legacy/profiles:/) ; do
    dconf write /org/gnome/terminal/legacy/profiles:/${prof}use-system-font    false                       && \
    dconf write /org/gnome/terminal/legacy/profiles:/${prof}font               "'UDEV Gothic JPDOC 12'"    && \
    dconf write /org/gnome/terminal/legacy/profiles:/${prof}default-size-rows  40
done

作業用ディレクトリの作成

もちろん、使うものだけでOK。

sudo mkdir /proj /work /NFSROOT && \
sudo chown $USER:$USER /proj /work /NFSROOT

grub-pcのインストール先情報の変更

クローンしたディスクでGUIからgrubのupdateが行われるとハングアップするので変更しておく
(CLIでも「どこにインストールする?」と聞かれて「どこだっけ?」となるのでその予防)

sudo sh -c 'echo "set grub-pc/install_devices /dev/sda" | debconf-communicate'

設定が正常に行われたか確認するには以下。

sudo sh -c 'echo "get grub-pc/install_devices" | debconf-communicate'

正常に設定されていれば、以下のような結果が出力される。

0 /dev/sda

デフォルトshellをbashに変更

デフォルトのshがdashなのはなんとなくイヤなので。

pushd /bin && \
sudo ln -sf bash sh && \
popd

ウィンドウが勝手に最大化するのをやめる

以下のコマンドで無効化できる

gnome-extensions disable tiling-assistant@ubuntu.com && \
dconf write /org/gnome/mutter/edge-tiling false

ウィンドウにマウスを乗せるとフォーカスされるようにする

以下のコマンドで設定できる

dconf write /org/gnome/desktop/wm/preferences/focus-mode        "'sloppy'" && \
dconf write /org/gnome/desktop/wm/preferences/auto-raise        false      && \
dconf write /org/gnome/desktop/wm/preferences/raise-on-click    true

[!NOTE] focus-mode の設定値 mouse と sloppy の違い
mouse は マウスカーソルをウィンドウからデスクトップに移すとフォーカスがはずれる。
sloppy は マウスカーソルをウィンドウからデスクトップに移してもフォーカスされたまま。
と書いてあったけど、同じ動き(フォーカスがはずれる)に見える….

デスクトップからゴミ箱とホームを消す

以下のコマンドで設定できる
ゴミ箱は最初から表示されてないけど…ま、ついでに書いとく。
表示したければ、設定値をtrueにすれば良い。

dconf write /org/gnome/shell/extensions/ding/show-home  false && \
dconf write /org/gnome/shell/extensions/ding/show-trash false 

マウスカーソルを大きくする

マウスカーソル小さくて見失う人は大きくしましょう。
最後の数字がカーソルの大きさなので、お好みのサイズで。

dconf write /org/gnome/desktop/interface/cursor-size 48

[!TIP] GUIで設定する場合は「設定」→「アクセシビリティ」→「Seeing」→「Cursor Size」で選択
(数値ではなく画像で選択)

ファイル(nautilus)の設定変更

ファイル(nautilus)の設定をお好みに合わせて。
ファイル(nautilus)はすべて終了しておいた方が無難。

ロケーションバーをデフォルトにする

dconf write /org/gnome/nautilus/preferences/always-use-location-entry true

詳細表示をデフォルトに

dconf write /org/gnome/nautilus/preferences/default-folder-viewer "'list-view'" 

隠しファイルを表示する

隠しファイルの表示はちょっと場所が違う

dconf write /org/gtk/gtk4/settings/file-chooser/show-hidden true

Dockのカスタマイズ

なんとなく使いにくいので好みのデザインに変更。

ゴミ箱削除

私はゴミ箱使わないので消しときます。

dconf write /org/gnome/shell/extensions/dash-to-dock/show-trash false

Dockバーを画面下に表示

Windows7っぽく下に移動

dconf write /org/gnome/shell/extensions/dash-to-dock/dock-position "'BOTTOM'"

アプリケーションをDockバーの上(または左)に表示

Windows7のスタートボタンっぽく左に移動

dconf write /org/gnome/shell/extensions/dash-to-dock/show-apps-at-top true

アイコンサイズの変更

最後の数字が大きさなので、お好みの大きさにしてください。

dconf write /org/gnome/shell/extensions/dash-to-dock/dash-max-icon-size 20

ソフトウェアの自動更新の無効化

自分のタイミングでソフトのアップデートができないのがストレスなので、以下で自動確認を停止。
もちろん、適時手動でアップデートするのを忘れずに

CTRLキーとCAPSキーを入れ替える

Virtualbox環境ではWindowsで設定したのが有効になっているので必要ないが、Native Installの場合は以下のページを参考に入れ替えを設定する。
【Ubuntu 20.04/18.04 LTS】CapsLockとControlキーを入れ替える

tewaksを使用する
Ubuntu Bdgieメモ: TweeksでCapsとCtrlのSwap
というのもある。 お好きな方で。

Native環境にインストールしてないので未確認だけど…

IPv6を無効化する

IPv6動いていて何度かハマったので無効化しておく。
sysctrlで無効化する方法もあるけど、ちょっと手順が面倒なので、起動オプションで無効化してしまおう。

参考:Ubuntu 20.04 LTS Focal FossaでIPv6アドレスを無効にする方法

/etc/default/grubの以下の部分(10行目あたり)にipv6.disable=1を追加

元から設定されている”quiet splash”を削除すれば起動時のスプラッシュスクリーンが表示されず、ブートシーケンスのログが表示されるようになるので、お好みで。

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"GRUB_CMDLINE_LINUX_DEFAULT="quiet splash ipv6.disable=1"
# または、ブートシーケンスのログを表示したい場合は以下のように「quiet splash」を削除。
# GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1"

これだけだとまだ設定有効にならない。
以下のコマンドでgrubメニューの更新を行う。

sudo update-grub

リブートする

リブート後、ip addressとかifconfigでIPv6のアドレスが割り当てられていないことを確認。

ネットワークアダプタの追加

ホストのWindowsや外部マシンからアクセスできるようにデフォルトのNAT以外にネットワークアダプタを追加します。
仮想マシンの設定を変更する必要があるので、一旦仮想マシンをシャットダウンしてください。

ネットワークアダプタ追加設定

設定が終わったら仮想マシンを起動します。

[!NOTE] NATも削除してブリッジアダプターだけでも大丈夫な気もするが、ネットワーク不調になっても ホストOS(Windows)からアクセスできるようにホストオンリーアダプターも追加しておく。
また、ホストオンリーアダプターも不調になったときでも Webアクセスなど最低限のアクセスができるようNATも残しておく。
要らないと思ったら上記の設定の「ネットワークアダプタを有効化」のチェックをはずせば良い。

ネットワークのコネクション名の変更

ネットワークコントローラを追加したので、ネットワークマネージャのコネクション一覧を見てみます。

nmcli connection 

結果はこんな感じ。

NAME            UUID                                  TYPE      DEVICE 
netplan-enp0s3  1eef7e45-3b9d-3043-bee3-fc5925c90273  ethernet  enp0s3 
有線接続 1      eef7ccb4-2a33-336f-bb48-701058d5e6ce  ethernet  enp0s8 
有線接続 2      eff49436-1aac-36eb-b1f6-2a32cc246b83  ethernet  enp0s9 
lo              d30bde24-f5dd-458d-86b0-b5c8870f4485  loopback  lo     

「有線接続 1」と「有線接続 2」がさきほど追加したホストオンリーアダプターとブリッジアダプターなのですが、 どっちがどっちか判別できません。
そこで判別できるような名前に変更しておきます。
(192.168.xx.xxのものだけ変更。NATとloはそのまま)
変更後のコネクション名はネットワークとの対応が分かりやすくなるよう、 ≪IPアドレスの3桁目≫_LINE としています。
お好みの名前に変更してください。
(現在、日本語だと文字化けするバグがあるようです。そのうち直ると思いますが)

手動で設定するのは面倒なので、以下のスクリプトファイルを作成して実行してください。

# すべてのコネクション名を改行区切りで配列に取得
ORG_IFS=$IFS
IFS=$'\n'
connections=($(nmcli  -t -f NAME connection))
IFS=$ORG_IFS        # 元に戻す

for i in ${!connections[@]}; do
    # 各コネクションについて
    # 直接取り出すとうまくいかないのでインデックス取り出して内容取得
    connection="${connections[$i]}"

    # 現在設定されているIPv4アドレスを取得
    str=$(nmcli connection show "${connection}" | grep "IP4.ADDRESS\[1\]" )
    # 結果⇒ 「IP4.ADDRESS[1]: 192.168.78.215/24」
    
    # IPアドスの各桁とサブネットマスクを空白区切りで取得し、配列に代入
    # 1個目のsed ⇒ 192.168.78.215/24
    # 2個目のsed ⇒ 192 168 78 215 24
    ipv4octet=($(echo $str | sed -e "s/.*:[ \t]\+\([0-9\.\/]\+\).*$/\1/g" | sed -e "s/[\.\/]/ /g"))

    # echo ${str}
    # echo ${ipv4octet[0]}  ${ipv4octet[1]}  ${ipv4octet[2]}  ${ipv4octet[3]}  ${ipv4octet[4]}
    
    if [ ${ipv4octet[0]} -eq 192 ] && [ ${ipv4octet[1]} -eq 168 ]; then
        # 192.168.XX.XX のコネクション
        # echo "**** ${str} ****"

        # コネクション名を"≪IPアドレスの3桁目≫_LINE"変更する
        cmd="nmcli connection modify \"${connection}\" connection.id \"${ipv4octet[2]}_LINE\""
        echo $cmd
        eval $cmd
    fi
done

echo ==RESULT==
nmcli  connection

GUIで設定する場合は以下の手順で。

[!TIP] システムの設定を起動(gnome-control-centerを実行)→
左側のネットワークを選択し、対象のNICの設定ボタン(歯車アイコン)をクリック→
開いたウィンドウで「identity」タブをクリック→
「名前」に設定する名前を設定→
「適用」をクリック

sambaのインストール

ツール本体のインストール

sudo apt install samba

/etc/samba/smb.conf の設定を変更

以下のコマンドを実行します。
変更内容は以下

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.org     && \
sudo sed -i '/\[homes\]/s/;//g' /etc/samba/smb.conf     && \
sudo sed -i '/\[homes\]/,/\[/ {s/^;[^\[]//g}' /etc/samba/smb.conf   && \
sudo sed -i "/\[homes\]/,/^\[\|^;\s*\[/ s/read only = .*/read only = no/1" /etc/samba/smb.conf && \
sudo sed -i 's/\(^\[global\].*\)/\1\n\n    map archive = no/' /etc/samba/smb.conf   && \
sudo tee -a /etc/samba/smb.conf << '__EOF__'
[proj]
path = /proj
guest ok = no
writable = yes
map archive = no
share modes = yes
dos filetimes = yes
force group = $USER
force create mode = 0664
force directory mode = 0665

[work]
path = /work
guest ok = no
writable = yes
map archive = no
share modes = yes
dos filetimes = yes
force group = $USER
force create mode = 0664
force directory mode = 0665

[NFSROOT]
path = /NFSROOT
guest ok = no
writable = yes
map archive = no
share modes = yes
dos filetimes = yes
force group = $USER
force create mode = 0664
force directory mode = 0665

__EOF__

ユーザの追加

sambaのためのユーザを追加します。

sudo pdbedit -a $USER

新しいパスワードを聞かれるので入力

[!NOTE] 以前はsudo smbpasswd -a $USER だったけど、最近は上のコマンドが正式らしい。
(まだ smbpasswdも使えるけど)

sambaの再起動

設定を反映するため、sambaを再起動します。

sudo systemctl reload  smbd.service && \
sudo systemctl restart smbd.service

[!NOTE] Warning: The unit file, source configuration file or drop-ins of smbd.service changed on disk. Run 'systemctl daemon-reload' to reload units. と言われたときは、sudo systemctl daemon-reloadを実行

NFSのインストール

別のUbuntuマシンとか、RasberryPiとファイル共有したいときに備えて設定しておく。

インストール

sudo apt install nfs-kernel-server

設定ファイルの変更

/NFSROOTをエクスポートするため、/etc/exportsを修正。

sudo tee -a /etc/exports << '__EOF__'
/NFSROOT 192.168.0.0/255.255.0.0(rw,sync,no_root_squash)
__EOF__

[!NOTE] もちろん、192.168..に割り当てられたNICが有効化されている必要がある。
デフォルトのNATだけじゃダメよ~。
VirtualBoxの設定のネットワークアダプタでホストオンリーアダプタを割り当てておけば、 同一ホストマシン上の他の仮想マシンと通信できる。
VirtualBoxの設定のネットワークアダプタでブリッジアダプタを割り当てておけば RaspberryPi等ホストマシン外のマシンとも通信できる。
ネットワークアダプタは4つまで設定できるので、両方有効化しておくことも可。

再起動

変更した設定を反映するため、NFSを再起動

sudo systemctl restart nfs-server.service 

確認

exportできているか確認
sudo exportfs 

こんな感じで表示されればOK

/NFSROOT      	192.168.0.0/255.255.0.0
別のマシンからマウントしてみる

別のマシンからマウントできるか確認
IPアドレスはip addressとかifconfigで調べてちょ。

別のマシンから以下のコマンドを実行

mkdir abc
sudo mount 192.168.56.101:/NFSROOT abc/

abcの下に今インストールしているPCの/NFSROOTディレクトリのファイルが見えたらOK

以上でインストールは終了


仮想マシンをクローンした後の設定

マスタイメージを残しておいて、色々な環境をお試しするには仮想マシンをクローンして使うのがおススメ。

クローンした仮想マシンを起動し、必要な変更を加える。

ネットワーク設定の変更

マシン名とか同じ名前だと色々不都合があるので、変更しておく。
他のクローン仮想環境と同時に使わないならそのままでも良いけど。
IPアドレスも固定で割り振っておくと名前が引けない時にさくっと分かってなにかと便利… なんだけど、最近はWindowsもUbuntuもRaspberryPiもmDNSがサポートされてるから自動割り当てのままでもそんなに不便はないかも。

ポリシー

以下の内容でスクリプトファイルを作成し、実行する。
ホスト名などは適宜変更。

#!/usr/bin/env bash

# 設定する数値の入力
read -p "数値を入力してください: " number 

# echo ${number}

if [[ ! "${number}" =~ ^[0-9]+$ ]]; then
  echo '数値ではありません'
  exit 1
fi

if [ "${number}" -lt 2 ] || [ "${number}" -gt 254 ]; then
  echo '数値は2~254でなければなりません'
  exit 1
fi

# ホスト名の変更
old_name=$(hostname)
new_name="skull${number}"

cmd="sudo nmcli general hostname ${new_name}"
echo $cmd
eval $cmd

cmd="sudo sed -i -e "s/${old_name}/${new_name}/" /etc/hosts"
echo $cmd
eval $cmd

# すべてのコネクション名を改行区切りで配列に取得
ORG_IFS=$IFS
IFS=$'\n'
connections=($(nmcli  -t -f NAME connection))
IFS=$ORG_IFS        # 元に戻す

for i in ${!connections[@]}; do
    # 各コネクションについて
    # 直接取り出すとうまくいかないのでインデックス取り出して内容取得
    connection="${connections[$i]}"
    
    # 現在設定されているIPv4アドレスを取得
    str=$(nmcli connection show "${connection}" | grep "IP4.ADDRESS\[1\]" )
    # 結果⇒ 「IP4.ADDRESS[1]: 192.168.78.215/24」
    
    # IPアドスの各桁とサブネットマスクを空白区切りで取得し、配列に代入
    # 1個目のsed ⇒ 192.168.78.215/24
    # 2個目のsed ⇒ 192 168 78 215 24
    ipv4octet=($(echo $str | sed -e "s/.*:[ \t]\+\([0-9\.\/]\+\).*$/\1/g" | sed -e "s/[\.\/]/ /g"))
    
    # echo ${str}
    # echo ${ipv4octet[0]}  ${ipv4octet[1]}  ${ipv4octet[2]}  ${ipv4octet[3]}  ${ipv4octet[4]}
    
    if [ ${ipv4octet[0]} -eq 192 ] && [ ${ipv4octet[1]} -eq 168 ]; then
        # 192.168.XX.XX のコネクション
        # echo "**** ${str} ****"
        
        # 現在設定されているIPv4GWアドレスを取得
        str=$(nmcli connection show "${connection}" | grep "IP4.GATEWAY" )
        # 結果⇒ 「IP4.GATEWAY: 192.168.78.1」
        
        # IPv4GWアドレスを抽出(未定義では--なので-も抽出対象)
        gwaddr=$(echo $str | sed -e "s/.*:[ \t]\+\([0-9\.-]\+\).*$/\1/g")
        # "--" だったら空文字にする
        if [ "$gwaddr" = "--" ]; then gwaddr=""; fi
        
        # 現在設定されているIPv4DNSアドレスを取得(未定義ならこのエントリがない)
        str=$(nmcli connection show "${connection}" | grep "IP4.DNS\[1\]" )
        # 結果⇒ 「IP4.DNS[1]: 192.168.78.1」
        
        # IPv4DNSアドレスを抽出
        dnsaddr=$(echo $str | sed -e "s/.*:[ \t]\+\([0-9\.]\+\).*$/\1/g")
        
        set_str="ipv4.method manual ipv4.addresses ${ipv4octet[0]}.${ipv4octet[1]}.${ipv4octet[2]}.${number}/${ipv4octet[4]}"
        if [ -n "$gwaddr" ]; then
            set_str="${set_str} ipv4.gateway ${gwaddr}"
        fi
        if [ -n "$gwaddr" ]; then
            set_str="${set_str} ipv4.dns ${dnsaddr}"
        fi
        
        # echo ipv4.method manual ${set_str}
        cmd="nmcli connection modify \"${connection}\" ${set_str}"
        echo $cmd
        eval $cmd
        
        cmd="nmcli connection down   \"${connection}\""
        echo $cmd
        eval $cmd
        
        cmd="nmcli connection up     \"${connection}\""
        echo $cmd
        eval $cmd
    fi
done

echo ==DONE==

実行後、
ip addressifconfigでIPアドレスが変更されていること、
hostnameでホスト名が変更されていること、
cat /etc/hostsでhostsが変更されていること、 をそれぞれ確認する。

[!TIP] IPアドレスの変更をGUIで行うには以下。
システムの設定を起動(gnome-control-centerを実行)
左側のネットワークを選択し、対象のNICの設定を変更する

[!NOTE] このスクリプトをマスタイメージのどこか(例えば~/binとか)に保存しておけば、 クローンする度にスクリプトを実行すればIPアドレスとホスト名の変更をイッパツで完了できる。

あとはお約束

sudo apt -U upgrade

VirtalBoxのバージョンが変更されているときは、GuestAdditionのバージョンアップも忘れずに。
また、マスタイメージは定期的にsudo apt -U upgradeしておくと クローン時のアップデート時間が短くて済む。