Corredor

ウェブ、プログラミングの勉強メモ。

Oracle Linux 7 に Python 3.7 を入れたかった

Oracle Linux 7 に Python 3.7 系を入れたかったが、結構苦労したのでメモ。Oracle Linux は RedHat Enterprise Linux 系なので、RHEL や CentOS と同様の手順が採用できるはずだが…。

本稿執筆時点で、Yum で直接インストールできる Python は v3.6 系までだった。

ということで、Python v3.7 をソースからビルドしてインストールすることにしたが、make のところで行われるユニットテストが途中で進まなくなり、インストールができなかった。


色々試したがどうにも成功しないので、直接 Python v3.7 を入れることは諦めた。代わりに、ベースとなる Python のバージョンは適当に決めておいて、pipenv などを経由して v3.7 を入れることにする。

Oracle Linux 7 の場合、以下に記載されているとおり、v3.6 なら最初から Yum でインストールできる。

$ yum install -y python3

コレで Python v3.6 が入り、pip3 コマンドも使えるようになる。

$ pip3 install pipenv

で pipenv を入れたが、

$ pipenv --python 3.7

といった要領で Python 本体をインストールできなかった。どうも別途 pyenv を入れないといけないようだ。

pyenv は以下の要領でインストールする。場合によるが、自分はもう root ユーザで作業することにしたので、root ユーザで実施した。

# ホームディレクトリ直下、.pyenv/ ディレクトリに pyenv の資材を落としてくる
$ git clone https://github.com/pyenv/pyenv ~/.pyenv

# 必要事項を .bash_profile に追記する
echo 'export PATH="${HOME}/bin:${PATH}"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"'            >> ~/.bash_profile

source ~/.bash_profile
  • ~/.bash_profile には以下の内容を書いている。
export PATH="${HOME}/.pyenv/bin:${PATH}"
eval "$(pyenv init -)"

コレで pyenv が使えるようになったので、pyenv を使って Python v3.7 をインストールする。

$ pyenv install 3.7.5
$ pyenv global 3.7.5
$ pyenv rehash

# コレで v3.7.5 がインストールでき、アクティブになった
$ python -V

以降は pipenv を使う際も、ココでインストールした Python v3.7 を認識して $ pipenv install --dev とかが動作するようになる。


うーん、なかなか Python は環境構築がしんどいな。やっぱ Docker で隠蔽しちゃうのが楽ね。

独学プログラマー Python言語の基本から仕事のやり方まで

独学プログラマー Python言語の基本から仕事のやり方まで

OCI Always Free Instance に Xfce をインストールして GUI 化する

OCI の Always Free な Compute Instance に Xfce をインストールし、GUI 環境を作る。ベースとなる OS は Oracle Linux 7。

ほぼ以下の記事を参考に作業した。

Compute Instance での作業

順にコマンドだけ掲載する。

# Xfce をインストールする
$ sudo yum groupinstall -y 'X Window System'
$ sudo yum groupinstall -y Xfce

# XRDP をインストールする
$ sudo yum -y install xrdp
$ sudo systemctl enable xrdp
$ sudo systemctl start xrdp

# 日本語フォントをインストールする
$ sudo yum install -y vlgothic-* ipa-gothic-fonts ipa-mincho-fonts ipa-pgothic-fonts ipa-pmincho-fonts

# 日本語入力メソッドをインストールする
$ sudo yum install -y ibus-kkc

# ロケールを日本語に変更する
$ sudo localectl set-locale LANG=ja_JP.UTF-8

# XRDP 接続時に Xfce セッションが起動するようにする
$ cat > '/home/opc/.Xclients' << EOL
#!/bin/bash

export LANG='ja_JP.UTF-8'
export XMODIFIERS='@im=ibus'
export XMODIFIER='@im=ibus'
export GTK_IM_MODULE='ibus'
export QT_IM_MODULE='ibus'
export DefaultIMModule='ibus'
ibus-daemon -drx
exec xfce4-session
EOL

# ファイルに権限を付与する
$ chmod +x '/home/opc/.Xclients'

# opc ユーザにパスワードを設定する (XRDP 用)
$ passwd opc

XRDP を使用して接続するので、Security List で 3389 番ポートへのアクセスを許可しておく。

VM 側の準備ができたら、クライアント PC から接続してみる。

MacOS から RDP 接続する

MacOS の場合は AppStore より「Microsoft Remote Desktop 10」をダウンロードし、以下のように設定する。

  • Hostname : OCI VM の Public IP
  • User Account : 新規作成し「opc」、先程指定したパスワードを入力する

f:id:neos21:20200204213725p:plain

接続時、次のような警告が出るが、構わず進む。

f:id:neos21:20200204213732p:plain

コレで接続できる。

f:id:neos21:20200204213703p:plain

Windows から RDP 接続する

Windows の場合は、標準で入っている「リモートデスクトップ接続」を利用する。

f:id:neos21:20200204213711p:plain

初回接続時にパスワードを入力する。

f:id:neos21:20200204213847p:plain

以下のとおり。

f:id:neos21:20200204213721p:plain

ブラウザをインストールする

このままだとウェブブラウザがないので、デスクトップから「ターミナル」を開き、次のように叩いていく。

# Firefox はデフォルトで入れられる
$ sudo yum install -y firefox

# Chrome は次のようにリポジトリを追加する
$ sudo vi /etc/yum.repos.d/google.chrome.repo
  • /etc/yum.repos.d/google.chrome.repo
[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub
$ sudo yum update -y
$ sudo yum install -y google-chrome-stable

こうすると「ウェブブラウザー」のアイコンから Firefox と Chrome (表記は Chromium) が起動できるようになる。

タスクマネージャ xfce4-taskmanager を入れる

ついでにタスクマネージャも入れておく。ターミナルで以下のようにインストールする。

$ sudo yum install -y xfce4-taskmanager

左上の「アプリケーション」 → システム → タスクマネージャー が追加される。

Chrome なんかのブラウザを開くと、CPU 使用率が 4・50% くらい跳ね上がり、もっさりしすぎて使い物にならない。Windows 95 マシンに Windows Me を入れて頑張っていた頃のようだ…。笑

以上

Always Free インスタンスだとやはりだいぶモッサリするが、出先でとりあえず GUI 環境が欲しくなった時に使える…かも…?

Linux GUIプログラミング入門―UbuntuでLazarusを使ってみよう!

Linux GUIプログラミング入門―UbuntuでLazarusを使ってみよう!

  • 作者:佐納康治
  • 出版社/メーカー: 開成出版(千代田区)
  • 発売日: 2011/03/01
  • メディア: 単行本

CentOS Linux で BitZeny をマイニングしてみる

以前、Monero (XMR) をマイニングするために MinerGate というソフトを Windows・Mac で動かしたりしていた。結果、GeForce GTX1080 では換金ラインまで貯めるのがしんどすぎて止めてしまった。

GPU マイニングはしんどいので、CPU でマイニングができるという BitZeny という暗号通貨をマイニングしてみた。コチラも旬は過ぎているのだが、お試しということで。

BitZeny Wallet を登録する

まずは BitZeny を保管するオンライン・ウォレットを作成する。

ウォレットアドレスが入手できたら、以下の Faucet でウォレットがちゃんと使えるか試してみよう。

LA BitZeny Pool に登録する

続いて、BitZeny のマイナープールで有名な LA Pool に登録する。

アカウント登録後、「Worker」を作成する。コレは、マイニングを行っているマシンを識別するための情報で、マシンごとに任意の

  • Worker Name
  • Worker Password

を作成する。今回はとりあえず1つ作っておけば良いだろう。

CentOS Linux に CPU Miner をインストールする

BitZeny を CPU マイニングするための CPU Miner というツールを、CentOS Linux にインストールしていく。

# 以降 root ユーザで作業する
$ sudo su -

# 事前に必要なパッケージをインストールする
$ yum update -y
$ yum install -y git gcc automake autoconf libcurl-devel openssl-devel jansson-devel gawk

# CPU Miner をダウンロードしてくる
$ git clone https://github.com/bitzeny/cpuminer cpuminer
$ cd cpuminer/

# セットアップしていく
$ ./autogen.sh
configure.ac:15: installing './compile'
configure.ac:4: installing './config.guess'
configure.ac:4: installing './config.sub'
configure.ac:6: installing './install-sh'
configure.ac:6: installing './missing'
Makefile.am:12: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
Makefile.am: installing './INSTALL'
Makefile.am: installing './depcomp'

$ ./configure
checking build system type... x86_64-unknown-linux-gnu
# …中略…
checking for curl_free... yes
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
config.status: creating compat/Makefile
config.status: creating compat/jansson/Makefile
config.status: creating cpuminer-config.h
config.status: executing depfiles commands

$ make
make  all-recursive
make[1]: Entering directory `/root/cpuminer'
Making all in compat
make[2]: Entering directory `/root/cpuminer/compat'
make[3]: Entering directory `/root/cpuminer/compat'
make[3]: Nothing to be done for `all-am'.
make[3]: Leaving directory `/root/cpuminer/compat'
make[2]: Leaving directory `/root/cpuminer/compat'
make[2]: Entering directory `/root/cpuminer'
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -pthread -fno-strict-aliasing     -g -O2 -MT minerd-cpu-miner.o -MD -MP -MF .deps/minerd-cpu-miner.Tpo -c -o minerd-cpu-miner.o `test -f 'cpu-miner.c' || echo './'`cpu-miner.c
mv -f .deps/minerd-cpu-miner.Tpo .deps/minerd-cpu-miner.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -pthread -fno-strict-aliasing     -g -O2 -MT minerd-util.o -MD -MP -MF .deps/minerd-util.Tpo -c -o minerd-util.o `test -f 'util.c' || echo './'`util.c
mv -f .deps/minerd-util.Tpo .deps/minerd-util.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -pthread -fno-strict-aliasing     -g -O2 -MT minerd-sha2.o -MD -MP -MF .deps/minerd-sha2.Tpo -c -o minerd-sha2.o `test -f 'sha2.c' || echo './'`sha2.c
mv -f .deps/minerd-sha2.Tpo .deps/minerd-sha2.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -pthread -fno-strict-aliasing     -g -O2 -MT minerd-scrypt.o -MD -MP -MF .deps/minerd-scrypt.Tpo -c -o minerd-scrypt.o `test -f 'scrypt.c' || echo './'`scrypt.c
mv -f .deps/minerd-scrypt.Tpo .deps/minerd-scrypt.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -pthread -fno-strict-aliasing     -g -O2 -MT minerd-yescrypt.o -MD -MP -MF .deps/minerd-yescrypt.Tpo -c -o minerd-yescrypt.o `test -f 'yescrypt.c' || echo './'`yescrypt.c
In file included from yescrypt-best.c:2:0,
                 from yescrypt.c:22:
yescrypt-simd.c:37:2: warning: #warning "Consider enabling SSE4.1, AVX, or XOP in the C compiler for significantly better performance" [-Wcpp]
 #warning "Consider enabling SSE4.1, AVX, or XOP in the C compiler for significantly better performance"
  ^
mv -f .deps/minerd-yescrypt.Tpo .deps/minerd-yescrypt.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -pthread -fno-strict-aliasing     -g -O2 -MT minerd-sha2-x64.o -MD -MP -MF .deps/minerd-sha2-x64.Tpo -c -o minerd-sha2-x64.o `test -f 'sha2-x64.S' || echo './'`sha2-x64.S
mv -f .deps/minerd-sha2-x64.Tpo .deps/minerd-sha2-x64.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -pthread -fno-strict-aliasing     -g -O2 -MT minerd-scrypt-x64.o -MD -MP -MF .deps/minerd-scrypt-x64.Tpo -c -o minerd-scrypt-x64.o `test -f 'scrypt-x64.S' || echo './'`scrypt-x64.S
mv -f .deps/minerd-scrypt-x64.Tpo .deps/minerd-scrypt-x64.Po
gcc -std=gnu99  -g -O2 -pthread  -o minerd minerd-cpu-miner.o minerd-util.o minerd-sha2.o minerd-scrypt.o minerd-yescrypt.o  minerd-sha2-x64.o minerd-scrypt-x64.o  -lcurl   -ljansson -lpthread
make[2]: Leaving directory `/root/cpuminer'
make[1]: Leaving directory `/root/cpuminer'

$ make install
Making install in compat
make[1]: Entering directory `/root/cpuminer/compat'
make[2]: Entering directory `/root/cpuminer/compat'
make[3]: Entering directory `/root/cpuminer/compat'
make[3]: Nothing to be done for `install-exec-am'.
make[3]: Nothing to be done for `install-data-am'.
make[3]: Leaving directory `/root/cpuminer/compat'
make[2]: Leaving directory `/root/cpuminer/compat'
make[1]: Leaving directory `/root/cpuminer/compat'
make[1]: Entering directory `/root/cpuminer'
make[2]: Entering directory `/root/cpuminer'
 /bin/mkdir -p '/usr/local/bin'
  /bin/install -c minerd '/usr/local/bin'
 /bin/mkdir -p '/usr/local/share/man/man1'
 /bin/install -c -m 644 minerd.1 '/usr/local/share/man/man1'
make[2]: Leaving directory `/root/cpuminer'
make[1]: Leaving directory `/root/cpuminer'

ココまでやったらセットアップ完了。以下のコマンドで CPU Miner (minerd) が動作するか確認する。

$ ./minerd --help

そしたら、マイニングするユーザ情報を記録した JSON ファイルを作成する。ファイル名は適当に setting.json としておく。

  • setting.json
{
  "algo"  : "yescrypt",
  "url"   : "stratum+tcp://jp.lapool.me:3014",
  "user"  : "【LA BitZeny Pool の User 名】.【Worker 名】",
  "pass"  : "【Worker Password】"
}

LA BitZeny Pool に登録した各種情報が必要になる。

  • url プロパティに指定する URL は、LA BitZeny Pool の管理画面にある「ポート一覧」より確認できる。
    • 参考:LA Bitzeny Pool - Home
    • ハッシュレートに応じて難易度が調整されている。上で書いてあるのは yescript-0.5 アルゴリズムによる、Difficulty 0.1 のポート
  • user プロパティは user_name.worker_name とピリオド . で繋いで記述する
  • pass プロパティは Worker のパスワードを入れる
    • LA BitZeny Pool の画面で登録しておいた Worker 情報を指定する

とりあえずマイニングを始めてみる

以上の設定を行ったら、次のようにコマンドを叩くとマイニングが開始される。

$ ./minerd --config setting.json
[2020-01-07 14:21:01] 2 miner threads started, using 'yescrypt' algorithm.
[2020-01-07 14:21:01] Starting Stratum on stratum+tcp://jp.lapool.me:3014
[2020-01-07 14:21:01] Binding thread 1 to cpu 1
[2020-01-07 14:21:01] Binding thread 0 to cpu 0
[2020-01-07 14:21:36] thread 0: 4096 hashes, 0.12 khash/s
[2020-01-07 14:21:37] thread 1: 4096 hashes, 0.12 khash/s
[2020-01-07 14:22:37] thread 0: 7183 hashes, 0.12 khash/s
[2020-01-07 14:22:37] thread 1: 7122 hashes, 0.12 khash/s
[2020-01-07 14:23:36] thread 1: 7073 hashes, 0.12 khash/s
[2020-01-07 14:23:36] thread 0: 7148 hashes, 0.12 khash/s
[2020-01-07 14:23:39] Stratum requested work restart
[2020-01-07 14:23:39] thread 0: 302 hashes, 0.12 khash/s
[2020-01-07 14:23:39] thread 1: 310 hashes, 0.12 khash/s
[2020-01-07 14:23:51] Stratum requested work restart
[2020-01-07 14:23:51] thread 0: 1438 hashes, 0.12 khash/s
[2020-01-07 14:23:51] thread 1: 1434 hashes, 0.12 khash/s
[2020-01-07 14:24:03] Stratum requested work restart
[2020-01-07 14:24:03] thread 1: 1423 hashes, 0.12 khash/s
[2020-01-07 14:24:03] thread 0: 1436 hashes, 0.12 khash/s
[2020-01-07 14:25:03] thread 1: 7132 hashes, 0.12 khash/s
[2020-01-07 14:25:04] thread 0: 7182 hashes, 0.12 khash/s
[2020-01-07 14:25:57] Stratum requested work restart
[2020-01-07 14:25:57] thread 1: 6081 hashes, 0.11 khash/s
[2020-01-07 14:25:57] thread 0: 5882 hashes, 0.11 khash/s
[2020-01-07 14:26:03] Stratum requested work restart
[2020-01-07 14:26:03] thread 1: 699 hashes, 0.12 khash/s
[2020-01-07 14:26:03] thread 0: 630 hashes, 0.10 khash/s
[2020-01-07 14:26:59] thread 0: 6287 hashes, 0.11 khash/s
[2020-01-07 14:27:04] thread 1: 6907 hashes, 0.11 khash/s
[2020-01-07 14:27:58] thread 0: 6555 hashes, 0.11 khash/s
[2020-01-07 14:27:58] accepted: 1/1 (100.00%), 0.22 khash/s (yay!!!)
[2020-01-07 14:28:04] thread 1: 6769 hashes, 0.11 khash/s

別ウィンドウを開いて ps コマンドを叩いてみると、minerd というプロセスが動いているのが分かるだろう。

数分待って、(yay!!!) といった出力が出ていれば、マイニングが出来ている。しばらくすると LA BitZeny Pool の Dashboard で、獲得した BitZeny が確認できるようになる。

自分の場合、マイニングを始めてから5・6分で、 0.008742 ZNY が Unconfirmed として追加された。コレは本稿執筆時点で0.0005996円程度に相当する (……少なすぎない?w)。

マイニングできることが分かったら、Ctrl + C で終了しよう。

CPU 使用率を制限してみる

マイニングを始めると、minerd プロセスが起動してガンガン CPU を使い始める。クラウド上の VM なんかでガンガンに CPU を使ったりしていると何となくアレなので、cpulimit というツールを使って、CPU 使用率でプロセスの動作を制限してみようと思う。

# CPU Limit をインストールする
$ yum install -y cpulimit

# CPU 使用率を 80% に制限してマイニングを行う
$ cpulimit -l 80 -- ./minerd --config setting.json

こんな感じ。

別ウィンドウを開いたりして top コマンドを使って確認すると、CPU 使用率が制限できているのが分かるかと。

バックグラウンドで動作させる

さて、ココまでのやり方だと、プロセスはフォアグラウンドで動いていて、SSH 接続時はログアウトとともにマイニングが終了してしまう。そこで、プロセスをバックグラウンドで起動し、ログアウトして SSH 接続を切断した後も minerd プロセスが動きっぱなしになるようにしてみる。

# CPU Limit を使わないでバックグラウンド実行する場合
$ nohup ./minerd --config setting.json &
[1] 9067
nohup: 入力を無視し、出力を `nohup.out' に追記します
# (Enter で抜ける)

# CPU 使用率を制限しながらバックグラウンド実行する場合
$ nohup cpulimit -l 80 -- ./minerd --config setting.json &
[1] 9067
nohup: 入力を無視し、出力を `nohup.out' に追記します
# (Enter で抜ける)

nohup でバックグラウンド実行している際の標準出力は nohup.out というファイルに順次追記されていくので、

$ tail -f nohup.out

とかすればバックグラウンドでの動作状況が確認できる。

ウォレットへの払い出し

マイニングで獲得した BitZeny は、LA BitZeny Pool の管理画面より、指定のウォレットアドレスへ払い出せる。LA BitZeny Pool に貯めておくよりは、定期的にウォレットに移しておくと良いだろう。

BitZeny からの換金はまだ試していないが、BitZeny を取り扱っている取引所で BitCoin 等に換金し、それを日本円に換金すれば現金化できそう。

コレで一体いくら稼げるのか?

さて、CPU Miner の動かし方が分かったので、コレでガンガンマイニングしてみよう。

今回は、OCI の Always Free インスタンス2台で、24時間マイニングしてみた。

その結果採掘できた金額は、6.761123 ZNY だった (うち、Confirmed となった額は 5.94 ZNY)。コレは本稿執筆時点の日本円に換算して0.4812円程度。

永久無料で使える VM だと、2台がかりで1日0.5円かぁ〜…。

やめた。笑〃

Vim の Netrw から抜けられなくなった

次のように Vim の Netrw (ファイルツリー) を開いた。

$ vi ./

ファイルを眺めた後、Netrw のツリー画面で :q と打って抜けようとしたら、変更があるだかなんだかのメッセージが出て抜けられなかった。:q! とやってもダメ。

調べてみたところ、:qa! と叩いたらなんとか抜けられた。

他に :bd とか :bdelete! とか書いてあったけど意味不明。調べる気もしなくて理屈とかは調べてない。

Vim好きなら知っておくべき便利なVimコマンド集

Vim好きなら知っておくべき便利なVimコマンド集

  • 作者:drytt
  • 発売日: 2019/08/23
  • メディア: Kindle版

Vim script テクニックバイブル ~Vim使いの魔法の杖

Vim script テクニックバイブル ~Vim使いの魔法の杖

  • 作者:Vim scriptサポーターズ
  • 出版社/メーカー: 技術評論社
  • 発売日: 2014/08/06
  • メディア: 単行本(ソフトカバー)

Vimが使えるようになる本

Vimが使えるようになる本

  • 作者:T.Takeda
  • 出版社/メーカー: パブー
  • 発売日: 2013/03/28
  • メディア: Kindle版

実践Vim 思考のスピードで編集しよう! (アスキー書籍)

実践Vim 思考のスピードで編集しよう! (アスキー書籍)