AC-5

某SEの雑記帳

UBUNTUにXRDPしてNVIDIAのグラボを使ってモナコインマイニング

      2017/08/17

Ubuntu 16.04 LTSを16.10にupgradeする

Ubuntu16.04 LTSでxrdpをインストールするといろいろとややこしいのですが、Ubuntu16.10以上なら、xrdp0.9がaptで簡単にインストールできます。
なので、まずはUbuntuを16.10にアップグレードします。

GUIを利用している場合は、「ソフトウェアの更新」を起動してしばらく待っていると、アップグレードの通知が表示されます。
この方法が一番簡単です。

コマンドでアップグレードする

Ubuntuのアップグレードに使うコマンドと、ファイルの編集用エディタのvimをインストールしておきます。

[root@test]# sudo apt-get update && sudo apt-get install -y update-manager-core vim←do-release-upgradeとvimをインストール

次にLTS版からアップグレードできるようにします。

[root@test]# vi /etc/update-manager/release-upgrades←release-upgradesを編集
[DEFAULT]
#Prompt=lts←コメントアウト
Prompt=normal←normalに変更

Ubuntu 16.04 LTSから16.10にアップグレードします。

[root@test]# sudo do-release-upgrade

しばらくインストール作業を待ちます。

download has finished, the process cannot be canceled.
 Continue [yN]  Details [d]←yを押す

作業中にダイアログが表示されたら、それぞれ選択します。

Postfix Configuration: No configuration
Configuring grub-pc: keep the local version currently installed
/etc/update-manager/release-upgrades: N
Remove obsolete packages?: y
System upgrade is complete.: y

再起動するとアップデート作業は完了です。

バージョンを確認します。

[root@test]# lsb_release -rd
Description:    Ubuntu 16.10
Release:        16.10←アップグレードされています

xrdpリモートデスクトップ環境を構築する

Ubuntu 16.10になるとxrdp0.9が使えるようになるので、aptでインストールします。

[root@test]# sudo apt-get update
[root@test]# apt-cache show xrdp | grep Version
Version: 0.9.0~20160601+git703fedd-3←利用できるバージョン確認
[root@test]# sudo apt-get install xrdp -y←xrdpインストール
[root@test]# sudo systemctl enable xrdp.service←自動起動設定
[root@test]# sudo systemctl start xrdp.service←起動

リモートデスクトップでログイン後、表示されない問題

この状態でリモートデスクトップで接続するとログイン画面は出るのですが、ログインすると灰色の画面になって接続が切れてしまいます。
この対策の為に、軽量なデスクトップ環境に変更します。
GNOME2から派生したMATEが良く利用されていますので、そちらをインストールします。

[root@test]# apt-cache show mate-core | grep Version←バージョン確認
Version: 1.16.0+1←バージョンは1.16です
[root@test]# sudo apt update && sudo apt install mate-core mate-desktop-environment mate-desktop-environment-extra -y←MATE一式をインストール

また、日本語での入力ができるように、Mozcもインストールします。

[root@test]# sudo apt-get install ibus-mozc -y←Mozcインストール

起動時に、MATE環境でログインされるように、ibusとMATEの起動を設定します。

[root@test]# cat < ~/.xsession
export GTK_IM_MODULE=ibus
export QT_IM_MODULE=ibus
export XMODIFIERS="@im=ibus"
ibus-daemon -rdx
mate-session
EOF

再起動するとxrdp接続でMATEのリモートデスクトップ環境が使えるようになります。

[root@test]# shutdown -r now

再起動後に、右上メニューの[JP]となっている箇所を選択し、日本語-Mozcを選択して日本語入力できるか確認します。

CUDAインストール

ここまで、NVIDIAのドライバはインストールせずにすすめてきましたが、CUDAをインストールしようと思います。
UBUNTU16.10ですが、CUDA8.0のUBUNTU16.04版でインストール可能です。
Firefoxで、https://developer.nvidia.com/cuda-downloadsからダウンロードして、GUIでインストールしても大丈夫ですが、CLIでインストールする場合は次の手順になります。

