Giter VIP home page Giter VIP logo

reinstall_system's Introduction

システム再インストールを楽にする手順: 専用BashScriptのすすめ

はじめに

Ubuntuは2年おきにLTS(Long Term Support)版がリリースされます。 わたしは最新版のLTS版がリリースされてから十分な期間を経て、LTS版を導入しています。たとえば、現在Ubuntu 22.04が最新版であり、まもなく24.04がリリースされるタイミングです。ですので今回のシステム入れ替えは20.04から22.04へのアップグレードとなります。

さて、ネット上には「〇〇をインストールしたらやること10か条」というような記事が多くあります。 それらはだいたい同じことが書いてある傾向があり、それをすべて手作業でおこなっています。

一方でAnsibleのような「大規模なインフラストラクチャの管理」に使われるツールがありますが、1台のPCのためにそれを使うのはオーバーキルです。

そこで簡単なBashScriptを書いて、それを実行するだけでシステムを再インストールできるようにしています。 随分昔からこの方法を使っていますが、大きな障害もなく使えています。

スクリプト構成

スクリプトは以下の3つに分かれています。

  • ins.sh: インストール時に必須のパッケージをダウンロードしたり、他のスクリプトを実行します。
  • apt_install_list.sh: aptでインストールするパッケージのリストです。
  • copy_dot_files.sh: ホームディレクトリにコピーするドットファイルのリストです。

::note:: これらスクリプトの中にはシステム固有の情報がハードコーティングされているため、ここでは公開できる部分に絞って掲載します。

ins.sh

コメントに説明が書いてありますので、それぞれ参照いただくとして、説明が必要な部分を解説します。

reinstall_system/ins.sh

Lines 1 to 169 in dcbf24f

