Ubuntu 24.04のVirtualBoxへのインストール手順のメモ
Ubuntu 24.04のVirtualBoxへのインストール手順をまとめてみた。
今回は 極力コマンドコピペで実行できるように書いてみた。
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]
upgrade
やinstall
時にオプション-U
(--update
)をつけるとupdate
も一緒に実行してくれるので命令ひとつで済む。
(ubuntu 24.04に搭載された2.7.14以降)
これが入ってないとGuestAdditionのインストールで失敗する
sudo apt install build-essential
なにかと使うのでインストール
sudo apt install net-tools dconf-editor gnome-tweaks
念のため一旦リブートしておく。
以前にマウントしたものが残ってたらアンマウントしておくこと(インストール後初めてなのでマウントされてることはないけれど)。
VirtualBox のメニューの「デバイス」→「Guest Additions CDイメージの挿入…」を選択
以下、ごにょごにょ。
[!TIPS] プログラムが自動で始まらない場合は、CDROMのマウント先(たぶん、
/media/${USER}/VBox_GAs_x.x.xx/
)に移動してsudo ./VBoxLinuxAdditions.run
を実行すれば良い。
GuestAdditionによる更新適用のため、もう一度リブート。
(再ログインだけでもよさそうな感じではあるが、念のため)
ここでVirtualboxの拡張機能が使えるようになっているので、
Virtualboxのメニューから
「デバイス」→「クリップボードの共有」→「双方向」 を選択。
これでホストとゲストでクリップボードが共有できる。
また、デスクトップサイズの変更(仮想マシンのウィンドウのサイズ変更)にも対応できる。
「アプリケーション」で「既定の選択」を選んでいれば要らないアプリは入っていないハズ。
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)
以下のコマンドで~/.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 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
で、入手したフォントを端末のフォントに設定しておこう。
端末を起動し、右上の「≡」→「設定」を選択
使用中のプロファイル(最初のは「名前なし」)を選択し、
「フォントを指定」にチェックを入れ、その右側でフォントを選ぶ
さっきインストールした「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
クローンしたディスクで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
デフォルトの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)はすべて終了しておいた方が無難。
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
なんとなく使いにくいので好みのデザインに変更。
私はゴミ箱使わないので消しときます。
dconf write /org/gnome/shell/extensions/dash-to-dock/show-trash false
Windows7っぽく下に移動
dconf write /org/gnome/shell/extensions/dash-to-dock/dock-position "'BOTTOM'"
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
自分のタイミングでソフトのアップデートができないのがストレスなので、以下で自動確認を停止。
もちろん、適時手動でアップデートするのを忘れずに。
Virtualbox環境ではWindowsで設定したのが有効になっているので必要ないが、Native Installの場合は以下のページを参考に入れ替えを設定する。
【Ubuntu 20.04/18.04 LTS】CapsLockとControlキーを入れ替える
tewaksを使用する
Ubuntu Bdgieメモ: TweeksでCapsとCtrlのSwap
というのもある。 お好きな方で。
Native環境にインストールしてないので未確認だけど…
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」タブをクリック→
「名前」に設定する名前を設定→
「適用」をクリック
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を再起動します。
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
を実行
別の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
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 address
やifconfig
で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
しておくと
クローン時のアップデート時間が短くて済む。