[root@test ~]# wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
[root@test ~]# cat 7fa2af80.pub | sudo apt-key add -
[root@test ~]# wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
[root@test ~]# sudo dpkg -i cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
[root@test ~]# sudo apt update
[root@test ~]# sudo apt install linux-generic
[root@test ~]# sudo apt install cuda
[root@test ~]# sudo apt install nvidia-375
[root@test ~]# sudo apt install nvidia-cuda-toolkit

[root@test ~]# sudo reboot←再起動
再起動するとリモートで接続できなくなるので、一旦モニタに出力して作業してください。
[root@test ~]# sudo apt remove linux-virtual
[root@test ~]# sudo apt autoremove
[root@test ~]# rm 7fa2af80.pub cuda-repo-ubuntu1604_8.0.61-1_amd64.deb

次に、~/.bashrcの末尾に下記を追加します。

[root@test]# sudo vi ~/.bashrc←.bashrcの編集
export PATH="/usr/local/cuda-8.0/bin:$PATH"←末尾に追加
export LD_LIBRARY_PATH="/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH"←末尾に追加

以上の作業が終わったら、ログオフして再度ログインしてください。

NVIDIA対応

先程のCUDAのインストール後に、ログオフしたら、xrdp0.9.xで接続できなくなりました。
ログを見ると以下のようなエラーが出ています。
[20170702-12:55:19] [INFO ] A connection received from ::1 port 50178
[20170702-12:55:20] [INFO ] ++ created session (access granted): username ssig33, ip 0.0.0.0:54550 – socket: 12
[20170702-12:55:20] [INFO ] starting Xorg session…
[20170702-12:55:20] [DEBUG] Closed socket 9 (AF_INET6 :: port 5920)
[20170702-12:55:20] [DEBUG] Closed socket 9 (AF_INET6 :: port 6020)
[20170702-12:55:20] [DEBUG] Closed socket 9 (AF_INET6 :: port 6220)
[20170702-12:55:21] [DEBUG] Closed socket 7 (AF_INET6 ::1 port 3350)
[20170702-12:55:21] [DEBUG] Closed socket 8 (AF_INET6 ::1 port 3350)
[20170702-12:55:21] [INFO ] Xorg :20 -auth .Xauthority -config xrdp/xorg.conf -noreset -nolisten tcp
[20170702-12:55:31] [ERROR] X server for display 20 startup timeout
[20170702-12:55:31] [INFO ] starting xrdp-sessvc – xpid=20458 – wmpid=20457
[20170702-12:55:31] [ERROR] X server for display 20 startup timeout
[20170702-12:55:31] [ERROR] another Xserver might already be active on display 20 – see log
[20170702-12:55:31] [DEBUG] aborting connection…
[20170702-12:55:31] [INFO ] ++ terminated session: username ssig33, display :20.0, session_pid 20456, ip 0.0.0.0:54550 – socket: 12
[20170702-12:58:30] [INFO ] shutting down sesman 1

こちらの直し方ですが、
/etc/X11/Xwrapper.config を編集して
allowed_users=anybodyに変更するだけで直ります。

[root@test]# sudo vi /etc/X11/Xwrapper.config←Xwrapper.configの編集
allowed_users=anybody←末尾の文字列を変更

以上で環境準備が完了です。

ccminerインストール

ここから、マイニングの為のアプリケーションを入れていきます。
GPUマイニングではccminerが良く使われているので、こちらからダウンロードしてビルドします。
http://askmona.org/5596
今回は、ccminer-windows-2.2-mod-r1.zipをダウンロードして、展開しました。

ビルドの手順としては
$ bash autogen.sh
$ ./configure
$ make
なのですが、まずはautoge.shの時点で、aclocal:コマンドが見つかりません
とエラーが発生します。
このエラーの原因はautomakeが無い為なので、automakeをインストールします。

