WSLのUbuntu 20.04を22.04にアップグレードする

まず、現在のバージョンを確認します。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.5 LTS
Release:        20.04
Codename:       focal

現在のバージョンにおける最新パッケージにアップグレードしておきます。

$ sudo apt update
$ sudo apt upgrade
$ sudo apt autoremove

Powershellを起動してWSLを停止します。

PS C:\> wsl -l -v
PS C:\> wsl --terminate Ubuntu

Ubuntuを再起動してから、次のコマンドを実行します。

$ sudo do-release-upgrade

アップグレードが完了したら念のため現在のバージョンを確認します。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.2 LTS
Release:        22.04
Codename:       jammy

UbuntuにPythonコマンドが無い場合

WSL上のUbuntuにpythonコマンドがありませんでした。

$ ls -l /usr/bin/python*
lrwxrwxrwx 1 root root       9  3月 13  2020 /usr/bin/python3 -> python3.8
-rwxr-xr-x 1 root root 5490448  3月 15 21:22 /usr/bin/python3.8

python3コマンドはあったので手動でリンクを貼ろうかとも考えたんですが、調べたら次のようなパッケージがありました。
インストールしてみました。

$ sudo apt install python-is-python3
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
  python-is-python3

以下略

すると、無事pythonコマンドのリンクが貼られてました。

$ ls -l /usr/bin/python*
lrwxrwxrwx 1 root root       7  4月 15  2020 /usr/bin/python -> python3
lrwxrwxrwx 1 root root       9  3月 13  2020 /usr/bin/python3 -> python3.8
-rwxr-xr-x 1 root root 5490448  3月 15 21:22 /usr/bin/python3.8

Macでスクリーンキャプチャーの保存先を変更する

Macでは以下の方法でスクリーンキャプチャーをすることができます。

全画面キャプチャー

- Command+Shift+3

任意の範囲を指定してキャプチャー

1. Command+Shift+4
2. カーソルが変わるので、キャプチャーしたい範囲をマウスで指定→即キャプチャー

各ウィンドウのキャプチャー

1. Command+Shift+4
2. カーソルが変わるので、キャプチャーしたいウィンドウに移動
3. Spaceを押してウィンドウを選択。カーソルがカメラに変わる。
4. マウスの左クリック

すると、デスクトップにキャプチャーした画像が保存されます。

しかし、デスクトップに画像を保存したくない場合があると思います。
この場合は、ターミナルを開いて、次のコマンドを実行します。

~/Downloadsに保存する場合

$ defaults write com.apple.screencapture location ~/Downloads
$ killall SystemUIServer

元に戻したい場合は、

$ defaults delete com.apple.screencapture location
$ killall SystemUIServer

と実行すればデスクトップに保存されます。

CentOSにEPELやRepoForge(旧RPMForge)リポジトリを追加する

CentOSには結構な数のパッケージが標準で用意されていますが、それでも足りないパッケージはあります。
ソースを持ってきてコンパイルするのも面倒って時は、EPEL(Extra Packages for Enterprise Linux)RepoForgeのリポジトリを追加すると便利です。

追加方法は簡単で、次のコマンドで追加できます。

CentOS6の場合

$ sudo yum install http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm
$ sudo yum install http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86\_64.rpm

※CentOS6以外は上記の公式HPにOS毎の*-releaseファイルへのリンクがあるので、そちらを参照してください。

これでEPELやRepoForgeからパッケージをyumコマンドで追加できるようになりましたが、このままだと標準のパッケージを追加したいのに不用意にパッケージを追加してしまう可能性があります。
このため、

$ sudo vi /etc/yum.repos.d/epel.repo
$ sudo vi /etc/yum.repos.d/rpmforge.repo

上記のファイルをそれぞれ開いて

enabled=1

となっている箇所を

enabled=0

に変更しておきます。
これで、yumを使っても勝手にインストールされることは無くなりました。

もし、EPELやRepoForgeからパッケージを追加したくなった時は、

$ sudo yum install パッケージ名 –enablerepo=epel,rpmforge

とenablerepoを付ければ一時的に指定したリポジトリが有効になります。

SSHでPermission Deniedになる場合

sshでサーバへ接続しようとすると、

Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

このようなエラーが表示されて接続できない時がある。

偉い人がこちらで対策を纏めてくれてるけど、パーミッションを見直しても間違っていない。

これで、結構悩みました。

ssh -v(もしくは-vvvなど)を実行してみましたが、

略
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /Users/hogehoge/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 279
debug1: Authentication succeeded (publickey).
略

となるはずが、

略
debug1: Offering RSA public key: /Users/hogehoge/.ssh/id_rsa
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic
debug1: Trying private key: /Users/hogehoge/.ssh/id_dsa
debug1: Trying private key: /Users/hogehoge/.ssh/id_ecdsa
debug1: Trying private key: /Users/hogehoge/.ssh/id_ed25519
debug1: No more authentication methods to try.
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

となって、接続できない。

この場合、サーバCent OS6系だと/etc/sshもしくは、~/.sshなどをls -lしてみてください。

