- 投稿日:
Ubuntu22.04 LTSのターミナルのレンダリングが異常に重いのでバージョンを落として運用するためのメモ
Node.jsの開発環境だけ入れる
環境
環境 | Version |
---|---|
Windows 11 Pro | Build 22621.3155 |
Ubuntu | 20.04.6 LTS |
zsh | 5.8 (x86_64-ubuntu-linux-gnu) |
MariaDB | Ver 15.1 Distrib 10.3.38-MariaDB |
Docker | 20.10.17, build 100c701 |
Git | 2.42.0 |
WSL2の構成
- 管理者権限のPowerShellで以下を流す
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
- OS再起動
- Linuxカーネル更新プログラム パッケージをインストールする
- Ubuntuを入れる
Ubuntu側のセットアップ
適当な開発環境をサクッと
# systemdの有効化
cat <<EOF | sudo tee /etc/wsl.conf
[boot]
command=service docker start; service nginx start; service mysql start;
[interop]
appendWindowsPath = false
[user]
default=ここにユーザー名
EOF
sudo apt update -y
sudo apt upgrade -y
sudo apt install -y \
zsh \
ssh \
net-tools \
traceroute \
unzip \
mariadb-server \
nginx \
git \
keychain
# chsh
sudo apt -y install zsh unzip traceroute
chsh -s $(which zsh)
# Docker
sudo apt remove docker docker-engine docker.io containerd runc
sudo apt update
# 依存関係のインストール
sudo apt install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
# Docker公式のGPG鍵を追加
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# リポジトリをパッケージマネージャーに登録
echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
# docker本体のインストール
sudo apt install -y dockerdocker-ce docker-ce-cli containerd.io docker-compose-plugin
# sudo緩和
sudo usermod -aG docker $USER
# WSLをリブート
# dot file設定
git clone https://github.com/Lycolia/my-dotfiles.git
rm -Rf my-dotfiles/.git/
mv my-dotfiles/.* .
rm -Rf my-dotfiles/
# Node.js @ nvm
export NVM_DIR="$HOME/.nvm" && (
git clone https://github.com/nvm-sh/nvm.git "$NVM_DIR"
cd "$NVM_DIR"
git checkout `git describe --abbrev=0 --tags --match "v[0-9]*" $(git rev-list --tags --max-count=1)`
) && \. "$NVM_DIR/nvm.sh"
nvm install --lts
# Keychain設定
cat <<'EOF' | tee -a ~/.zshrc
Keychain
keychain -q --nogui $HOME/.ssh/id_ed25519
source $HOME/.keychain/hostname-sh
EOF
トラブルシューティング
上記手順に書いてないことをすると起きるが、一応付記しておく
<3>WSL (639) ERROR: CreateProcessEntryCommon:345: getpwnam(USER_NAME) failed 0
というエラーが出る
wsl.conf
の[user]
セクションでdefault=USER_NAME
が存在しないユーザーを指定していると出る
Dockerやnginxのサービスが起動しない
systemdが有効になっていると起動しないので/etc/wsl.conf
からsystemd=true
を消す
- 投稿日:
ifの書き方メモ。中身はtest
コマンドなので[[]]
の中はtest
と同じ書き方が可能。コマンドなので演算子の間とかはスペースが無いとうまく動かない。余談だがzshでwhich
すると組み込みコマンドであることが確認できる
which [[
zsh: bad pattern: [[
which [
[: shell built-in command
which test
test: shell built-in command
基本構文
あくまでコマンドなので演算子の間には半角スペースが必要。[
より[[
の方が高機能らしい
https://fumiyas.github.io/2013/12/15/test.sh-advent-calendar.html
https://yukidarake.hateblo.jp/entry/2015/12/14/205610
if-elif-else
if [[ $var = "条件" ]]; then
# 処理
elif [[ $var -eq 0 ]]; then
# 処理
else
# 処理
fi
and / or
[[]]
を&&
か||
で区切れば成立する。これらは演算をしているわけではなく[[
の終了コードを見て次のコマンドを実行するかどうかを判断しているだけ
if [[ $var1 = "条件1" ]] && [[ $var2 = "条件2" ]]; then
# 処理
fi
if [[ $var1 = "条件1" ]] || [[ $var2 = "条件2" ]];
# 処理
fi
動作機序
test
コマンドは条件を満たせば0
、満たさなければ1
を終了コードに設定するため、単純にこれを利用している。[[
で代替可能なため基本的にtest
は使わない方がいい
# 条件1の$?が0なら条件2が走る
[[ $var1 = "条件1" ]] && [[ $var2 = "条件2" ]]
# 条件1の$?を無視して条件2が走る
[[ $var1 = "条件1" ]] || [[ test $var2 = "条件2" ]]
オプション
文字列用
オプション | 意味 | 補足 |
---|---|---|
string = string | 等しい | - |
string != string | 等しくない | - |
string =~ string | 正規表現一致 | - |
-n string | 空文字でない | non-zero |
-z string | 空文字 | zero |
-d path | ディレクトリ | directory |
-s path | ファイルサイズが 0 を超える | size |
数値用
オプション | 意味 | 補足 |
---|---|---|
0 -eq 0 | 等しい | equals |
0 -ne 0 | 等しくない | not equals |
0 -lt 0 | 未満 | less than |
0 -le 0 | 以下 | less than or equal to |
0 -gt 0 | 超える | greater than |
0 -ge 0 | 以上 | greater than or equal to |
ファイル用
オプション | 意味 | 補足 |
---|---|---|
-d path | ディレクトリ | directory |
-e path | 存在するパス | exists |
-f path | ファイル | file |
参考
- https://ss64.com/bash/test.html
- ifの書き方全般の説明がある