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

複数のm2tsファイルを結合して1つにする方法

1以下のようにMPEG ts(トランスポートストリーム)ファイルを結合するだけで結合できると思います。

$ cat file1.m2ts file2.m2ts file3.m2ts > output.m2ts

しかし、 前述のcatでの結合は一般的に機能しますが、タイムコードの問題により、一部のメディアプレーヤーで問題が発生する可能性があります。

そのため、次のようにffmpegを使った方が良いです。

$ ffmpeg -i concat:file1.m2ts|file2.m2ts|file3.m2ts -c copy output.m2ts

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を再構築する” の続きを読む