自分用の Linux 初期セットアップを自動化するためのリポジトリです。
ディストリビューションごとにパッケージ管理処理を分離しつつ、Vim・Bash aliases・Git 設定などの dotfiles は共通で管理します。
現在は以下を想定しています。
- elementary OS
- Ubuntu
- Debian
- Raspberry Pi OS
- Rocky Linux
- Fedora
- Arch Linux
setup.sh が /etc/os-release を読み取り、実行中のOSを判定して対応するセットアップスクリプトを呼び出します。
linux-setup/
├── setup.sh
├── distro/
│ ├── common.sh
│ ├── packages.sh
│ ├── elementary.sh
│ ├── ubuntu.sh
│ ├── debian.sh
│ ├── raspberrypi.sh
│ ├── rocky.sh
│ ├── fedora.sh
│ └── arch.sh
├── dotfiles/
│ ├── bash_aliases
│ ├── vimrc
│ └── gitconfig
└── README.md
新しいLinux環境では、最初にGitだけを手動でインストールします。
Linuxをインストール
↓
Gitを手動でインストール
↓
このリポジトリをclone
↓
setup.shを実行
↓
OSごとのパッケージをインストール
↓
共通dotfilesを設定
Gitはこのリポジトリ自体を取得するために必要なので、セットアップスクリプトの前提としています。
sudo apt update
sudo apt install -y gitsudo dnf install -y gitsudo pacman -Sy --needed gitGitが利用できることを確認します。
git --versiongit clone https://github.com/sishihara0706/linux-setup.git
cd linux-setup自分のGitHubリポジトリURLに置き換えてください。
初回のみ setup.sh に実行権限を付与します。
chmod +x setup.shその後、セットアップを実行します。
./setup.sh通常の ./setup.sh では tools は導入しません。共通設定と一緒に導入する場合:
./setup.sh --with-tools
source ~/.bashrc既存環境に tools だけを追加する場合:
./setup.sh --tools-only
source ~/.bashrc--tools-only はOS判定・パッケージインストール・Git/Vim設定を実行せず、
sudoも使用しません。ログインユーザーとして実行してください。
--help でオプションを確認できます。2つのモードは同時指定できません。
以前にクローン済みの場合は、変更が公開された後、既存のクローンで以下を実行します。 未コミットの変更がある場合は、先にコミットなどで保存してください。
git fetch origin
git switch feature/optional-tools
git pull --ff-only
./setup.sh --tools-only
source ~/.bashrcmainへマージされた後は git switch main、git pull --ff-only でも利用できます。
リポジトリの tools/ を ~/tools/ へファイル単位でコピーし、
~/.bash_aliases.tools を ~/.bash_aliases から読み込みます。
~/tools はPATHの末尾に一度だけ追加されます。
同名のエイリアスや関数がすでにあれば、その定義を優先します。
crun、funcpy、vic、doll2yen、git-track-missing-branches.sh は
コマンド名で呼び出せます。PC固有のSSH接続先や作業ディレクトリ用エイリアスは含めません。
既存の ~/tools 内のファイルと ~/.bash_aliases.tools は上書きしません。
再実行時にも手元の編集を保持するため、ツールの更新は必要なファイルを比較して手動で反映してください。
読み込み行を追記する既存の .bash_aliases と .bashrc は、
<ファイル名>.backup.XXXXXXXX/original へバックアップします。
シンボリックリンクの場合はリンクをバックアップし、内容を通常ファイルへコピーして追記します。
そのため、古いクローンのリンク先ファイルには変更を加えません。
tools単独モードは依存パッケージを導入しません。各ツールを使用する場合は必要に応じて
gcc(crun)、vim と ~/_c_template.c(vicの新規作成)、
curl・jq・bc と利用可能な為替API設定(doll2yen)、git(ブランチ追跡)を用意してください。
持ち込んだスクリプトの外部サービス動作はこのセットアップの検証対象外です。
導入処理の検証は bash tests/tools-setup.sh で実行できます。
setup.sh は /etc/os-release を読み取り、現在のLinuxディストリビューションを判定します。
例えば elementary OS では、
setup.sh
↓
/etc/os-release を読み込む
↓
ID=elementary
↓
distro/elementary.sh
↓
aptによるパッケージインストール
↓
distro/common.sh
↓
dotfiles設定
という流れになります。
Rocky Linuxなら rocky.sh、Fedoraなら fedora.sh、Arch Linuxなら arch.sh が選択されます。
Raspberry Pi OS では、従来の ID=raspbian に加え、ID=debian の場合も
/proc/device-tree/model を確認します。Raspberry Piハードウェアであれば
raspberrypi.sh、それ以外のDebian環境では debian.sh が選択されます。
OS依存の処理は distro/ 以下に配置します。
distro/elementary.sh
apt を使用して、開発ツールや基本コマンドをインストールします。
distro/ubuntu.sh
Ubuntu向けの apt パッケージをインストールします。
distro/raspberrypi.sh
Raspberry Pi OS向けの apt パッケージをインストールし、SSHを有効化します。
Ubuntu向けの処理を再利用し、Raspberry Pi固有のパッケージグループを追加します。
distro/debian.sh
Debian向けの apt パッケージをインストールします。APT系の共通処理として
Ubuntu向けの実装を再利用します。
distro/packages.sh
パッケージは common、development、network、python、raspberrypi の
論理グループで管理します。実際のパッケージ名の違いは各OS用スクリプトで吸収します。
distro/rocky.sh
dnf を使用して、Rocky Linux向けのパッケージや開発ツールをインストールします。
distro/fedora.sh
dnf を使用して、Fedora向けのパッケージや開発ツールをインストールします。
distro/arch.sh
pacman を使用して必要なパッケージをインストールします。
OSに依存しない設定は、
distro/common.sh
で管理します。
現在は主に以下を行います。
.bash_aliasesの設定.vimrcの設定.gitconfigの設定- Gitのユーザー名・メールアドレスの対話設定
.bashrcから.bash_aliasesを読み込む設定- 既存dotfilesのバックアップ
- リポジトリ内dotfilesへのシンボリックリンク作成
実際の設定ファイルは dotfiles/ に保存します。
dotfiles/bash_aliases
例:
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
alias ..='cd ..'
alias ...='cd ../..'
alias grep='grep --color=auto'
alias gs='git status'
alias ga='git add'
alias gc='git commit'
alias gd='git diff'
alias gl='git log --oneline --graph --decorate --all'
alias ports='ss -tulpn'dotfiles/vimrc
Vimの共通設定を管理します。
セットアップ後は、例えば次のような構成になります。
~/.vimrc
↓ symbolic link
~/linux-setup/dotfiles/vimrc
そのため、
vim ~/.vimrcで設定を変更すると、実際にはリポジトリ内の dotfiles/vimrc が変更されます。
変更後はそのままGitで管理できます。
git diff
git add dotfiles/vimrc
git commit -m "Update vim config"
git pushdotfiles/gitconfig
共通のGit設定を管理します。
ユーザー名やメールアドレスは setup.sh の実行中に入力します。入力した値は、Git管理されない ~/.gitconfig.local に保存されます。既存の値がある場合は初期値として表示されるため、変更しなければ Enter だけで引き継げます。
非対話環境では、環境変数でも指定できます。
GIT_USER_NAME="Your Name" GIT_USER_EMAIL="you@example.com" ./setup.sh共通の ~/.gitconfig から、この個人設定ファイルを読み込む構成です。
GitHub CLI (gh) もOSに合った方法でインストールします。セットアップ後、次のコマンドでGitHubにログインできます。
gh auth logindotfilesはホームディレクトリへコピーするのではなく、基本的にシンボリックリンクとして配置します。
例えば、
~/.bash_aliases
↓
~/linux-setup/dotfiles/bash_aliases
となります。
この方式にすることで、実際に使用している設定ファイルとGitで管理している設定ファイルを同じものにできます。
設定変更後に、
git diffを実行すれば、自分が変更した設定をすぐ確認できます。
すでに以下のような設定ファイルが存在する場合、
~/.vimrc
~/.bash_aliases
~/.gitconfig
そのまま上書きせず、バックアップを作成してからシンボリックリンクを設定します。
例:
~/.vimrc
↓
~/.vimrc.backup
バックアップファイルがすでに存在する場合は、日時付きのファイル名を使用します。
common.sh は ~/.bashrc に以下の行が存在するか確認します。
[ -f ~/.bash_aliases ] && source ~/.bash_aliases存在しない場合のみ追加します。
そのため、setup.sh を複数回実行しても同じ設定行が増殖しないようになっています。
セットアップ後、現在のシェルに設定を反映するには、
source ~/.bashrcをユーザーが実行してください。
setup.sh は子プロセスとして実行されるため、スクリプト内から現在の親シェルへ
.bashrc の設定を反映することはできません。そのため、この再読み込みは自動化せず、
セットアップ完了時に実行コマンドを案内する方針としています。
またはターミナルを開き直してください。
このリポジトリでは、できるだけセットアップスクリプトを繰り返し実行できる構成を目指しています。
./setup.shを再実行しても、
- 同じ
.bashrc設定を何度も追加しない - 既存設定を不用意に上書きしない
- すでにインストール済みのパッケージでも問題なく処理できる
といった冪等性を意識します。
新しいPCやVMへLinuxをインストールした場合も、基本的に必要な操作は次の3段階だけです。
1. Gitをインストール
2. linux-setupをclone
3. ./setup.sh
例として Ubuntu / elementary OS なら、
sudo apt update
sudo apt install -y git
git clone https://github.com/sishihara0706/linux-setup.git
cd linux-setup
chmod +x setup.sh
./setup.sh例えばopenSUSEを追加する場合、
distro/opensuse.sh
を作成します。
そのうえで setup.sh のOS判定に追加します。
case "${ID:-}" in
elementary)
source "$SCRIPT_DIR/distro/elementary.sh"
;;
ubuntu)
source "$SCRIPT_DIR/distro/ubuntu.sh"
;;
rocky)
source "$SCRIPT_DIR/distro/rocky.sh"
;;
opensuse*)
source "$SCRIPT_DIR/distro/opensuse.sh"
;;
arch)
source "$SCRIPT_DIR/distro/arch.sh"
;;
*)
echo "Unsupported OS: ${ID:-unknown}"
exit 1
;;
esacOS固有の処理は各ディストリビューション用スクリプトに置き、共通設定は common.sh に残します。
今後は必要に応じて以下を追加します。
- Neovim設定
- tmux設定
- SSH設定
- GitHub CLI
- Docker
- Python / uv
- Go
- Node.js
- GNOME / KDE Plasma / Pantheon向け設定
- ShellCheckによる静的解析
- セットアップスクリプトのテスト
- distro間のパッケージ名差分の整理
このリポジトリでは、
OS依存のパッケージ管理
+
OS非依存の個人設定
を分離します。
そのため、Linuxディストリビューションを変更しても、自分のVim・Bash・Gitなどの環境をできるだけ同じ状態に再現することを目指します。
このスクリプトではパッケージのインストールやホームディレクトリ内の設定変更を行います。
実行前に内容を確認してください。
特に各ディストリビューションのスクリプトでは、
apt
dnf
pacman
などを使用してシステムパッケージを変更します。