[root@test]# sudo apt install automake -y←automakeインストール

これで、autogen.shを行って、./configureを行うと、
configure: error: OpenSSL library required
と出ますので、OpenSSLもインストールします。

[root@test]# sudo apt install libssl-dev -y←OpenSSLインストール

これで./configureを行うと、今度は
./configure: line 6177: syntax error near unexpected token `,’
./configure: line 6177: `LIBCURL_CHECK_CONFIG(, 7.15.2, ,’
とエラーが出ます。
今度はlibcurl-devをインストールする必要があります。

[root@test]# sudo apt install libcurl4-openssl-dev -y←libcurl-devインストール

libcurl-devをインストールしたら、再度autogen.shを実行して、./configure、makeの順で実行します。

[root@test]# cd /home/hoge/ccminer-windows-2.2-mod-r1←展開したディレクトリに移動
[root@test ccminer-windows-2.2-mod-r1]# bash autogen.sh
[root@test ccminer-windows-2.2-mod-r1]# ./configure
[root@test ccminer-windows-2.2-mod-r1]# make

今回はCUDA8.0とccminer2.2を利用したからかもしれませんが、GCCのバージョンが5以上の場合にエラーが出てビルドできない場合があります。
その際はGCCのバージョンを落とす必要があります。

GCCのバージョンを落とす

#error — unsupported GNU version! gcc versions later than 5 are not supported!
のエラーが出るので、4.9に変更

[root@test]# sudo apt install gcc-4.9 g++-4.9←gcc-4.9インストール
[root@test]# sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.9

バージョンを4.9にしてから再度ビルドします。

[root@test]# cd /home/hoge/ccminer-windows-2.2-mod-r1←展開したディレクトリに移動
[root@test ccminer-windows-2.2-mod-r1]# bash autogen.sh
[root@test ccminer-windows-2.2-mod-r1]# ./configure
[root@test ccminer-windows-2.2-mod-r1]# make

また、以下のようなエラーが出る事もあります。
====
/usr/include/c++/6/bits/basic_string.tcc:219: `std::__cxx11::basic_string<char, std::char_traits, std::allocator >::_M_create(unsigned long&, unsigned long)’ に対する定義されていない参照です
collect2: error: ld returned 1 exit status
Makefile:987: ターゲット ‘ccminer’ のレシピで失敗しました
make[2]: *** [ccminer] エラー 1
make[2]: ディレクトリ ‘/home/yoshio/ccminer-windows-1.8.3-r1’ から出ます
Makefile:1787: ターゲット ‘all-recursive’ のレシピで失敗しました
make[1]: *** [all-recursive] エラー 1
make[1]: ディレクトリ ‘/home/yoshio/ccminer-windows-1.8.3-r1’ から出ます
Makefile:581: ターゲット ‘all’ のレシピで失敗しました
====
とエラーが出るので、

/usr/include/c++/6/bits/basic_string.tccの219行目をコメントアウトします。

[root@test]# vi /usr/include/c++/6/bits/basic_string.tcc←basic_string.tccを編集
:set number←行番号を表示させる
# _M_data(_M_create(__dnew, size_type(0)));←219行目をコメントアウト

ccminer起動

今回の場合、ccminer-windows-2.2-mod-r1内にファイルを追加して実行します。
また、プールはVIP POOLを利用した場合ですので、各プールに合わせて設定を変更してください。

[root@test]# cd /home/hoge/ccminer-windows-2.2-mod-r1←ccminerのディレクトリに移動
[root@test ccminer-windows-2.2-mod-r1]# vi monacoin←monacoinという名称でファイルを作成
./ccminer -a lyra2v2 -o stratum+tcp://vippool.net:8888 -u Weblogin.WorkerName -p WorkerPassword
[root@test ccminer-windows-2.2-mod-r1]# bash ./ccminer←起動

yes!が出たら正常に動いています。

 - Linux