# ls -l /etc/ssh/
-rw-r–r–. 1 root root 2047 8月 13 18:58 2015 ssh_config
略
-rw——- 1 root root 3870 2月 13 17:37 2016 sshd_config

パーミッションの後に「.」があるファイルとないファイルがある場合があります。
これは、ファイルがSELinuxで管理されていることを示しています。

私の場合、元のサーバから設定ファイルをコピーしてきたので、サーバのSELinuxが有効なまま、適切に設定されていないファイルが混じってしまい、sshdがファイルを読めなくなっていました。

対策としては、いろいろのあると思うのですが、

# vi /etc/sysconfig/selinux
SELINUX=disabled

などとして、SELinuxを無効にすると接続できるようになると思います。
もしくはls -lして.がついてるファイルに対して適切に設定してください。

pyenvのインストール

pythonのバージョンを簡単に使い分けられるように、まずはpyenvをインストールします。

pyenvのインストール


Macの場合

pyenvのインストールはMacの場合はHomebrewを使うと簡単にインストールできるので、それを利用します。
Homebrewについてはこちらをご覧ください。

brew install pyenv

また、pyenvに加えて、複数の環境をパッケージ構築できるvirtualenvもインストールしておきます。

brew install pyenv-virtualenv

Linuxの場合

以下のコマンドでGithubからダウンロードします。

$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv

インストール後の設定

インストールが完了したら、以下の内容を.profile(もしくは.bashrc等)に追加します。

# for pyenv
export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

以下のコマンドでシェルを再起動すればpyenvコマンドが使えるようになっていると思います。

exec "$SHELL"

pythonのインストールのためのパッケージを追加

Ubuntuの場合、pythonのインストールのためには次のコマンドで開発用パッケージをインストールします。

$ sudo apt install build-essential gdb lcov pkg-config \
libbz2-dev libffi-dev libgdbm-dev  libgdbm-compat-dev liblzma-dev \
libncurses5-dev libreadline6-dev libsqlite3-dev libssl-dev \
lzma lzma-dev tk-dev uuid-dev zlib1g-dev

pyenvによるpythonのインストール

pyenvを使ってpythonをインストールするには、先にpyenvを最新にアップデートしておきます。

$ pyenv update

これによりインストールできるpythonのバージョンなどが最新になります。

インストールできるバージョンを確認するには

$ pyenv install -l
Available versions:
  2.1.3
  2.2.3
  2.3.7
  2.4.0
  2.4.1
  略

とすることでインストールできるバージョンが一覧表示されます。
この中からインストールしたいバージョンを見つけたら、

$ pyenv install 3.9.13

の様に実行すると指定されたバージョンがインストールされます。

Pythonインストール時にオプションを指定する

pyinstallerなどを使おうと思ったら、

$ pyinstaller cmd.py --onefile
84 INFO: PyInstaller: 5.1
84 INFO: Python: 3.9.7
98 INFO: Platform: Linux-4.4.0-22000-Microsoft-x86_64-with-glibc2.31
略
OSError: Python library not found: libpython3.9mu.so.1.0, libpython3.9m.so, libpython3.9m.so.1.0, libpython3.9.so, libpython3.9.so.1.0
    This means your Python installation does not come with proper shared library files.
    This usually happens due to missing development package, or unsuitable build parameters of the Python installation.

    * On Debian/Ubuntu, you need to install Python development packages:
      * apt-get install python3-dev
      * apt-get install python-dev
    * If you are building Python by yourself, rebuild with `--enable-shared` (or, `--enable-framework` on macOS).

といった感じオプションつけて再構築しろと言われました。
この場合は、上記のように単にinstallするだけじゃなく、

env PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 3.9.13

といった感じで実行するとオプションを指定してインストールすることが出来ます。

CentOSにてIPv6を無効にするには

CentOSではIPv6が有効になっているため、ifconfigを実行すると次のようにリンクローカルのアドレスが設定されていることが分かります。

eth0 Link encap:Ethernet HWaddr 52:xx:09:00:xx:02

inet addr:xxx.xxx.xxx.xxx Bcast:xxx.xxx.xxx.255 Mask:255.255.255.0

inet6 addr: fe80::xxxx:xxxx:fe00:xxxx/64 Scope:Link ←この部分

無効にするには、まず /etc/sysconfig/networkに次の行を追加します。

NETWORKING_IPV6=no

次のようにして/etc/modprobe.d/disable-ipv6.confを追加します。

sudo echo “options ipv6 disable=1 ” > /etc/modprobe.d/disable-ipv6.conf

また、ip6tablesは不要になるので自動起動を無効にします。

sudo /sbin/chkconfig ip6tables off

以上を設定した後で再起動するとIPv6が無効になります。

/sbin/ifconfig -a

を実行し、インターフェースにIPv6のアドレスが設定されていなければOKです。

追記:
CentOS7では、上記の方法で出来ませんでした。
CentOS7では、

echo “net.ipv6.conf.all.disable_ipv6 = 1” > /etc/sysctl.d/disableipv6.conf

上記のコマンドを実行後、再起動すると無効にできました。
もしかしたら、同様の方法でCentOS6でも無効化できるのかもしれませんが、試していません。

CD-ROM(DVD)がマウント出来なくなったら

cdromをマウントしようとしたら、

# mount /dev/cdrom /mnt
mount: unknown filesystem type 'iso9660'

といったエラーがでてマウント出来ないことがあると思います。

この場合、正しくモジュールがロード出来ていない可能性があります。
まずは、

# uname -a
Linux localhost.localdomain 3.10.0-229.20.1.el7.x86_64
#1 SMP Tue Nov 3 19:10:07 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

を実行して、現在のカーネルのバージョンを確認します。
そして、以下の場所にあるisofsモジュールをinsmodするとマウント出来るようになりました。

# insmod /lib/modules/3.10.0-229.20.1.el7.x86_64/kernel/fs/isofs/isofs.ko
# mount /dev/cdrom /mnt
mount: block device /dev/sr0 is write-protected, mounting read-only

UUIDを調べてfstabを再構築する

最近のCentOSなどでは以下のようなfstabになっていると思います。

/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=e01eb23e-f456-7a89-0b1c-23a4df5c6fd7 /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0

たまにfstabが壊れる時があると思いますが、再構築しようとするとUUIDを調べる必要が出てきます。


CentOSの場合、以下のコマンドでUUIDを調べることができます。

“UUIDを調べてfstabを再構築する” の続きを読む

emacsの使い方

起動時にはホームディレクトリ直下にある.emacsファイルが読み込まれる。
scratchバッファ(左下にscratchと表示されるバッファ)上で、コマンドを入力しCtrl-Jを押すと結果が表示される。
都度、Ctrl-Jを押すのが面倒な場合は、 M-x ielm と入力すると、シェルっぽいのが開く。

全般操作

キー入力 コマンド名 動作
C-g keyboard-quit コマンドの中断、アンドゥの方向を変える
C-x C-c save-buffers-kill-terminal emacsの終了
eval-current-buffer 設定ファイル(.emacs)の再読み込み

ファイル操作

キー入力 コマンド名 動作
C-x C-f find-file ファイルを開く
C-x i insert-file 別のファイルを挿入する
C-x C-v find-alternate-file 別のファイルを開く
C-x C-k バッファ名 kill-buffer バッファを閉じる
C-x C-b list-buffers バッファの一覧を表示
C-x C-s save-buffer バッファの保存
C-x C-w write-file 別名でファイルを保存

バッファメニューによるバッファ操作

キー入力 コマンド名 動作
C-x C-b list-buffers バッファの一覧を表示
d/k Buffer-menu-delete バッファに削除マークを付ける
s Buffer-menu-save バッファに保存マークを付ける
x Buffer-menu-execute マーク付けされたバッファを削除/保存する

編集

キー入力 コマンド名 動作
C-@ or C-SPC set-mark-command リージョン(選択範囲)の開始位置(マーク)を設定
C-w kill-region リージョン(選択範囲)をキル(カット)する
M-w kill-ring-save リージョン(選択範囲)をコピーする
C-y yank 最後にキルした内容をヤンク(ペースト)する
C-_ or C-x u undo 直前の変更を取り消し
C-s isearch-forward 下方向へ文字列を検索
C-r isearch-backward 上方向へ文字列を検索
C-u 文字数 C-x TAB 選択したリージョンに対して指定した文字数分インデントする。マイナスの文字数(-4とか)を指定すると逆方向にインデントする

ウィンドウ(OSの1つのウィンドウ内での枠)操作

キー入力 コマンド名 動作
C-x 3 split-window-horizontally ウィンドウを左右に分割
C-x 2 split-window-vertically ウィンドウを上下に分割
C-x 1 delete-other-window ウィンドウ分割を解除
C-x 0 delete-window 選択されたウィンドウの削除
C-x o other-window 次のウィンドウにカーソルを移動

フレーム(OSのウィンドウに相当)操作

キー入力 コマンド名 動作
C-x 5 2 make-frame 新しいフレームの作成
C-x 5 1 delete-other-frames 他の全てのフレームを削除
C-x 5 0 delete-frame 現在のフレームを削除
C-x 5 o other-frame 別のフレームに移動

キーバインド

キー入力 コマンド名 動作
C-h k describe-key 入力されたキーバインドの説明を表示
C-h a apropos-command 入力された文字列が含まれているコマンド一覧を表示
C-h b describe-bindings 現在のキーバインド一覧を表示

カーソル移動

キー入力 コマンド名 動作
C-p previous-line カーソルを1行上に移動
C-n next-line カーソルを1行下に移動
C-f forward-char カーソルを1文字右に移動
C-b backward-char カーソルを1文字左に移動
C-a beginning-of-line 行の先頭へと移動
C-e end-of-line 行の末尾へと移動
C-v scroll-up 下方向へと縦スクロール
M-v scroll-down 上方向へと縦スクロール
M-< beginning-of-buffer バッファの先頭へと移動
M-> end-of-buffer バッファの末尾へと移動

文字コードを変換して再読み込み

キー入力 コマンド名 動作
C-x RET c universal-coding-system-argument 文字コードを変更する(例:utf-8-unix)