GitHub - sishihara0706/linux-setup · GitHub
Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

16 Commits

Folders and files

Repository files navigation

linux-setup

自分用の Linux 初期セットアップを自動化するためのリポジトリです。

ディストリビューションごとにパッケージ管理処理を分離しつつ、Vim・Bash aliases・Git 設定などの dotfiles は共通で管理します。

対応OS

現在は以下を想定しています。

  • 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はこのリポジトリ自体を取得するために必要なので、セットアップスクリプトの前提としています。

1. Gitをインストール

elementary OS / Ubuntu / Raspberry Pi OS

sudo apt update
sudo apt install -y git

Rocky Linux / Fedora

sudo dnf install -y git

Arch Linux

sudo pacman -Sy --needed git

Gitが利用できることを確認します。

git --version

2. リポジトリをclone

git clone https://github.com/sishihara0706/linux-setup.git
cd linux-setup

自分のGitHubリポジトリURLに置き換えてください。

3. セットアップを実行

初回のみ setup.sh に実行権限を付与します。

chmod +x setup.sh

その後、セットアップを実行します。

./setup.sh

setup.sh の役割

任意の ~/tools セットアップ

通常の ./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 ~/.bashrc

mainへマージされた後は git switch main、git pull --ff-only でも利用できます。

リポジトリの tools/ を ~/tools/ へファイル単位でコピーし、 ~/.bash_aliases.tools を ~/.bash_aliases から読み込みます。 ~/tools はPATHの末尾に一度だけ追加されます。

呼び出し ツール
ga / gah / gac / gap 全ファイル / .h / .c / .py の検索
mcd <directory> ディレクトリ作成と現在のシェルでの移動
bs Bashショートカット一覧
cr <name> <command> ~/.bash_aliases へエイリアス追加

同名のエイリアスや関数がすでにあれば、その定義を優先します。 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 で実行できます。

OSの判定

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ごとの処理

OS依存の処理は distro/ 以下に配置します。

elementary OS

distro/elementary.sh

apt を使用して、開発ツールや基本コマンドをインストールします。

Ubuntu

distro/ubuntu.sh

Ubuntu向けの apt パッケージをインストールします。

Raspberry Pi OS

distro/raspberrypi.sh

Raspberry Pi OS向けの apt パッケージをインストールし、SSHを有効化します。 Ubuntu向けの処理を再利用し、Raspberry Pi固有のパッケージグループを追加します。

Debian

distro/debian.sh

Debian向けの apt パッケージをインストールします。APT系の共通処理として Ubuntu向けの実装を再利用します。

パッケージグループ

distro/packages.sh

パッケージは common、development、network、python、raspberrypi の 論理グループで管理します。実際のパッケージ名の違いは各OS用スクリプトで吸収します。

Rocky Linux

distro/rocky.sh

dnf を使用して、Rocky Linux向けのパッケージや開発ツールをインストールします。

Fedora

distro/fedora.sh

dnf を使用して、Fedora向けのパッケージや開発ツールをインストールします。

Arch Linux

distro/arch.sh

pacman を使用して必要なパッケージをインストールします。

共通設定

OSに依存しない設定は、

distro/common.sh

で管理します。

現在は主に以下を行います。

  • .bash_aliases の設定
  • .vimrc の設定
  • .gitconfig の設定
  • Gitのユーザー名・メールアドレスの対話設定
  • .bashrc から .bash_aliases を読み込む設定
  • 既存dotfilesのバックアップ
  • リポジトリ内dotfilesへのシンボリックリンク作成

dotfiles

実際の設定ファイルは dotfiles/ に保存します。

Bash aliases

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'

Vim

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 push

Git

dotfiles/gitconfig

共通のGit設定を管理します。

ユーザー名やメールアドレスは setup.sh の実行中に入力します。入力した値は、Git管理されない ~/.gitconfig.local に保存されます。既存の値がある場合は初期値として表示されるため、変更しなければ Enter だけで引き継げます。

非対話環境では、環境変数でも指定できます。

GIT_USER_NAME="Your Name" GIT_USER_EMAIL="you@example.com" ./setup.sh

共通の ~/.gitconfig から、この個人設定ファイルを読み込む構成です。

GitHub CLI

GitHub CLI (gh) もOSに合った方法でインストールします。セットアップ後、次のコマンドでGitHubにログインできます。

gh auth login

シンボリックリンク

dotfilesはホームディレクトリへコピーするのではなく、基本的にシンボリックリンクとして配置します。

例えば、

~/.bash_aliases
      ↓
~/linux-setup/dotfiles/bash_aliases

となります。

この方式にすることで、実際に使用している設定ファイルとGitで管理している設定ファイルを同じものにできます。

設定変更後に、

git diff

を実行すれば、自分が変更した設定をすぐ確認できます。

既存設定のバックアップ

すでに以下のような設定ファイルが存在する場合、

~/.vimrc
~/.bash_aliases
~/.gitconfig

そのまま上書きせず、バックアップを作成してからシンボリックリンクを設定します。

例:

~/.vimrc
↓
~/.vimrc.backup

バックアップファイルがすでに存在する場合は、日時付きのファイル名を使用します。

Bash aliases の読み込み

common.sh は ~/.bashrc に以下の行が存在するか確認します。

[ -f ~/.bash_aliases ] && source ~/.bash_aliases

存在しない場合のみ追加します。

そのため、setup.sh を複数回実行しても同じ設定行が増殖しないようになっています。

セットアップ後、現在のシェルに設定を反映するには、

source ~/.bashrc

をユーザーが実行してください。

setup.sh は子プロセスとして実行されるため、スクリプト内から現在の親シェルへ .bashrc の設定を反映することはできません。そのため、この再読み込みは自動化せず、 セットアップ完了時に実行コマンドを案内する方針としています。

またはターミナルを開き直してください。

再実行について

このリポジトリでは、できるだけセットアップスクリプトを繰り返し実行できる構成を目指しています。

./setup.sh

を再実行しても、

  • 同じ .bashrc 設定を何度も追加しない
  • 既存設定を不用意に上書きしない
  • すでにインストール済みのパッケージでも問題なく処理できる

といった冪等性を意識します。

新しいLinux環境への導入

新しい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
        ;;
esac

OS固有の処理は各ディストリビューション用スクリプトに置き、共通設定は 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

などを使用してシステムパッケージを変更します。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages