Intro 以前常用していた5年前のノートPC (NEC PC)が、バッテリーとSSDの交換を経て快適によみがえった。 ついでにそのPC内のWSL環境も一新しておこうと考えた。 そのお話。
TL; DR zsh, prezto, powerlevel10kを導入した shellの設定を追加した WSLのnameserver問題を解決した Ryeを導入した WSLで完結するDocker環境を構築した GPGのSub鍵を移行した SSHの設定を移行した vimの設定を移行した nvmを導入した Ubuntu 24.04 LTSのインストール ここではWSL installの詳細な説明は行わない。 WSL自体はすでにinstallされている前提とする。
1 wsl --install -d Ubuntu-24 .04
まずはaptで最低限のinstall 1 2 3 4 5 sudo apt update && sudo apt upgrade -y sudo apt install -y git vim curl wl-copy
zsh 参照記事: (WSLにZshとPreztoとPowerlevel10kを導入する - Zenn)[https://zenn.dev/3w36zj6/scraps/3f47210998199e]
zshはPOSIX Shellなので、bashで作成したscrptなどの資源をそのまま利用できる。
zshのinstall 1 2 3 4 sudo apt install -y zsh chsh -s $(which zsh)
ここ以降、shellはzshを利用している。 ただ、記事のsyntax highlightの都合上、コードブロックの言語欄はbashとなっている。 実際のところ、気にする必要もないと思われる。
preztoのinstall zshの設定管理ツールとして、preztoをinstallする。 oh-my-zshの方が有名らしいが。preztoはより軽量とのことだ。
1 2 3 4 5 6 git clone –recursive https://github.com/sorin-ionescu/prezto.git "\({ZDOTDIR:-\)HOME}/.zprezto" setopt EXTENDED_GLOBfor rcfile in "${ZDOTDIR:-$HOME } " /.zprezto/runcoms/^README.md(.N); do ln -s "$rcfile " "${ZDOTDIR:-$HOME } /.${rcfile:t} " done
powerlevel10k (shellのtheme) .zpreztorc 1 2 3 4 zstyle ':prezto:module:prompt' theme 'powerlevel10k'
初回読み込み時に、powerlevel10kの設定を行う。 自分好みの設定を選択する。
なお、フォントとしてはHackGen Console or Consolasを利用した。
.zshrc zshでは、デフォルトでリダイレクトによるファイルの上書きが禁止されている。 小学生でもあるまいに、さすがに余計な気遣いなので変更する。
.zshrc 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 if [ -f ~/.bash_aliases ]; then . ~/.bash_aliasesfi export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket) " setopt CLOBBERsetopt RM_STAR_SILENT [[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
Rust 1 curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Rye Pythonのpyenv+poetryをできるRust製の最高のツール。 Pythonの複数バージョンとプロジェクト環境の管理が簡単にできる。
なぜpoetryは--dev
でのpackage installができなかったのか……
DNS解決の問題 wslは既知の問題として、resolv.confのnameserverが適切でない場合がある。 その場合に生じる問題は環境によってさまざまだが、一般的にはDNSの解決ができないことが多い。apt
やwget
すら通らない場合もあれば、rye
におけるgithub
との通信のみ妨げられる場合もある。
Ubuntu-22.04まで GoogleのDNSを利用する場合、以下のように設定する。
/etc/resolv.conf ただし、デフォルトではresolv.conf
は自動生成されるため、手動で変更しても再起動時に元に戻ってしまう。 これは/etc/wsl.conf
でgenerateResolvConf = false
として、さらにsudo chattr +i /etc/resolv.conf
として変更を禁止することで解決できる。
/etc/wsl.conf 1 2 3 4 5 [boot] systemd = true [network] generateResolvConf = false
1 sudo chattr +i /etc/resolv.conf
Ubuntu-24.04 WSLのUbuntu-24.04ではnameserverがsystemd-resolvedによって管理されるようになった。 その中では/etc/resolv.conf
の書き換えは再起動の際に強制的に元に戻される。 DNSの設定を変更したい場合は、/etc/systemd/resolved.conf
を変更する。
/etc/systemd/resolved.conf 1 DNS=8.8.8.8 8.8.4.4 2001:4860:4860::8888 2001:4860:
このサービスはsudo systemctl restart systemd-resolved.service
で再起動できる。
Ryeのinstall nameserverの問題が解決したら、Ryeをinstallする。 いくつかの質問が出てくるが、全部デフォルトのままで問題ない。
1 curl -sSf https://rye.astral.sh/get | bash
その後のRyeの実際の利用は、別の記事で記す。 便利だよ~!
vimの設定 筆者はGUIのVSCodeで見るほどでもない場合にvimを利用している。
下記ではいくつかのkey mapping、Color ThemeとしてPaperColorの選択を行っている。 特にデフォルトで行番号を表示し、m
でtoggleできるようにしている。
~/.vimrc 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 set pastetoggle=<F2> set belloff=all set number "" line number highlight LineNr ctermfg=120 autocmd ColorScheme * highlight LineNr ctermfg=120 "" color themesyntax enableset background=darkcolorscheme PaperColornoremap <C-a> 0 noremap <C-e> $nnoremap + <C-a> nnoremap - <C-x> noremap j gjnoremap k gknnoremap m :set number!<CR>
Color Themeの本体は~/.vim/colors
に配置する。~/.vim/colors
にPaperColor.vim
を配置する。 PapaerColor.vimはNLKNguyen/papercolor-theme - GitHub からダウンロードできる。
Docker WSLでDockerのinstallとなると、Windows側のDocker Desktopをinstallするのが一般的だ。 だが、わざわざWindows側のGUIを使うのもなんだかなぁという気持ちもあり、WSL内のみで完結する方法を選択する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 sudo apt-get install -y ca-certificates curl gnupg sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpgecho \"deb [arch=" $(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ " $(. /etc/os-release && echo "$VERSION_CODENAME " )" stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin sudo usermod -aG docker $(whoami ) sudo docker run hello-world
なお、Ryeの問題と同じく、Docker内のインターネット通信においてもDNSの問題は避けて通れない。 該当節を参照して対処せよ。
GPG 以前のMachineからGPGのSub鍵を継承する。
1 2 3 4 5 6 7 gpg -a -o sub.key --export-secret-subkeys NAME gpg --import sub.key
NAMEは鍵の識別子であり、以下のいずれかを用いる。
鍵のID 鍵に紐づいたメールアドレス 鍵に紐づいた名前 これはgpg --list-keys
で確認できる。
1 2 3 4 5 6 7 8 ❯ gpg --list-keys /home/USERNAME/.gnupg/pubring.kbx ----------------------------- pub rsa2048/ABCD1234EF567890 2021-01-01 [SC] ABCD1234EF5678901234567890ABCDEF12345678 uid [ultimate] Your Name <[email protected] > sub rsa2048/12345678ABCDEF12 2021-01-01 [E] sub rsa2048/87654321FEDCBA98 2021-01-01 [A]
上記の場合は、ABCD1234EF5678901234567890ABCDEF12345678
やYour Name
、[email protected]
がNAMEとして使える。
GPGのphrase保存期間などは、~/.gnupg/gpg-agent.conf
に記述する。
~/.gnupg/gpg-agent.conf 1 2 3 4 5 use-standard-socket default-cache-ttl 28800 max-cache-ttl 28800 enable-ssh-support
さらにGPGの認証鍵をSSH通信に用いる方法は別記事参照。
SSH ssh自体は~/.ssh/*
を移行すれば概ね完了だ。 ssh-agentを用いる場合、利用する秘密鍵を改めてssh-add SSH_KET_PATH
で登録する。
~/.bash_aliaes zshはbashと同じくPOSIX Shellなので、~/.bash_aliases
をほとんどそのまま利用できる。
以下に汎用性の高い部分を参考までに記しておこう。
~/.bash_aliases 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 alias expl="_OpenWindowsExplorer" function _OpenWindowsExplorer (){ dir_path="${1:-.} " explorer.exe $(wslpath -w "$dir_path " ) }alias less2="/usr/bin/less -R -N --QUIET" export VISUAL="vim" export LESSOPEN="|/usr/bin/lesspipe | /usr/share/source-highlight/src-hilite-lesspipe.sh %s" alias less="_ViewForLess" function _ViewForLess (){ input="$@ " if [[ "x${input} " != "x" ]] ; then view "${input} " else view - fi }alias dockerVolCp="_DockerVolume_Copy" function _DockerVolume_Copy (){ container_name="tmp_volcp" $(date +%s) if [[ "$1 " == *":" * ]]; then mode="from" virtual_path="$1 " host_path="$2 " else mode="to" host_path="$1 " virtual_path="$2 " fi volume_name=$(echo $virtual_path | cut -d: -f1) virtual_dest=$(echo $virtual_path | cut -d: -f2) host_path="$1 " virtual_path="$2 " docker container create --name $container_name -v $volume_name :/root hello-world if [[ $mode == "from" ]]; then docker cp $host_path $container_name :/root/$virtual_dest else docker cp $container_name :/root/$virtual_dest $host_path fi docker rm $container_name }alias crxzip="rm ~/downloads/src.zip -f && zip ~/downloads/src.zip src -r -x */*Zone.Identifier -x */.*" alias vscepack='docker run --rm -it -v "$(pwd)":/workspace vsce package' alias gpgReset="echo UPDATESTARTUPTTY | gpg-connect-agent"
zsh側で読み込むためには.zshrc
などにsource ~/.bash_aliases
を追加する。
nvm nodeも各softwareのinstallなどで必要なので、あらかじめinstallしておく。
1 2 3 4 5 6 7 8 9 10 11 12 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bashsource ~/.zshrc nvm install 20 node -v npm -v
まとめ 以上で、WSL環墋の最低限の構築は完了だ。 他にフォルダ構造の作成や、GitHubのサインイン (and Session保存)、各種ソフトのinstallなどあるが、それはまた別の機会としよう。