ConoHa WING CLIあれこれ (WP cli, Linuxbrew, pymux)

[ConoHa Advent Calender 2020](https://qiita.com/advent-calendar/2020/conoha) を書くにあたって、なににしようかなと悩みましたが、ConoHa WINGについて書くことにしました。

私は、webの置き場所としてや、sshfsのストレージとして、またssh terminalでのちょいとコマンド実行できるLinux環境として活用しています。

ConoHa WINGでせっかくssh/sftpがあるのだからと、VPSの補助用の環境として使っています。
雑多に、私が使っているCLI関係の話を 2020/12/2 の記事にしようとか思います。


## ConoHa WINGとはどんな環境なの?

ConoHa Cloud VPSでは、VMを作ってwebを動かすまで色々設定が必要だったりするが、ConoHa WINGではすぐにwebサーバとして、メールサーバとして使える機能がホスティングサービスとして提供されていますね。

とくに、WordPressを簡単に運用することにかなり注力されていることが、コントロールパネルのweb GUIに見て取れます。

ConoHa WINGはどんなOSで動いているのか?
"uname -a" をみると、収容されているサーバごとに若干変わってはきていますが、下記のような情報が取得できます。

```
[cXXXXX7@web0007 ~]$ uname -a
Linux web0007.sh.tyo1 3.10.0-714.10.2.lve1.5.17.1.el7.x86_64 #1 SMP Tue May 22 10:39:25 EDT 2018 x86_64 x86_64 x86_64 GNU/Linux
```

"el7"と見えてピンときた人は、多いと思います。

現行、sshでloginできるwebホスティングの環境は、CentOS7.x ベースの環境であることが確認できます。また、x86_64の実行環境であることもわかります。

このカーネルのバージョン "3.10.0-714.10.2.lve1.5.17.1.el7.x86_64" でGoogle検索すると、ユーザごとにコンテナ技術でリソース隔離(lve)とJailing技術(cagefs)が各ユーザごとに適用可能な、ホスティング用のOSであるCloudLinuxのKernelパッケージであることがわかります。

自分が借りているサーバについては、kernelについては、7.4と7.5の間ぐらいのbuildがベースになっているようですね。
(契約した環境によって異なるのではないかと思います)

* CentOS 7.4.1708 : kernel-3.10.0-693.el7.src.rpm (installer のkernel src.rpm)
* CentOS 7.5.1804 : kernel-3.10.0-862.el7.src.rpm (installer のkernel src.rpm)

つまり、以下の条件が揃えば、ssh環境のCLIなどの環境を充実させることができることになります。

* el7ということで、CentOS7で動くバイナリなら持ち込んでも動きそう
* バイナリ持ち込みするときには、staticなものか、dynamicなものはライブラリパスが通す必要がある


## ConoHa WING で wp CLIを使う

まずは、すでに入っているphpを活用する方法。

ConoHa WING は かなりWordPressの運用を簡単にすることに注力して、コンパネのweb画面が作られていますが、WordPressのCLIを入れることで、cronなどの自動実行により、スクリプト実行などもできるかなと。

phar版の "wp-cli.phar" をcurlでdownloadする

```
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
```

実行権限をつける("chmod +x")
入れるのは"$HOME/bin"にいれます

```
chmod +x wp-cli.phar
mkdir bin
mv wp-cli.phar bin

cd bin
ln -s wp-cli.phar wp
```

### "--path" オプションを入れれば使える

ConoHa WINGで自分のWordPressがインストールされているpath(相対パス、または絶対パス)まで指定することで、その中のWordPressのphpから読み取ってくれる。

WordPressのversion取得

```
[c6xxxxxx@web0007 ~]$ wp --path=$HOME/public_html/coha.tw core version
5.5.3
```

WordPessでサイトを複製するために、exportを取得するなどもCLIで可能となります。

```
c6xxxxxx@web0007 ~]$ wp --path=$HOME/public_html/coha.tw export
Starting export process...
Writing to file /home/c6xxxxxx/cohacloudopshackers.wordpress.2020-11-17.000.xml
Success: All done with export.
```

pluginの管理など、WordPressのWeb GUIからだと、ポチポチ押して、選択してupdateみたいな煩雑な作業は、CLIで簡単にできるのかなと思います。

```
[c6xxxxxx@web0007 ~]$ wp --path=public_html/coha.tw plugin
usage: wp plugin activate [<plugin>...] [--all] [--network]
   or: wp plugin deactivate [<plugin>...] [--uninstall] [--all] [--network]
   or: wp plugin delete [<plugin>...] [--all]
   or: wp plugin get <plugin> [--field=<field>] [--fields=<fields>] [--format=<format>]
   or: wp plugin install <plugin|zip|url>... [--version=<version>] [--force] [--activate] [--activate-network]
   or: wp plugin is-active <plugin>
   or: wp plugin is-installed <plugin>
   or: wp plugin list [--<field>=<value>] [--field=<field>] [--fields=<fields>] [--format=<format>]
   or: wp plugin path [<plugin>] [--dir]
   or: wp plugin search <search> [--page=<page>] [--per-page=<per-page>] [--field=<field>] [--fields=<fields>] [--format=<format>]
   or: wp plugin status [<plugin>]
   or: wp plugin toggle <plugin>... [--network]
   or: wp plugin uninstall [<plugin>...] [--deactivate] [--skip-delete] [--all]
   or: wp plugin update [<plugin>...] [--all] [--exclude=<name>] [--minor] [--patch] [--format=<format>] [--version=<version>] [--dry-run]
   or: wp plugin verify-checksums [<plugin>...] [--all] [--strict] [--format=<format>]

See 'wp help plugin <command>' for more information on a specific command.
```

これにより、たとえば、plugin listは下記のように取得できる

```
[c6xxxxx@web0007 ~]$ wp --path=public_html/coha.tw plugin list
+------------------------+----------+-----------+---------+
| name                   | status   | update    | version |
+------------------------+----------+-----------+---------+
| akismet                | inactive | none      | 4.1.7   |
| conoha-wing-plugin     | active   | none      | 1.0     |
| cache-clear-conoha     | active   | none      | 1.0.0   |
| manage-xml-rpc         | inactive | none      | 1.0     |
| siteguard              | inactive | available | 1.5.0   |
| ts-webfonts-for-conoha | inactive | none      | 1.0.2   |
| wp-multibyte-patch     | inactive | available | 2.8.4   |
+------------------------+----------+-----------+---------+
```

これについては、ホストのphpに依存しているところがあるので、phpのバージョンが上がったりすると、wp CLIの方もupgradeしないとだめなので、運用には注意も必要です。


### wp コマンドをbashで補完してもらう

wp CLIコマンドのbasでの補完(completion)も入れておこう。

以下のURLがgithubのwp CLIのgit masterブランチの直リンクなので、curlなどでdownloadして配置する。

* [https://raw.githubusercontent.com/wp-cli/wp-cli/master/utils/wp-completion.bash](https://raw.githubusercontent.com/wp-cli/wp-cli/master/utils/wp-completion.bash)

ホームディレクトリにetcとか作って

```
[c6xxxxxx@web0007 ~]$ mkdir ~/etc
```

curlでダウンロード

```
[c6xxxxx@web0007 ~]$ curl -o etc/wp-completion.bash https://raw.githubusercontent.com/wp-cli/wp-cli/master/utils/wp-completion.bash
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   495  100   495    0     0   1544      0 --:--:-- --:--:-- --:--:--  1546

[c6xxxxxx@web0007 ~]$ file etc/wp-completion.bash
etc/wp-completion.bash: ASCII text
```

bash で読み込むようにする

```
[c6xxxxxx@web0007 ~]$ echo 'source $HOME/etc/wp-completion.bash' >> .bashrc

[c6xxxxxx@web0007 ~]$ grep wp-completion .bashrc
source $HOME/etc/wp-completion.bash
```

これで、ログインし直すか、手動で下記のように実行して読み込みすればbashでのコマンドライン補完が効くようになる

```
source $HOME/etc/wp-completion.bash
```


## Linux Homebrew for ConoHa WING (brew だめらしい)

Homebrew 2.0 から Linuxbrew と統合されてしまってから、Linuxbrew は殆どの少し古い環境では動作しなくなってしまいました。

CentOS7.xでは、まだ動く環境がある(bottleでちゃんとインストールされる)ので、ちょっとConoHa WINGで動かないのは残念である(Hackしたい)。

git clone で 以下のようにインストールすると次のようになる。
だが、glibc問題により、最終的には動かないので、"だめらしい"ということなのです。

ssh loginして、git clone

```
n-gohko@$ ssh wing
Warning: No xauth data; using fake authentication data for X11 forwarding.
X11 forwarding request failed on channel 0

[c6xxxxxx@web0007 ~]$ git clone https://github.com/Homebrew/brew ~/.linuxbrew/Homebrew
Cloning into '/home/c6xxxxxx/.linuxbrew/Homebrew'...
remote: Enumerating objects: 46, done.
remote: Counting objects: 100% (46/46), done.
remote: Compressing objects: 100% (37/37), done.
remote: Total 159587 (delta 18), reused 26 (delta 8), pack-reused 159541
Receiving objects: 100% (159587/159587), 40.87 MiB | 10.78 MiB/s, done.
Resolving deltas: 100% (118219/118219), done.
```

binを設定

```
[c6xxxxxx@web0007 ~]$ mkdir .linuxbrew/bin
[c6xxxxxx@web0007 ~]$ ln -s ~/.linuxbrew/Homebrew/bin/brew ~/.linuxbrew/bin
```

brewを環境設定して、rubyが無いので、最初にbottleのportable-rubyが入る。

```
[c6xxxxxx@web0007 ~]$ eval $(~/.linuxbrew/bin/brew shellenv)
[c6xxxxxx@web0007 ~]$ brew
which: no ruby in (/usr/bin:/bin:/usr/sbin:/sbin)
==> Downloading https://linuxbrew.bintray.com/bottles-portable-ruby/portable-ruby-2.6.3_2.x86_64_linux.bottle.tar.gz
######################################################################## 100.0%
==> Pouring portable-ruby-2.6.3_2.x86_64_linux.bottle.tar.gz
Example usage:
  brew search [TEXT|/REGEX/]
  brew info [FORMULA...]
  brew install FORMULA...
  brew update
  brew upgrade [FORMULA...]
  brew uninstall FORMULA...
  brew list [FORMULA...]

Troubleshooting:
  brew config
  brew doctor
  brew install --verbose --debug FORMULA

Contributing:
  brew create [URL [--no-fetch]]
  brew edit [FORMULA...]

Further help:
  brew commands
  brew help [COMMAND]
  man brew
  https://docs.brew.sh
```

brew updateなどを走らせると、不完全であることがわかります。

```
[c6xxxxxx@web0007 ~]$ brew update                                                                                                                                                                      [64/295]
==> Tapping homebrew/core
Cloning into '/home/c6xxxxxx/.linuxbrew/Homebrew/Library/Taps/homebrew/homebrew-core'...
remote: Enumerating objects: 781, done.
remote: Counting objects: 100% (781/781), done.
remote: Compressing objects: 100% (375/375), done.
remote: Total 1025061 (delta 452), reused 588 (delta 406), pack-reused 1024280
Receiving objects: 100% (1025061/1025061), 362.50 MiB | 22.39 MiB/s, done.
Resolving deltas: 100% (714080/714080), done.
Tapped 2 commands and 5376 formulae (5,660 files, 400.2MB).
==> Downloading https://linuxbrew.bintray.com/bottles/patchelf-0.11.x86_64_linux.bottle.tar.gz
```

<<中略>>
最後にglibcを入れようとする。

```
==> Downloading from https://akamai.bintray.com/
==> Installing curl dependency: glibc
==> ../configure --disable-debug --disable-dependency-tracking --disable-silent-rules --prefix=/home/c6xxxxxx/.linuxbrew/Cellar/glibc/2.23 --enable-obsolete-rpc --without-selinux --with-binutils=/home/c68194
Last 15 lines from /home/c6xxxxxx/.cache/Homebrew/Logs/glibc/01.configure:
2020-11-17 15:10:27 +0900

../configure
--disable-debug
--disable-dependency-tracking
--disable-silent-rules
--prefix=/home/c6xxxxxx/.linuxbrew/Cellar/glibc/2.23
--enable-obsolete-rpc
--without-selinux
--with-binutils=/home/c6xxxxxx/.linuxbrew/opt/binutils/bin
--with-headers=/home/c6xxxxxx/.linuxbrew/opt/linux-headers/include
```

ここで、失敗してしまいます。

homebrew at Linux (2.0 or lator)を、ConoHaWINGで使うのは無理そうです。

glibcを別バージョンでインストールして、brewを再構築しようとしてしまうため、Host OSに入っているglibcとバッティングして最終的にはエラーになります。

ConoHa WINGでHostにはgccが導入されているので、コンパイルなどは可能である。

```
[c6xxxxxx@web0007 ~]$ gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
```

以前は、下記のようにglibcを除外してインストールなどができたのですが、最近はできなさそうです。

  brew install gcc --without-glibc

* 参考:
  *  [Homebrew(Linuxbrew)でELF: x: Errorが再発(26 Nov 2019) 
 https://rcmdnk.com/blog/2019/11/26/computer-linux-homebrew/](https://rcmdnk.com/blog/2019/11/26/computer-linux-homebrew/)

ということで、今後動くようになったらいいな、Homebrew@Linux です。


### Homebrew Linux for ConoHa WING 今後の検証方針

* gccなど同じような環境をCentOS7で作ってbinaryをrsync
  * 何もしないで、Linux上でHomebrewを入れると、glibcが入ってしまう
  * "--force-bottle" オプションでも、bottleとして glibcが必要な状態になる

これから、linuxbrew-legacy が githubでArchiveされてるので、そちらをforkしてちょっと研究してみようかと思います。

* https://github.com/Linuxbrew/legacy-linuxbrew
  * 5年前に停止もっと古い 
* https://github.com/Linuxbrew/brew
  * 2年前停止、こちらのときには、動いていた気がする

* ref: 
  * [Linuxbrew改めHomebrew@Linuxでrelocation errorに対する対処法(08 May 2019) | https://rcmdnk.com/blog/2019/05/08/computer-linux-homebrew/](https://rcmdnk.com/blog/2019/05/08/computer-linux-homebrew/)  
  * [https://gist.github.com/anonymous/27dcd5acdf5d906e811b47e35897177d](https://gist.github.com/anonymous/27dcd5acdf5d906e811b47e35897177d)
  * [https://gist.github.com/anonymous/a19fac9acdcb4c9a2b7703fabd43f464](https://gist.github.com/anonymous/a19fac9acdcb4c9a2b7703fabd43f464)
  * [https://gist.github.com/anonymous/760a2f887eaf22194f71148de5b9f3b0](https://gist.github.com/anonymous/760a2f887eaf22194f71148de5b9f3b0)


## tmuxないけど : pymux

ssh terminalで使っているときに、突然のssh 切断などで作業が中断するしんどい思いはしたくないですよね。

Linuxbrewが使えれば、tmux を入れるところですが、上記な理由で使えないのです。

ただ、ConoHa Wingも共用ホスティングであり、リソースをユーザ間で共有するプランだったりすると、bot掃除でkillされるかもしれないので、そのあたりは長時間運用にはご注意が必要ですが、PythonのTerminal Multiplexerがありますので、それを使いましょう。

* pypi
  * [https://pypi.org/project/pymux/](https://pypi.org/project/pymux/)

* github
  * [https://github.com/prompt-toolkit/pymux](https://github.com/prompt-toolkit/pymux)


### ConoHa WINGの python環境 を設定

ConoHa WING のpythonは .bashrcにより、"/usr/local/bin" に PATH が通っているために python コマンドで呼ばれるのは、python3.6 となっている。

```
[c6xxxxxx@web0007 ~]$ ls -l /usr/local/bin/
合計 0
lrwxrwxrwx 1 root root 23  2月 26  2020 gem -> /opt/alt/ruby25/bin/gem
lrwxrwxrwx 1 root root 22  7月 23  2018 lsphp -> /etc/cl.selector/lsphp
lrwxrwxrwx 1 root root 28  2月 26  2020 pip -> /opt/alt/python36/bin/pip3.6
lrwxrwxrwx 1 root root 30  2月 26  2020 pydoc -> /opt/alt/python36/bin/pydoc3.6
lrwxrwxrwx 1 root root 31  2月 26  2020 python -> /opt/alt/python36/bin/python3.6
lrwxrwxrwx 1 root root 24  2月 26  2020 rake -> /opt/alt/ruby25/bin/rake
lrwxrwxrwx 1 root root 24  2月 26  2020 rdoc -> /opt/alt/ruby25/bin/rdoc
lrwxrwxrwx 1 root root 24  2月 26  2020 ruby -> /opt/alt/ruby25/bin/ruby
```

この python を手がかりに、pyenv をインストールして、好きなPython環境をインストールしてもらってもよいのだが、とりあえず簡単に、HostのPython3.6を整えて使ってみる。

[[ConoHa WING]ConoHa WING で Anaconda 環境を整える
https://note.com/hyanagisawa/n/nedd7484acd60
](https://note.com/hyanagisawa/n/nedd7484acd60)

"/usr/local/bin" の シンボリックリンクのように、コマンドは "/opt/alt/*" 以下にあるようなので、使いたいバージョンのPATHを通しておきます。

* python 2.7 : /opt/alt/python27/bin
* python 3.6 : /opt/alt/python36/bin

python3.6 の bin配下を確認すると、pip3, pydoc3, pyvenv-3.6 も使えるようにします。

```
[c6xxxxxx@web0007 ~]$ ls -l /opt/alt/python36/bin/
合計 60
-rwxr-xr-x 1 root  995   108  7月  4  2018 2to3-3.6
-rwxr-xr-x 1 root root   247  7月 28  2017 easy_install-3.6
lrwxrwxrwx 1 root  995     7  7月 24  2018 idle3 -> idle3.6
-rwxr-xr-x 1 root  995   106  7月  4  2018 idle3.6
lrwxrwxrwx 1 root root     9  7月 24  2018 pip-3 -> ./pip-3.6
lrwxrwxrwx 1 root root     8  7月 24  2018 pip-3.6 -> ./pip3.6
-rwxr-xr-x 1 root root   219  7月 28  2017 pip3
-rwxr-xr-x 1 root root   219  7月 28  2017 pip3.6
lrwxrwxrwx 1 root  995     8  7月 24  2018 pydoc3 -> pydoc3.6
-rwxr-xr-x 1 root  995    91  7月  4  2018 pydoc3.6
lrwxrwxrwx 1 root  995     9  7月 24  2018 python3 -> python3.6
lrwxrwxrwx 1 root  995     8  7月 24  2018 python3-2to3 -> 2to3-3.6
lrwxrwxrwx 1 root  995    16  7月 24  2018 python3-config -> python3.6-config
-rwxr-xr-x 2 root  995 11384  7月  4  2018 python3.6
lrwxrwxrwx 1 root  995    17  7月 24  2018 python3.6-config -> python3.6m-config
-rwxr-xr-x 2 root  995 11384  7月  4  2018 python3.6m
-rwxr-xr-x 1 root  995   173  7月  4  2018 python3.6m-config
-rwxr-xr-x 1 root  995  3487  7月  4  2018 python3.6m-x86_64-config
lrwxrwxrwx 1 root  995    10  7月 24  2018 pyvenv -> pyvenv-3.6
-rwxr-xr-x 1 root  995   448  7月  4  2018 pyvenv-3.6
```

手動で、下記のコマンドでパスを通すと、python3.6の

```
export PATH=/opt/alt/python36/bin:$PATH
```
.bashrc にも PATH を入れておきます

```
echo 'export PATH=/opt/alt/python36/bin:$PATH' >> $HOME/.bashrc
```

pip3にPATHが通ったことを確認

```
[c6xxxxxx@web0007 ~]$ which pip3
/opt/alt/python36/bin/pip3
```

pipでは、ユーザのHomeにインストールする場合には "--user" オプションを付けると、Linuxでは "$HOME/.local/" 以下にインストールされます。 

pymux をインストールしてみます。

```
[c6xxxxxx@web0007 ~]$ pip3 install --user pymux
Collecting pymux
  Downloading https://files.pythonhosted.org/packages/a8/4a/c9ef8349a3c9d3544ce61314c7ae8561efd233dd429191cb696c4808b5c4/pymux-0.14-py3-none-any.whl (78kB)
    100% |████████████████████████████████| 81kB 5.3MB/s
Collecting six>=1.9.0 (from pymux)
  Downloading https://files.pythonhosted.org/packages/ee/ff/48bde5c0f013094d729fe4b0316ba2a24774b3ff1c52d924a8a4cb04078a/six-1.15.0-py2.py3-none-any.whl
Collecting docopt>=0.6.2 (from pymux)
  Downloading https://files.pythonhosted.org/packages/a2/55/8f8cab2afd404cf578136ef2cc5dfb50baa1761b68c9da1fb1e4eed343c9/docopt-0.6.2.tar.gz
Collecting pyte<0.6.0,>=0.5.1 (from pymux)
  Downloading https://files.pythonhosted.org/packages/5c/0b/f219072567ebcae41211f7c268a36e6d281c3be619984c02653f16ec084c/pyte-0.5.2-py2.py3-none-any.whl
Collecting prompt-toolkit<1.1.0,>=1.0.8 (from pymux)
  Downloading https://files.pythonhosted.org/packages/64/27/5fd61a451d086ad4aa806dc72fe1383d2bc0e74323668672287f616d5d51/prompt_toolkit-1.0.18-py3-none-any.whl (245kB)
    100% |████████████████████████████████| 245kB 4.0MB/s
Collecting wcwidth (from pyte<0.6.0,>=0.5.1->pymux)
  Downloading https://files.pythonhosted.org/packages/59/7c/e39aca596badaf1b78e8f547c807b04dae603a433d3e7a7e04d67f2ef3e5/wcwidth-0.2.5-py2.py3-none-any.whl
Installing collected packages: six, docopt, wcwidth, pyte, prompt-toolkit, pymux
  Running setup.py install for docopt ... done
Successfully installed docopt-0.6.2 prompt-toolkit-1.0.18 pymux-0.14 pyte-0.5.2 six-1.15.0 wcwidth-0.2.5
You are using pip version 9.0.1, however version 20.3 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
[c6xxxxxx@web0007 ~]$
```

以下のようにインストールされています。

```
[c6xxxxxx@web0007 ~]$ ls -l $HOME/.local/bin
合計 5
-rwxr-xr-x 1 c6xxxxxx c6xxxxxx 242 12月  2 21:38 pymux

[c6xxxxxx@web0007 ~]$ ls -l $HOME/.local/
合計 1
drwxr-xr-x 2 c6xxxxxx c6xxxxxx 3 12月  2 21:38 bin
drwx------ 3 c6xxxxxx c6xxxxxx 3 12月  2 21:38 lib

[c6xxxxxx@web0007 ~]$ ls -l $HOME/.local/lib/python3.6/site-packages/
合計 143
drwxr-xr-x  2 c6xxxxxx c6xxxxxx     4 12月  2 21:38 __pycache__
drwxr-xr-x  2 c6xxxxxx c6xxxxxx     7 12月  2 21:38 docopt-0.6.2-py3.6.egg-info
-rw-r--r--  1 c6xxxxxx c6xxxxxx 19946  6月 16  2014 docopt.py
drwxr-xr-x 11 c6xxxxxx c6xxxxxx    35 12月  2 21:38 prompt_toolkit
drwxr-xr-x  2 c6xxxxxx c6xxxxxx     9 12月  2 21:38 prompt_toolkit-1.0.18.dist-info
drwxr-xr-x  5 c6xxxxxx c6xxxxxx    26 12月  2 21:38 pymux
drwxr-xr-x  2 c6xxxxxx c6xxxxxx    10 12月  2 21:38 pymux-0.14.dist-info
drwxr-xr-x  3 c6xxxxxx c6xxxxxx    13 12月  2 21:38 pyte
drwxr-xr-x  2 c6xxxxxx c6xxxxxx     9 12月  2 21:38 pyte-0.5.2.dist-info
drwxr-xr-x  2 c6xxxxxx c6xxxxxx     8 12月  2 21:38 six-1.15.0.dist-info
-rw-r--r--  1 c6xxxxxx c6xxxxxx 34159 12月  2 21:38 six.py
drwxr-xr-x  4 c6xxxxxx c6xxxxxx    10 12月  2 21:38 wcwidth
drwxr-xr-x  2 c6xxxxxx c6xxxxxx     9 12月  2 21:38 wcwidth-0.2.5.dist-info
```

ここにも、PATHを通しておきます。

```
export PATH=$HOME/.local/bin:$PATH
echo 'export PATH=$HOME/.local/bin:$PATH' >> $HOME/.bashrc
```

これで、"tmux" ならぬ "pymux" が実行できます。

使い方は、tmux とコンパチなので、pymux のサイトにて詳細を確認してみてください。

![スクリーンショット 2020-12-02 22.38.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29201/42e55e7f-cb65-51fc-c811-31fa3f5dc5db.png)


pumux セッションを始める

    $ pymux

pymux セッションを中断(dettach)
上記のような pymux が terminalに表示されているときに、

    [Control] b + d

pymux セッションを始める

    $ pymux attach

pymux の複数のセッションを起動している場合
セッションのUnit socket pathの一覧取得

```
[c6xxxxxx@web0007 ~]$ pymux list-sessions
/tmp/pymux.sock.c6819497.3
/tmp/pymux.sock.c6819497.2
```

socketの最後の".2"とか".3"とかが実行番号と思って良いので、それを指定してattach

````
[c6xxxxxx@web0007 ~]$ pymux attach -S /tmp/pymux.sock.c6819497.2
```

ではでは、よいConoHa WINGライフを。