ubuntu22.04 開発環境構築 #
ここでは、ubuntu22.04の開発に必要と思われる基本設定を実施する。
※wsl2 と workspaces とで共用している記載があるので環境に応じて判断が必要 ※ターミナルのキーボード基本操作は以下が参考になる
- Bashを使いこなすための必須コマンド71選 https://qiita.com/kjm_nuco/items/6a4faf4d026d130e7db1
ubuntu バージョン確認 #
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.1 LTS
Release: 22.04
Codename: jammy
$ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.2 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.2 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
$ uname -a
Linux DESKTOP-U13HSM2 5.15.90.1-microsoft-standard-WSL2 #1 SMP Fri Jan 27 02:56:13 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
sysemd 起動を有効にする(wsl2のみ) #
※windows11+ubuntu22.04の場合、systemd=trueとなるし、defaultは記載がなくてもdeveloperになる様子。念のため設定しておいたほうがいい気がする
ついでにwindows path を引き継がせない設定も追加する
設定後、 ubuntu22.04 再起動する
$ sudo emacs /etc/wsl.conf
[interop]
appendWindowsPath = false
[boot]
systemd=true
[user]
default=developer
システムを最新に更新 #
$ sudo apt update && sudo apt upgrade -y
# スクリプト関連のビルドに必要になるのでインストールしておく
$ sudo apt install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev
# 基本的は不要だが、ubuntu22.04 再起動しておいたほうがいいかも
メモ
-
proxy 環境で sudo -E コマンドでユーザに設定した proxy 設定を反映させなくても proxy 設定を sudo に反映させる方法
https://www.server-world.info/query?os=Ubuntu_22.04&p=squid&f=2$ sudo emacs /etc/apt/apt.conf Acquire::http::Proxy "http://{プロキシサーバ}:{ポート}"; Acquire::https::Proxy "http://{プロキシサーバ}:{ポート}";
全体にproxy設定を反映させる場合
$ sudo emacs /etc/profile.d/proxy.sh _PROXY_URL="http://172.17.10.xx:8080" export HTTP_PROXY=$_PROXY_URL HTTPS_PROXY=$_PROXY_URL FTP_PROXY=$_PROXY_URL http_proxy=$_PROXY_URL https_proxy=$_PROXY_URL ftp_proxy=$_PROXY_URL $ source /etc/profile.d/proxy.sh
キーボードレイアウト変更(workspacesのみ) #
GUIログインの場合のみ有効。 ※もし期待したキーボード入力ができな場合は、この内容を参考にするべき ※ターミナル上では、emacsキーバインドで動作するので設定不要
$ sudo dpkg-reconfigure keyboard-configuration
Generic 105-key PC (intl.) → Japanese → Japanese → The default for the keyboard layout → No compose key → Yes
$ gnome-session-properties
Add → setxkbmap jp → Save
# keybind を確認
$ gsettings get org.gnome.desktop.interface gtk-key-theme
'Default'
# Default は地獄をみるので emacs に変更
$ $ gsettings set org.gnome.desktop.interface gtk-key-theme Emacs
$ gsettings get org.gnome.desktop.interface gtk-key-theme
'Emacs'
# キーボードレイアウト確認(※106にしてほうがいいかもしれないが、jisキーボードでも動作に影響はなさそう)
$ localectl
System Locale: LANG=ja_JP.utf8
VC Keymap: n/a
X11 Layout: us
X11 Model: pc105
ロケール設定 #
web検索とかを重視するなら英語(C)にしておいたほうがいい。エラー文言が英語になるので、web検索したときに便利。というより解決が早い。chatgptでもそのままエラー文言を張り付けると日本語で答えを返してくれることが多い
# 現在の言語を確認。utf-8ならとりあえずOK
$ echo $LANG
C.UTF-8
# ロケール設定確認
$ locale
LANG=C.UTF-8
LANGUAGE=
LC_CTYPE="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_PAPER="C.UTF-8"
LC_NAME="C.UTF-8"
LC_ADDRESS="C.UTF-8"
LC_TELEPHONE="C.UTF-8"
LC_MEASUREMENT="C.UTF-8"
LC_IDENTIFICATION="C.UTF-8"
LC_ALL=
# 指定可能なロケール確認
$ locale -a
C
C.utf8
POSIX
# 念のため ja_JP.UTF-8 を追加しておく
$ sudo locale-gen ja_JP.UTF-8
[sudo] password for developer:
Generating locales (this might take a while)...
ja_JP.UTF-8... done
Generation complete.
# 再度、指定可能ロケール確認
$ locale -a
C
C.utf8
POSIX
ja_JP.utf8 # <--- 追加されてある
# LANG を変更した場合の動作確認(bash, fish で動作確認できる)
# LANG=C で man コマンド man 実行
$ env LANG=C man man
# LANG=ja_JP.utf8 で man コマンド man 実行
$ env LANG=ja_JP.utf8 man man
# 現在のシェルに反映させる場合
$ export LANG=ja_JP.utf8
# 永続させる場合は、fish, bash の設定ファイルに追記が必要
developer ユーザ追加(workspacesのみ) #
$ sudo adduser developer
password-string
$ sudo gpasswd -a developer sudo
# developer ユーザで対応する
$ su - developer
# developer で再接続してもいい
git 設定 #
$ git --version
git version 2.34.1
# 勝手改行コードを無効
$ git config --global core.autocrlf false
# push動作をsimple(デフォルト)
$ git config --global push.default simple
# 大文字小文字を区別(linux向け,windows os区別できない)
$ git config --global core.ignorecase false
# 日本語文字化け対応
$ git config --global core.quotepath false
# pull時にリベースを強制しない(ワーニング削除)
$ git config --global pull.rebase false
# ファイルパーミッションを保持する(linuxだけ、windows,linux共通開発の場合はfalseがいいかも)
$ git config --global core.filemode true
# git 使用者名
$ git config --global user.name "John Doe"
# git 使用者email
$ git config --global user.email "john_doe@xxx.com"
# editor を vim にする(デフォルトがosによって違う)
$ git config --global core.editor vim
# パスワード保持方法
$ git config --global credential.helper store
# ※たぶんやるべき。初期ブランチを master ブランチからmainに変更
$ git config --global init.defaultBranch main
# git エイリアスコマンド追加
# + 管理外ファイルを表示
$ git config --global alias.untracked 'ls-files --others --exclude-standard'
# + gitignoreファイルを表示
$ git config --global alias.ignored 'ls-files --other --ignored --exclude-standard'
# + グラフ表示
$ git config --global alias.graph "log --graph --date-order -C -M --pretty=format:'<%h> %ad [%an] %Cgreen%d%Creset %s' --all --date=short"
$ git config --list
core.autocrlf=false
core.ignorecase=false
core.quotepath=false
core.filemode=true
push.default=simple
pull.rebase=false
user.name=名前
user.email=メールアドレス
credential.helper=store
init.defaultbranch=main
alias.untracked=ls-files --others --exclude-standard
alias.ignored=ls-files --other --ignored --exclude-standard
alias.graph=log --graph --date-order -C -M --pretty=format:'<%h> %ad [%an] %Cgreen%d%Creset %s' --all --date=short
- gitのpush.defaultに関するノウハウ
https://qiita.com/awakia/items/6aaea1ffecba725be601 - Git 2.27 での git pull 時の warning について
https://qiita.com/tearoom6/items/0237080aaf2ad46b1963 - git で大文字子文字を区別する方法
https://zenn.dev/msksgm/articles/20211122-clearify-upper-lower - .gitattributesで改行コードの扱いを制御する
text=auto の場合、core.autocrlf に従う
https://qiita.com/nacam403/items/23511637335fc221bba2
emacs インストール #
# インストール可能なバージョンを調べる
# - Ubuntuでインストール可能なバージョン一覧を表示する方法
# https://blog.turai.work/entry/20191110/1573353587
$ apt list emacs -a
Listing... Done
emacs/jammy 1:27.1+1-3ubuntu5 all
$ sudo apt install emacs
# 上記だと、27 がインストール可能だが、最新の28が必要な場合は以下が必要
$ sudo add-apt-repository ppa:kelleyk/emacs
$ sudo apt install emacs28
$ git clone https://github.com/oya3/.emacs.d
# counsel-rg で検索するために必要
$ sudo apt install ripgrep
# emacs でpython静的解析用パッケージをインストールしておく
# wsl2 ubuntu22.04 だと python3 がsystemにインストールされているだけ。
$ ls -la /usr/bin/python*
/usr/bin/python3 -> python3.10
/usr/bin/python3.10
# pip3 がない場合、$ sudo apt install python3-pip を実行する(wsl2 ubuntu22.04 だと pip3 はインストールされてないはず)
# とりあえず必要そうなアップグレードだけしておく
$ pip3 install --upgrade pip setuptools
Requirement already satisfied: pip in ./.anyenv/envs/pyenv/versions/3.10.5/lib/python3.10/site-packages (23.0.1)
Requirement already satisfied: setuptools in ./.anyenv/envs/pyenv/versions/3.10.5/lib/python3.10/site-packages (58.1.0)
Collecting setuptools
Downloading setuptools-67.6.0-py3-none-any.whl (1.1 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 15.9 MB/s eta 0:00:00
Installing collected packages: setuptools
Attempting uninstall: setuptools
Found existing installation: setuptools 58.1.0
Uninstalling setuptools-58.1.0:
Successfully uninstalled setuptools-58.1.0
Successfully installed setuptools-67.6.0
$ pip3 install jedi flake8 importmagic autopep8 yapf black
$ emacs -nw
# emacs 起動して以下のエラーが発生する場合は、.emacs.d/init.el 修正が必要
# Error (use-package): py-autopep8/:config: Symbol’s function definition is void: py-autopep8-enable-on-save
# - py-autopep8-enable-on-save is deprecated! use [py-autopep8-mode] instead!
# https://emacs.stackexchange.com/questions/71773/py-autopep8-enable-on-save-is-deprecated-use-py-autopep8-mode-instead
# (add-hook 'elpy-mode-hook 'py-autopep8-enable-on-save)
# ↓
# (add-hook 'elpy-mode-hook 'py-autopep8-mode)
fish インストール #
- fish shell完全ガイド https://zenn.dev/sawao/articles/0b40e80d151d6a#1.-z
# - Ubuntu20.04のデフォルトshellをfishにする
# https://qiita.com/koji9412/items/7e2a15c330c387fc5b3b
$ sudo apt install fish
# 現 shell を確認
$ echo $SHELL
/bin/bash
# fish の場所を確認
$ which fish
/usr/bin/fish
# shells 一覧も確認
$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/usr/bin/sh
/bin/dash
/usr/bin/dash
/usr/bin/tmux
/usr/bin/screen
/usr/bin/fish
$ chsh -s /usr/bin/fish
Password: password-string
# ubuntu22.04 に powerline font を入れる(linux に gnome 等のGUIでログインしている場合に必要。ターミナルでログインしている場合は不要)
$ git clone https://github.com/powerline/fonts.git
$ ./fonts/install.sh
$ rm -rf ./fonts
# ターミナル再起動後に、font を どれでもいいので、powerline を選択
# ターミナル閉じて再度起動。fish ターミナルになっていることを確認。
# workspaces なら os を再起動したほうがいいかもしれない。。。
# ここからは fish で対応する
# 旧のfisherを以下のコマンドでインストールしてしまったら、、、
# $ curl -Lo ~/.config/fish/functions/fisher.fish --create-dirs git.io/fisherman
# 以下の方法で削除できる ※ $ fisher self-uninstall とかのコマンドで昔は削除できたっぽいけど、最近のはできないので手動でけす
$ rm -rf ~/.config/fisherman/
$ rm -rf ~/.config/fish/conf.d/fisherman.fish
$ rm -rf ~/.config/fish/functions/fisher.fish
$ rm -rf ~/.config/fish/completions/fisher.fish
# fisherman インストール
# - 公式
# https://github.com/jorgebucaran/fisher
$ curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher install jorgebucaran/fisher
# テーマをインストール
# https://github.com/oh-my-fish/theme-bobthefish
# ※ 以下の方法ではインストールできなくなっているので注意
# $ fisher install omf/theme-bobthefish <--- 旧方式なので実施不可
$ fisher install oh-my-fish/theme-bobthefish
# peco (履歴)
$ sudo apt install peco
$ fisher install oh-my-fish/plugin-peco
# theme-agnoster テーマは python 仮想環境を表示するのでfish側を非表示にしておく
$ emacs ~/.config/fish/config.fish -nw
...
# デフォルトの pyenv 名表示非表示( oh-my-fish/theme-bobthefish に任せる )
set -gx VIRTUAL_ENV_DISABLE_PROMPT 1
# bobthefish テーマのカラーをドラキュラにする
set -g theme_color_scheme dracula
# ついでに emacs も cli モードに固定する
alias emacs='emacs -nw'
# peco history
# set fish_plugins theme peco
function fish_user_key_bindings
bind \cr peco_select_history
end
---END---
# fish の oh-my-fish/theme-bobthefish テーマからカラーをdraculaにしているので以下は不要
# # ついでに dir のカラーもdracula に変えておく
# $ git clone https://github.com/dracula/dircolors.git
# $ cp dircolors/.dircolors .
その他、便利機能 #
# bd コマンドで親ディレクトリ等に移動できる
# 旧バージョンでのインストール : $ fisher add 0rax/fish-bd
$ fisher install 0rax/fish-bd
# bd で候補選択開始できる
$ bd
# z コマンドでディレクトリ移動履歴が
# 旧バージョンでのインストール : $ fisher add z
$ fisher install jethrokuan/z
# z で候補選択開始できる
$ z
tig インストール #
$ sudo apt install tig
fish + tig でブランチ名をタブ補完(3.2.0以降は不要) #
$ emacs .config/fish/completions/tig.fish
function __fish_tig_git_branch_completion
set -l branches (git branch --list -a --format "%(refname:lstrip=2)")
for branch in $branches
echo $branch
end
end
complete -c tig -a "(__fish_tig_git_branch_completion)"
---END--
※ 2023/5/23 不要になったっぽい。デフォルトで補完が有効になっているので、以下の手順でFishを更新すればOK
https://fishshell.com/docs/current/relnotes.html の fish 3.2.0 (released March 1, 2021) をみると tig 補完も正式サポートされたっぽい
更新したい場合は、以下でいいかも。。。
$ sudo apt update
$ sudo apt upgrade fish
$ fish_update_completions
再起動。。。
↑でだめなら、、、
$ sudo apt-add-repository ppa:fish-shell/release-3
$ sudo apt update
$ sudo apt remove fish
$sudo apt install fish
再起動。。。
- fishの補完設定覚え書き https://qiita.com/ryotako/items/31f9c9153bece58f2d98
差分表示を単語単位に目立たせるようにする #
# git が導入済みの場合
$ cd /usr/share/doc/git/contrib/diff-highlight/
$ sudo make
$ sudo chmod +x diff-highlight # <--- 必要でない場合があるので、ls -la で属性確認したほうがいい
$ sudo ln -s /usr/share/doc/git/contrib/diff-highlight/diff-highlight /usr/local/bin/diff-highlight
$ emacs ~/.tigrc
# 差分表示に diff-highlight を使う (要 tig 2.2.1 以降. diff-highlight が $PATH にあること)
set diff-highlight = true
# カラー設定
# カーソル
color cursor black cyan
# diff-view で境界が見やすくなるように変更
color diff-header default magenta
color diff-chunk black white⏎
---END---
# git の diff show log でも単語単位色替えに対応させておく
$ emacs ~/.gitconfig
...
[pager]
log = diff-highlight | less
show = diff-highlight | less
diff = diff-highlight | less
---END---
- Tig で Git を自由自在に操作するための .tigrc 設定例 https://qiita.com/sfus/items/063797a1dd8fdc7d032f
- tigの設定 https://zenn.dev/kiduki/articles/tig-configura
- WSL上のUbuntuでdiff-highlightを使う https://higelog.brassworks.jp/3437
tmux インストール #
$ sudo apt install tmux
$ tmux -V
tmux 3.2a
# tmux 設定
$ emacs .tmux.conf
# tmuxを256色表示できるようにする
set-option -g default-terminal screen-256color
set -g terminal-overrides 'xterm:colors=256'
# マウスホイールでスクロールする
# ペインをマウスクリックして選択する
# ウィンドウをマウスクリックして選択する
# マウスでペインをリサイズする
set-option -g mouse on
---END---
# tmux for fish 設定
$ emacs .config/fish/config.fish
...
# session selection at startup
function attach_tmux_session_if_needed
set ID (tmux list-sessions)
if test -z "$ID"
tmux new-session
return
end
set new_session "Create New Session"
# set ID (echo $ID\n$new_session | peco --on-cancel=error | cut -d: -f1)
# ↑の方法だと上手くいかないのでしかたなく以下の方法で対応。ただしバグがある。
# どうも \n を見つけて $new_session 文字列を追加しているっぽい感じの動作になっている
set IDS $new_session\n$ID
set ID (echo $IDS | peco --on-cancel=error | cut -d: -f1)
if test "$ID" = "$new_session"
tmux new-session
else if test -n "$ID"
tmux attach-session -t "$ID"
end
end
# if test -z $TMUX <--- GUI(workspaces) ログインしている場合
if test -z $TMUX && status --is-login
attach_tmux_session_if_needed
end
---END---
システムに入っているpythonの確認と設定 #
# python のインストール状態を確認しておく
# python は入っていない
$ python -V
Command 'python' not found, did you mean:
command 'python3' from deb python3
command 'python' from deb python-is-python3
# python3 は入っている
$ python3 -V
Python 3.10.6
# pip はいずれも入っていない
$ pip3 --version
Command 'pip3' not found, but can be installed with:
$ sudo apt install python3-pip
$ pip --version
Command 'pip' not found, but can be installed with:
sudo apt install python3-pip
# pip が入ってない場合はインストールしておく
$ sudo apt install python3-pip
anyenv インストール #
# install
$ git clone https://github.com/anyenv/anyenv ~/.anyenv
# 現 fish_user_paths の確認(何もないはず)
$ echo $fish_user_paths
$ set -Ux fish_user_paths $HOME/.anyenv/bin $fish_user_paths
# fish_user_paths に anyenv/bin が追加される
$ echo $fish_user_paths
/home/developer/.anyenv/bin
$ ~/.anyenv/bin/anyenv init
# Load anyenv automatically by adding
# the following to ~/.config/fish/config.fish:
status --is-interactive; and source (anyenv init -|psub)
# ↑の指示に従い、anyenv init を呼び出し。ただし、fish, version 3.3.1 の場合、最初からis-nteractive分岐があるので、そこに記載する
$ emacs .config/fish/config.fish
if status is-interactive
# Commands to run in interactive sessions can go here
source (anyenv init -|psub) # <--- ここ追記
end
---END---
# ターミナル再起動
$ exec $SHELL -l
# ターミナル再起動後、以下の表示がされるはず。
# ANYENV_DEFINITION_ROOT(/home/developer/.config/anyenv/anyenv-install) doesn't exist. You can initialize it by:
# > anyenv install --init
$ anyenv install --init
Manifest directory doesn't exist: /home/developer/.config/anyenv/anyenv-install # <--- anyenv 管理ディレクトリがないからcheckoutして作成することを聞いてきている。
Do you want to checkout https://github.com/anyenv/anyenv-install.git? [y/N]: y
Cloning https://github.com/anyenv/anyenv-install.git master to /home/developer/.config/anyenv/anyenv-install...
Cloning into '/home/developer/.config/anyenv/anyenv-install'...
remote: Enumerating objects: 71, done.
remote: Counting objects: 100% (14/14), done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 71 (delta 4), reused 4 (delta 1), pack-reused 57
Receiving objects: 100% (71/71), 13.15 KiB | 1.01 MiB/s, done.
Resolving deltas: 100% (11/11), done.
Completed!
# ターミナル再起動
$ exec $SHELL -l
# anyenv バージョン確認
$ anyenv --version
anyenv 1.1.5-1-g5c58783
# インストール可能envを確認
$ anyenv install --list
Renv
crenv
denv
erlenv
exenv
goenv
hsenv
jenv
jlenv
kubectlenv
luaenv
nodenv
phpenv
plenv
pyenv
rbenv
sbtenv
scalaenv
swiftenv
tfenv
- anyenv + macOS環境構築 https://qiita.com/rinpa/items/81766cd6a7b23dea9f3c
config.fish 最終内容 #
$ cat .config/fish/config.fish
if status is-interactive
# Commands to run in interactive sessions can go here
source (anyenv init -|psub)
end
# デフォルトの pyenv 名表示非表示( oh-my-fish/theme-bobthefish に任せる )
set -gx VIRTUAL_ENV_DISABLE_PROMPT 1
# bobthefish テーマのカラーをドラキュラにする
set -g theme_color_scheme dracula
# ついでに emacs も cli モードに固定する
alias emacs='emacs -nw'
# set fish_plugins theme peco
function fish_user_key_bindings
bind \cr peco_select_history
end
# session selection at startup
function attach_tmux_session_if_needed
# https://teratail.com/questions/132158
# IFS は区切り文字に細工してなんとかtmuxのリストを成形させている。いみわからない。。。
set IFS
set ID (tmux list-sessions)
set IFS \n" "\t
if test -z "$ID"
tmux new-session
return
end
set new_session "Create New Session"
# set ID (echo $ID\n$new_session | peco --on-cancel=error | cut -d: -f1)
# ↑の方法だと上手くいかないのでしかたなく以下の方法で対応。ただしバグがある。
# どうも \n を見つけて $new_session 文字列を追加しているっぽい感じの動作になっている
# echo -e "$new_session\n$ID"
set IDS $new_session\n$ID
set ID (echo $IDS | peco --on-cancel=error | cut -d: -f1)
if test "$ID" = "$new_session"
tmux new-session
else if test -n "$ID"
tmux attach-session -t "$ID"
end
end
if test -z $TMUX && status --is-login
attach_tmux_session_if_needed
end
pyenv インストール #
# # pyenv install に必要らしい。。。
# $ sudo apt update
$ sudo apt install build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev curl libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
$ anyenv install pyenv
# ターミナル再起動
$ exec $SHELL -l
# pyenv バージョン確認
$ pyenv --version
pyenv 2.3.17-10-g920ef145
# インストール可能バージョン確認
$ pyenv install --list
Available versions:
2.1.3
2.2.3
2.3.7
2.4.0
...
python3.8.9 インストール #
# python 3.8.9 インストール
$ pyenv versions
* system (set by /home/developer/.anyenv/envs/pyenv/version)
$ pyenv install 3.8.9
Downloading Python-3.8.9.tar.xz...
-> https://www.python.org/ftp/python/3.8.9/Python-3.8.9.tar.xz
Installing Python-3.8.9...
patching file Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst
patching file configure
patching file configure.ac
Installed Python-3.8.9 to /home/developer/.anyenv/envs/pyenv/versions/3.8.9
$ pyenv rehash #<--- 自動で実施されるようになったかもしれない
$ pyenv versions
* system (set by /home/developer/.anyenv/envs/pyenv/version)
3.8.9
# グローバルpythonを3.8.9 にしておく
$ pyenv global 3.8.9
# 状態確認
$ pyenv versions
system
* 3.8.9 (set by /home/developer/.anyenv/envs/pyenv/version)
# バージョン確認
$ python -V
Python 3.8.9
# root ユーザには影響がないことを確認しておく
$ sudo su -
Welcome to fish, the friendly interactive shell
Type help for instructions on how to use fish
root@xxx~# pyenv # ない
root@xxx~# python # ない
- Ubuntuでrootになる方法 https://linux.just4fun.biz/?Ubuntu/Ubuntu%E3%81%A7root%E3%81%AB%E3%81%AA%E3%82%8B%E6%96%B9%E6%B3%95
デバッグ #
もしかしたら標準より便利かも
$ pip install ipdb
import ipdb; ipdb.set_trace()
- Pythonにおけるデバッガ: pdb, ipdb https://qiita.com/Kobayashi2019/items/98e74110d74e4c60f617
- いろんな言語でbinding.pry https://ja.algonote.com/entry/binding-pry
nodenv インストール #
# nodenv インストール
$ anyenv install nodenv
# ターミナル再起動
$ exec $SHELL -l
$ nodenv --version
nodenv 1.4.0+5.acf64b3
node14.17.0インストール #
$ nodenv versions
Warning: no Node detected on the system
$ nodenv install 14.17.0
Downloading node-v14.17.0-linux-x64.tar.gz...
-> https://nodejs.org/dist/v14.17.0/node-v14.17.0-linux-x64.tar.gz
WARNING: node-v14.17.0-linux-x64 is in LTS Maintenance mode and nearing its end of life.
It only receives *critical* security updates, *critical* bug fixes and documentation updates.
Installing node-v14.17.0-linux-x64...
Installed node-v14.17.0-linux-x64 to /home/developer/.anyenv/envs/nodenv/versions/14.17.0
$ nodenv rehash
$ nodenv versions
14.17.0
docker インストール #
# docker インストールに必要なパッケージをインストール
$ sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common -y
# Docker の公式 GPG キーを追加:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# Docker のリポジトリを追加:
$ set lsb_release_output (lsb_release -cs)
$ echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $lsb_release_output stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 更新
$ sudo apt update
# 場合によっては以下も必要かも
# $ sudo apt list --upgradable
# docker 関連をインストール
$ sudo apt install docker-ce docker-ce-cli containerd.io docker-compose -y
# sudo コマンドなしでdocker使えるようにする
$ sudo gpasswd -a developer docker
Adding user developer to group docker
$ docker --version
Docker version 23.0.0, build e92dd87
# docker ネットワークを設定してく
# デフォルトは 172.17.0.254/24 になっている。必要に応じて変更する
$ sudo emacs /etc/docker/daemon.json -nw
{
"bip": "172.20.0.254/24",
"dns": ["8.8.8.8", "8.8.4.4"], # <--- workspaces の場合は必須で必要。wsl2の場合は不要
"dns-search": ["."] # <--- workspaces の場合は必須で必要。wsl2の場合は不要
}
# 再起動したほうがいい。bip 反映とグループ docker に developer ユーザが反映。$ exec $SHELL -l ではダメっぽい
# developer ユーザでsudoなしでdockerが使えるか確認
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
# docker 設定内容確認
$ docker info
Client: Docker Engine - Community
Version: 24.0.2
Context: default
Debug Mode: false
Plugins:
buildx: Docker Buildx (Docker Inc.)
Version: v0.10.5
Path: /usr/libexec/docker/cli-plugins/docker-buildx
compose: Docker Compose (Docker Inc.)
Version: v2.18.1
Path: /usr/libexec/docker/cli-plugins/docker-compose
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 24.0.2
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Using metacopy: false
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Cgroup Version: 1
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc io.containerd.runc.v2
Default Runtime: runc
Init Binary: docker-init
containerd version: 3dce8eb055cbb6872793272b4f20ed16117344f8
runc version: v1.1.7-0-g860f061
init version: de40ad0
Security Options:
seccomp
Profile: builtin
Kernel Version: 5.15.90.1-microsoft-standard-WSL2
Operating System: Ubuntu 22.04.2 LTS
OSType: linux
Architecture: x86_64
CPUs: 8
Total Memory: 7.662GiB
Name: DESKTOP-S0RR86T
ID: 41428e25-9bbd-4ec9-97f0-5f6161d9d7ee
Docker Root Dir: /var/lib/docker
Debug Mode: false
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
WARNING: No blkio throttle.read_bps_device support
WARNING: No blkio throttle.write_bps_device support
WARNING: No blkio throttle.read_iops_device support
WARNING: No blkio throttle.write_iops_device support
# bip 設定が反映されているか確認
$ ip addr show docker0
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:bb:0e:ac:7d brd ff:ff:ff:ff:ff:ff
inet 172.20.0.254/24 brd 172.20.0.255 scope global docker0
valid_lft forever preferred_lft forever
postgresql インストール #
$ sudo apt install -y postgresql libpq-dev
# 初回ログインしてpostgresのパスワードを変えておく
# ※ 変えておかないと、linuxのpostgresユーザ以外で psql コマンドでログインできない
$ sudo -u postgres psql
# パスワード変更
postgres=# ALTER USER postgres with encrypted password 'password-string';
ALTER ROLE
postgres=# exit;
# linux developer ユーザで psql コマンドでログインできるか試し、アプリ用のユーザとDBを作成
$ psql -U postgres -h localhost
Password for user postgres: password-string
# developer ユーザ追加
# ※シングルクォートをパスワードに使う場合、エスケープ必要(¥)
postgres=# CREATE ROLE developer LOGIN PASSWORD 'password-string';
# ユーザ確認
postgres=> \du
Role name | Attributes | Member of
-----------------+------------------------------------------------------------+-------------------------------------------------------------
developer | | {}
...
# db 生成 権限付与
postgres=> GRANT developer TO postgres;
# db 生成
postgres=> CREATE DATABASE kintetsu_reservation_db WITH ENCODING='UTF8' LC_COLLATE 'C' LC_CTYPE 'C' OWNER=developer TEMPLATE template0;
# db 確認
postgres=> \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-------------------------+-----------+----------+-------------+-------------+-----------------------
kintetsu_reservation_db | developer | UTF8 | C | C |
...
# タイムゾーン設定
postgres=# ALTER DATABASE kintetsu_reservation_db SET timezone TO 'Asia/Tokyo';
# タイムゾーン確認
postgres=> \c kintetsu_reservation_db <--- db切り替え
kintetsu_reservation_db=# show timezone; <--- タイムゾーン確認
TimeZone
------------
Asia/Tokyo
kintetsu_reservation_db=# exit;
# developer ユーザでkintetsu_reservation_dbにログインしてみる
$ psql -h localhost -p 5432 -U developer -d kintetsu_reservation_db
# パスワード入力が面倒なので.pgpassを作成しておく
$ emacs ~/.pgpass
localhost:5432:*:postgres:password-string
localhost:5432:*:developer:password-string
# WARNING: password file "/home/developer/.pgpass" has group or world access; permissions should be u=rw (0600) or less
# といわれるので、600 にしておく
$ chmod 0600 ~/.pgpass
# ログインでパスワードが聞かれないことを確認
$ psql -U postgres -h localhost
postgres=# exit;
$ psql -h localhost -U developer -d kintetsu_reservation_db
kintetsu_reservation_db=> exit;
# アクセス制限をなくしておく
$ sudo emacs /etc/postgresql/[バージョン番号]/main/postgresql.conf -nw
...
listen_addresses = '*' <--- ここ追記
#listen_addresses = 'localhost' # what IP address(es) to listen on;
...
$ sudo emacs /etc/postgresql/[バージョン番号]/main/pg_hba.conf -nw
...
# IPv4 local connections:
host all all 127.0.0.1/32 scram-sha-256
host all all 0.0.0.0/0 md5 <--- ここ追記
...
apache + phpPgAdmin インストール #
- PostgreSQL 14 : phpPgAdmin インストール https://www.server-world.info/query?os=Ubuntu_22.04&p=postgresql&f=4
apache インストール #
!!重要!! PassengerDefaultUser developer を指定して、www-date 以外からアクセスさせるようにするには、対象ユーザのホームディレクトリを755にする必要がある。注意!!! ※これは ubuntu20.04 では発生せず、ubuntu22.04 から発生するので注意
$ sudo chmod 755 /home/developer
- Django mod_wsgi Apache error 403 Forbidden on Ubuntu 22.04 https://stackoverflow.com/questions/72505153/django-mod-wsgi-apache-error-403-forbidden-on-ubuntu-22-04
$ sudo apt install apache2 -y
# 再起動
$ service --status-all
[ - ] apache-htcacheclean
[ + ] apache2 <---------- ここが+になればインストール成功+サービス起動している
[ - ] apparmor
[ + ] apport
[ - ] console-setup.sh
[ + ] cron
[ + ] dbus
[ + ] docker
[ - ] hwclock.sh
[ - ] irqbalance
[ - ] keyboard-setup.sh
[ - ] kmod
[ + ] plymouth
[ + ] plymouth-log
[ + ] postgresql
[ + ] procps
[ - ] rsync
[ - ] screen-cleanup
[ - ] sysstat
[ + ] udev
[ + ] ufw
[ + ] unattended-upgrades
[ - ] uuidd
[ - ] x11-common
# 上記の状態で http://localhost/ にアクセスするとapacheページが表示される。
phpPgAdminインストール #
$ apt -y install phppgadmin php-pgsql
# phpmyadminとは違い、インストール時に設定画面は表示されない
# apache 再起動
$ sudo systemctl restart apache2
# http://localhost/phppgadmin/ にアクセスして、 (サンプルアプリでユーザ:developer, パスワード:password-string でログイン)
- PostgreSQL 14 : phpPgAdmin インストール https://www.server-world.info/query?os=Ubuntu_22.04&p=postgresql&f=4
chrome for ubuntu #
wls2 だと gui が動作するので ubuntu 側にも chrome 入れておくと便利
インストールと初期設定 #
# 適当なディレクトリに移動
$ mkdir tmp
$ cd ~/tmp
# .debダウンロード
$ wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
$ sudo apt install ./google-chrome-stable_current_amd64.deb
# chrome 起動
$ google-chrome
初期状態だとenモードしか動作していないので日本語入力することができない。
以下の手順で、IME 変換できるように fcitx-mozc で対応する
# 更新
$ sudo apt update
# fcitx-mozc インストール
$ sudo apt install fcitx-mozc
# 初回起動させておく。エンターキーで入力制御が返ってくるはず
$ fcitx
# ダイアログが起動するの InputMethod タブで mozc japaneseを追加。Global Config タブでctrl-spaceになっているか確認
$ fcitx-config-gtk3
fish に fcitx を適用する
$ emacs .config/fish/config.fish
# fish config に以下を追加
...
set -x GTK_IM_MODULE fcitx
set -x QT_IM_MODULE fcitx
set -x XMODIFIERS @im=fcitx
if not pgrep -x fcitx >/dev/null
fcitx > /dev/null 2>&1
end
- bash に fcitx を適用する場合
$ emacs ~/.bashrc
export GTK_IM_MODULE=fcitx export QT_IM_MODULE=fcitx export XMODIFIERS=@im=fcitx if ! pgrep -x fcitx >/dev/null; then fcitx > /dev/null 2>&1 fi
設定反映
$ exec $SHELL -l
更新 #
$ sudo apt update
$ sudo apt --only-upgrade install google-chrome-stable
日本語文字化け対応 #
上記設定で日本語入力可能にしても、文字化け(四角文字)が発生する場合は以下を実施すると修正される
$ sudo apt install language-pack-ja
$ sudo apt install fonts-ipafont
$ sudo apt install fonts-ipaexfont
$ fc-cache -fv
# chrome 起動で日本語入力を試す
$ google-chrome
プロキシ対応 #
起動時にプロキシアドレスを設定することで対応できるっぽい。
linuxユーザにproxy設定がされていれば不要な予感
# 単純設定
$ google-chrome --proxy-server=172.17.10.xx:8080
# http,https個別設定
$ google-chrome --proxy-server="http=http://172.17.10.xx:8080;https=http://172.17.10.xx:8080"
証明書追加 #
接続するネットワークの都合で、証明書を追加する必要がある場合は以下の手順で実施する
- Google Chrome を起動し、右上の設定ボタンをクリック
- 「設定(settings)」をクリック
- 画面左側の「プライバシーとセキュリティ(Privacy and security)」を選択
- 表示された画面の「セキュリティ(Security)」をクリック
- 「証明書管理(Manage device certificates)」をクリック
- 「信頼されたルート証明機関(Authorities)」タブ選択
- 左下の「インポート(import)」をクリック
- 証明書のインポートウィザードが起動するので、指示に従って証明書をインポート
単純にファイル選択すると以下の選択肢が表示されるのでwebのにチェック入れる
- Trust this certificate for identifying websites
ウェブサイトの識別にこの証明書を信頼する:このオプションを選択すると、証明書を使用してウェブサイトの身元を確認することができます。つまり、この証明書を持つウェブサイトは、証明書に記載されている組織や個人によって運営されているとブラウザは認識 - Trust this certificate for identifying email users
メールユーザーの識別にこの証明書を信頼する:このオプションを選択すると、証明書を使用してメールの送信者の身元を確認することができます。つまり、この証明書を持つメールの送信者は、証明書に記載されている組織や個人であるとブラウザは認識 - Trust this certificate for identifying software makers
ソフトウェアメーカーの識別にこの証明書を信頼する:このオプションを選択すると、証明書を使用してソフトウェアの製作者の身元を確認することができます。つまり、この証明書を持つソフトウェアは、証明書に記載されている組織や個人によって作成されたとブラウザは認識
- Trust this certificate for identifying websites
- 【コマンドだけで一番楽】ubuntu 20.04LTS にChromeをインストール
https://inno-tech-life.com/dev/linux/ubuntu_chrome/