#!/usr/bin/env bash
sudo su &
# ----------------------------------------------
# 最初にインストールしたばかりのシステムをアップデートする必要がある
# ----------------------------------------------
apt update && apt upgrade -y
# ----------------------------------------------
# 必要なライブラリをインストールする
# ----------------------------------------------
apt install -y apt-transport-https
apt install -y ca-certificates
apt install -y curl
apt install -y ufw
apt install -y zenity
apt install -y fcitx
apt install -y tee
# ----------------------------------------------
# ufw 有効化
# ----------------------------------------------
ufw enable
# ----------------------------------------------
# 作業環境の設定
# ----------------------------------------------
# 監視: dconf watch /
# 出力: dconf dump /
# 出力: gsettings list-recursively
# デスクトップウィンドウマネージャの設定を変更
gsettings set org.gnome.desktop.wm.preferences resize-with-right-button true
# タッチパッドの設定を変更
gsettings set org.gnome.desktop.peripherals.touchpad disable-while-typing false
# インターフェースの設定を変更
gsettings set org.gnome.desktop.interface clock-show-weekday true
# Nautilusのアイコンビューのキャプションを設定
gsettings set org.gnome.nautilus.icon-view captions "['size', 'date_accessed', 'none']"
# Nautilusのデフォルトの並び順を設定
gsettings set org.gnome.nautilus.preferences default-sort-order 'mtime'
# GTKテーマを設定
gsettings set org.gnome.desktop.interface gtk-theme 'Yaru-dark'
# Dash to Dockのアイコン最大サイズを設定
gsettings set org.gnome.shell.extensions.dash-to-dock dash-max-icon-size 32
# Dash to Dockのマウント表示設定を変更
gsettings set org.gnome.shell.extensions.dash-to-dock show-mounts false
# Dash to Dockのごみ箱表示設定を変更
gsettings set org.gnome.shell.extensions.dash-to-dock show-trash false
# デスクトップのアイドル遅延時間を設定(0は無効)
gsettings set org.gnome.desktop.session idle-delay uint32 0
# スクリーンセーバーのロックを無効にする
gsettings set org.gnome.desktop.screensaver lock-enabled false
# 通知設定を変更
gsettings set org.gnome.desktop.notifications.application.gnome-printers-panel application-id 'gnome-printers-panel.desktop'
# 通知アプリケーションの子リストを設定
gsettings set org.gnome.desktop.notifications application-children "['gnome-network-panel', 'apport-gtk', 'org-gnome-nautilus', 'snap-store-ubuntu-software', 'gnome-printers-panel']"
# デスクトップのお気に入りやランチャーに表示されるアプリケーションのリストを設定
gsettings set org.gnome.shell favorite-apps "['firefox_firefox.desktop', 'google-chrome.desktop', 'thunderbird.desktop', 'org.gnome.Nautilus.desktop', 'snap-store_ubuntu-software.desktop', 'yelp.desktop', 'PCSX2.desktop', '8TB_mount.desktop', 'rpcs3-emu_rpcs3.desktop', 'nmcli_n_on.desktop', 'nmcli_n_off.desktop', 'gnome-system-monitor.desktop']"
# ボリュームダウンのショートカットキーを設定
gsettings set org.gnome.settings-daemon.plugins.media-keys volume-down "['<Alt>9']"
# ボリュームアップのショートカットキーを設定
gsettings set org.gnome.settings-daemon.plugins.media-keys volume-up "['<Alt>0']"
# フルスクリーン切り替えのキーバインディングを設定
gsettings set org.gnome.desktop.wm.keybindings toggle-fullscreen "['F11']"
# ----------------------------------------------
# DNS変更
# ----------------------------------------------
nmcli c m 有線接続\ 1 ipv4.dns x.x.x.x # DNSサーバーのアドレスは任意に変更して下さい
systemctl restart NetworkManager
# ----------------------------------------------
# バックアップハードディスクのマウント
# ----------------------------------------------
mkdir /media/user/xxxx # マウントポイントxxxxは任意に変更して下さい
mount /dev/disk/by-label/xxxx /media/user/xxxx
# -----------------------------------
# 必要なファイルをコピー
# -----------------------------------
cd /media/user/BACKUP_HDD/homeフォルダバックアップ/XXXXX # XXXXXは任意に変更して下さい
cp -afv ./apt_install_list.sh /home/user/
cp -afv ./copy_dot_files.sh /home/user/
cp -afv ./notice.wav /home/user/
# -----------------------------------
# apt_install_list.sh実行
# -----------------------------------
# repository追加
add-apt-repository universe
add-apt-repository multiverse
add-apt-repository restricted
# http://jp.archive.ubuntu.com/ubuntu/リポジトリにpartnerはない
add-apt-repository "deb http://archive.canonical.com/ubuntu $(lsb_release -sc) partner" # partner
apt update && apt upgrade -y
# apt_install_list.sh実行
chmod +x apt_install_list.sh
bash -c /home/user/apt_install_list.sh | tee apt_install.log
# -----------------------------------
# CUDA & Others
# -----------------------------------
# ./apt_install_list.shに記載
# -----------------------------------
# make do copy_dot_files.sh
# -----------------------------------
chmod +x /home/user/copy_dot_files.sh
bash -c /home/user/copy_dot_files.sh
chown -R user:user /home/user/*
# ----------------------------------------------
# remove files
# ----------------------------------------------
rm apt_install_list.sh
rm copy_dot_files.sh
# -----------------------------------
# ufw for kdeconnect
# -----------------------------------
ufw allow in on enp6s0 log proto tcp from PRIVATE_ADDRESS to PRIVATE_ADDRESS port 1714:1716
ufw allow in on enp6s0 log proto udp from PRIVATE_ADDRESS to PRIVATE_ADDRESS port 1714:1716
# -----------------------------------
# ufw for GitHub
# -----------------------------------
ufw allow from ADDRESS to any port PORT_NUMBER
# -----------------------------------
# bashrc file, Add postscript
# -----------------------------------
cat postscript_bashrc.txt >> /home/user/.bashrc
# ----------------------------------------------
# User add
# ----------------------------------------------
# 現行ユーザをdockerグループに所属させる
gpasswd -a user docker
# 一部コマンドをパスワード無しで実行する
touch /etc/sudoers.d/user
chmod 0440 /etc/sudoers.d/user
cat <<EOF >> /etc/sudoers.d/user
user ALL=(ALL) NOPASSWD:APPLICATION_PATH
EOF
# ----------------------------------------------
# end of installation
# ----------------------------------------------
apt autoremove -y

作業環境の設定

reinstall_system/ins.sh

Lines 29 to 68 in 542f9ce

# ----------------------------------------------
# 作業環境の設定
# ----------------------------------------------
# 監視: dconf watch /
# 出力: dconf dump /
# 出力: gsettings list-recursively
# デスクトップウィンドウマネージャの設定を変更
gsettings set org.gnome.desktop.wm.preferences resize-with-right-button true
# タッチパッドの設定を変更
gsettings set org.gnome.desktop.peripherals.touchpad disable-while-typing false
# インターフェースの設定を変更
gsettings set org.gnome.desktop.interface clock-show-weekday true
# Nautilusのアイコンビューのキャプションを設定
gsettings set org.gnome.nautilus.icon-view captions "['size', 'date_accessed', 'none']"
# Nautilusのデフォルトの並び順を設定
gsettings set org.gnome.nautilus.preferences default-sort-order 'mtime'
# GTKテーマを設定
gsettings set org.gnome.desktop.interface gtk-theme 'Yaru-dark'
# Dash to Dockのアイコン最大サイズを設定
gsettings set org.gnome.shell.extensions.dash-to-dock dash-max-icon-size 32
# Dash to Dockのマウント表示設定を変更
gsettings set org.gnome.shell.extensions.dash-to-dock show-mounts false
# Dash to Dockのごみ箱表示設定を変更
gsettings set org.gnome.shell.extensions.dash-to-dock show-trash false
# デスクトップのアイドル遅延時間を設定(0は無効)
gsettings set org.gnome.desktop.session idle-delay uint32 0
# スクリーンセーバーのロックを無効にする
gsettings set org.gnome.desktop.screensaver lock-enabled false
# 通知設定を変更
gsettings set org.gnome.desktop.notifications.application.gnome-printers-panel application-id 'gnome-printers-panel.desktop'
# 通知アプリケーションの子リストを設定
gsettings set org.gnome.desktop.notifications application-children "['gnome-network-panel', 'apport-gtk', 'org-gnome-nautilus', 'snap-store-ubuntu-software', 'gnome-printers-panel']"
# デスクトップのお気に入りやランチャーに表示されるアプリケーションのリストを設定
gsettings set org.gnome.shell favorite-apps "['firefox_firefox.desktop', 'google-chrome.desktop', 'thunderbird.desktop', 'org.gnome.Nautilus.desktop', 'snap-store_ubuntu-software.desktop', 'yelp.desktop', 'PCSX2.desktop', '8TB_mount.desktop', 'rpcs3-emu_rpcs3.desktop', 'nmcli_n_on.desktop', 'nmcli_n_off.desktop', 'gnome-system-monitor.desktop']"
# ボリュームダウンのショートカットキーを設定
gsettings set org.gnome.settings-daemon.plugins.media-keys volume-down "['<Alt>9']"
# ボリュームアップのショートカットキーを設定
gsettings set org.gnome.settings-daemon.plugins.media-keys volume-up "['<Alt>0']"
# フルスクリーン切り替えのキーバインディングを設定
gsettings set org.gnome.desktop.wm.keybindings toggle-fullscreen "['F11']"

この部分ではユーザー体験に直接関わる設定をおこなっています。 gsettingsコマンドを使用することにより、使い慣れたUIやキーバインド、各種設定を再現します。

これらをご自身の環境で再現する場合、dconf watch /コマンドを使い、設定を変更したときに出力されるコマンドを参考にすると良いでしょう。

apt_install_list.sh

#!/usr/bin/env bash
apt update && apt upgrade -y
# # ----------------------------------------------
# # 最小構成
# # ----------------------------------------------
apt install -y coreutils
apt install -y vlc
apt install -y mcomix
apt install -y sox
apt install -y fcitx
apt install -y fcitx-config-gtk
apt install -y fcitx-mozc
apt install -y fcitx-table-emoji
apt install -y fcitx-tools
# # -----------------------------------
# # FACE01用
# # -----------------------------------
apt update && apt upgrade -y
apt install -y build-essential
apt install -y cmake
apt install -y curl
apt install -y ffmpeg
apt install -y git
apt install -y libavcodec-dev
apt install -y libavformat-dev
apt install -y libboost-all-dev
apt install -y libbz2-dev
apt install -y libffi-dev
apt install -y liblzma-dev
apt install -y libncurses5-dev
apt install -y libreadline-dev
apt install -y libsqlite3-dev
apt install -y libssl-dev
apt install -y libswscale-dev
apt install -y libxml2-dev
apt install -y libxmlsec1-dev
apt install -y pybind11-dev
apt install -y python3-dev
apt install -y python3-tk
apt install -y python3-venv
apt install -y synaptic
apt install -y tk-dev
apt install -y wget
apt install -y webp
# # ----------------------------------------------
# # Nvidia ドライバーとCUDAライブラリのインストール
# # ----------------------------------------------
cd /home/user || exit
apt install -y cuda-drivers
# 22.04の場合(ネットワークインストール)
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
dpkg -i cuda-keyring_1.1-1_all.deb
apt update
apt -y install cuda-toolkit-12-3
# その他ライブラリのインストール
apt install -y libcudnn8
apt install -y libcudnn8-dev
apt install -y libcublas
apt install -y libcublas-dev
# # -----------------------------------
# # VSCode
# # -----------------------------------
if [[ ! -e /home/user/microsoft.gpg ]]; then
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
fi
install -o root -g root -m 644 microsoft.gpg /etc/apt/trusted.gpg.d/
bash -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'
apt update
apt install -y code
# # ----------------------------------------------
# # ポストインストール
# # ----------------------------------------------
apt install -y baobab
apt install -y catfish
apt install -y cheese
apt install -y dconf-editor
apt install -y fdupes
apt install -y ffmpegthumbnailer
apt install -y font-manager
apt install -y gimp
apt install -y gnome-system-tools
apt install -y gnome-tweaks
apt install -y gnupg-agent
apt install -y gparted
apt install -y grsync
apt install -y gufw
apt install -y gthumb
apt install -y handbrake
apt install -y inkscape
apt install -y inxi
apt install -y libreoffice-calc
apt install -y manpages-ja
apt install -y meld
apt install -y mplayer
apt install -y ncdu
apt install -y pm-utils
apt install -y printer-driver-gutenprint
apt install -y pwgen
apt install -y rdfind
apt install -y simple-scan
apt install -y simplescreenrecorder
apt install -y thunderbird-gnome-support
apt install -y translate-shell
apt install -y transmission-gtk
apt install -y tree
apt install -y tumbler-plugins-extra
apt install -y usb-creator-gtk
apt install -y xsane
apt install -y xsel

こちらも説明が必要な部分のみ解説します。

NvidiaドライバーとCUDAライブラリのインストール

# # ----------------------------------------------
# # Nvidia ドライバーとCUDAライブラリのインストール
# # ----------------------------------------------
cd /home/user || exit
apt install -y cuda-drivers
# 22.04の場合(ネットワークインストール)
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
dpkg -i cuda-keyring_1.1-1_all.deb
apt update
apt -y install cuda-toolkit-12-3
# その他ライブラリのインストール
apt install -y libcudnn8
apt install -y libcudnn8-dev
apt install -y libcublas
apt install -y libcublas-dev

この部分のみ、Ubuntuのバージョンによってインストールするパッケージが異なります。

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb

このURLは以下のページから取得してください。 CUDA Toolkit 12.3 Update 1 Downloads

VS Code

# # -----------------------------------
# # VSCode
# # -----------------------------------
if [[ ! -e /home/user/microsoft.gpg ]]; then
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
fi
install -o root -g root -m 644 microsoft.gpg /etc/apt/trusted.gpg.d/
bash -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'
apt update
apt install -y code

ここではマイクロソフトのリポジトリから取得していますが、snapでもインストールできます。その場合は以下のようになります。ただし以前snapバージョンでは日本語の取り回しに難があったため、わたしはdebパッケージを使用しています。

sudo snap install code

Flatpakでインストールするには以下の手順に沿います。

sudo apt install flatpak
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak install flathub com.visualstudio.code

copy_dot_files.sh

#!/usr/bin/env bash
# Home Directory
cp -afv /media/user/BACKUP_HDD/homeフォルダバックアップ/bin/ /home/user/
cp -afv /media/user/BACKUP_HDD/homeフォルダバックアップ/テンプレート/ /home/user/
# Home Directory Dot Files & Dot Directory
cp -afv /media/user/BACKUP_HDD/homeフォルダバックアップ/.bash_history /home/user/
cp -afv /media/user/BACKUP_HDD/homeフォルダバックアップ/.cspell/custom-dictionary-user.txt /home/user/ # cSpell.customDictionaries
cp -afv /media/user/BACKUP_HDD/homeフォルダバックアップ/.gitconfig /home/user/ # Git init file.
cp -afv /media/user/BACKUP_HDD/homeフォルダバックアップ/.grsync/ /home/user/ # grsyncの過去ログフォルダ
cp -afv /media/user/BACKUP_HDD/homeフォルダバックアップ/.icons/ /home/user/ # Gnomeの場合`/home/user/.icons`, xfce4の場合'/home/user/.local/share/icons'
cp -afv /media/user/BACKUP_HDD/homeフォルダバックアップ/.mozc /home/user/
cp -afv /media/user/BACKUP_HDD/homeフォルダバックアップ/.ssh/ /home/user/
cp -afv /media/user/BACKUP_HDD/homeフォルダバックアップ/.themes/ /home/user/
# Specific Directory
mkdir -p /home/user/.local/state
cp -afv /media/user/BACKUP_HDD/homeフォルダバックアップ/.local/state /home/user/.local/ # vscodeのmarkdown preview用のcssファイル
# `.local/share/` Directory
cp -afv /media/user/BACKUP_HDD/homeフォルダバックアップ/.local/share/backgrounds/ /home/user/.local/share/ # WALLPAPERS
cp -afv /media/user/BACKUP_HDD/homeフォルダバックアップ/.local/share/fonts/ /home/user/.local/share/
cp -afv /media/user/BACKUP_HDD/homeフォルダバックアップ/.local/share/icons/ /home/user/.local/share/
cp -afv /media/user/BACKUP_HDD/homeフォルダバックアップ/.local/share/keyrings/ /home/user/.local/share/
cp -afv /media/user/BACKUP_HDD/homeフォルダバックアップ/.local/share/nautilus/ /home/user/.local/share/ # for nautilus script folder.
cp -afv /media/user/BACKUP_HDD/homeフォルダバックアップ/.local/share/themes/ /home/user/.local/share/
# `.config` Directory
cp -afv /media/user/BACKUP_HDD/homeフォルダバックアップ/.config/nautilus/ /home/user/.config/ # search-metadata, accels, etc.
cp -afv /media/user/BACKUP_HDD/homeフォルダバックアップ/.config/systemd/ /home/user/.config/
cp -afv /media/user/BACKUP_HDD/homeフォルダバックアップ/.config/autostart/Flameshot.desktop /home/user/.config/autostart/
# applications folder
cp -afv /media/user/BACKUP_HDD/homeフォルダバックアップ/.local/share/applications/pm-suspend.desktop /home/user/.local/share/applications/;

これも説明不要かと思いますが、一部解説します。

cp -afv /media/user/BACKUP_HDD/homeフォルダバックアップ/.local/share/fonts/ /home/user/.local/share/

大きな容量をとるフォント群は、ネットワークインストールするよりもローカルコピーした方が早いです。 /home/user/.fonts/home/user/.local/share/fontsのどちらでも良いですが、より新しい規格は後者です。わたしは後者に統一しています。

cp -afv /media/user/BACKUP_HDD/homeフォルダバックアップ/.config/systemd/ /home/user/.config/

ユーザーが管理するsystemdファイル群は/home/user/.config/systemd/userディレクトリ以下で管理しています。 これもコピーするだけで復活します。

おわりに

以上で大方の説明は終わりです。 これで「〇〇をインストールしたらやること10か条」のような記事を見ながら手作業で設定する必要がなくなります。システム入れ替えは忘れた頃に必ずやってきますので、そのときにお役立てください。

以上です。ありがとうございました。

reinstall_system's People

Contributors

ykesamaru avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.