LoginSignup
5
3

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-12-02

ConoHa Advent Calender 2020 を書くにあたって、なににしようかなと悩みましたが、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して配置する。

ホームディレクトリに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@Linux です。

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

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

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

tmuxないけど : pymux

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

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

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

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

"/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

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ライフを。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3