CentOS7なVPSにSSL接続なCloud9環境を作る(ConoHa)
こんにちは、仮想通貨bot作りに夢中なはぐです。
botを動かすのに、AWS Cloud9を使っていましたが、最近AWSからConoHaに移りました。
理由は、
・AWSの料金体系がよくわからない
・どうせ有料になるならAWSより他のVPS業者の方が安くて性能が良さそう。
・東京に近いサーバーが欲しい(bitFlyerで有利な注文したい)
です。
いろいろ調べて、KagoyaかConoHaか迷いましたが、VPS初心者なのでいつでも無料枠でやめられるよう、ConoHaで作ってみました。
今なら(2019/11)700円の無料枠があるので、一番下位のVPSなら一月無料です。
私は2GBのやつで作りました。今なら1400円/月です。
このnoteでは、Linux初心者の方がVPSを借りてから、1から設定をして、無料でSSL接続のCloud9を作るところまで書こうと思います。
といっても基本的な操作方法のことは書きませんので、そこは調べてください。(Viの使い方やコマンドの意味等)
20年前ぐらいにSlackwareを研究室にいれて、MacとWindowsの共有ファイルサーバにしました。
そしてアパートのX68030にNetBSDを入れて、そのサーバーにTelenetできたときは感動しました。
このnoteで初心者の方がそんな感動が味わえれば、と思います。
やべ、あれからもう20年以上たってんだ。。。
有料にしてますが、下まで無料で読めるようになってます。
参考になったらご購入お願いします。生ビール代ください(^^)
結構書くのに労力使いました~。
1.VPSサーバーを借りよう!
私はConoHaにしましたが、お好きな業者でいいと思います。
私は2GBのサーバーを申し込みましたがあとからダウングレードやアップグレードもできるみたいです。
ConoHaはいろいろなインストールイメージが最初から用意されています。
ゲームサーバー用途もあり驚きました。
2.CentOS7を選択しよう!
まず新規OSのイメージはCentOS7.7を選びます。
リージョンはもちろん東京です。
最初8.0でやってみましたが、途中でライブラリの依存関係やpython2.7が入っていないことで詰みましたので、7系統がいいです。
パスワードとネームタグを設定したら追加ボタンを押します。
ネームタグは後から変更可能です。
サーバーリストに今追加したサーバーが追加されます。
ネームタグをクリックするとサーバの詳細画面に移るので、コンソールを押します。
ユーザーは、root、パスワードは先程サーバー作成で設定したものを入力します。
無事ログインできたでしょうか?
もしパスを忘れてしまったらしょうがないのでサーバー削除して最初から追加すればいいです。
追加料金はかからないはずです。(稼働時間でかかります。)
3.ユーザーを追加しよう!
このままrootで作業はいろいろまずいので、ユーザーを追加します。
下の場合はhaguというユーザーを追加します。
useradd hagu
passwd hagu
usermod -G wheel hagu
exit
# もう一度コンソール立ち上げてhaguでログイン
su
# rootのパス入力でrootになれればOK
4.TeraTermで接続できるよう、SSHの設定をしよう!
このコンソールで作業してもいいのですが、WindowsPCでしたらTeraTermというターミナルソフトで接続できるようにした方が画面も広いしコピーアンドペーストもできるしで便利です。
ただ、先程のコンソールでも、ウインドウのメニューバーの位置に「コンソール」というボタンがあるので、「シリアル」を選べばペーストできます。
TeraTermでのSSH接続の設定は、
https://vps-news.sakura.ad.jp/tutorials/centos7-initial-settings/
を参考にしてやってみてください。
鍵方式でログインするようにしておけば安心です。
ただ、この作業はどうしてもしなければならないものではなく、普通にパスワードログインでもいいのでしたら、portの22を開放しておけばいいだけです。
ただ、安心のためにはやっておいたほうが無難かなぁ。
ざっくり書きますので、鍵の作成、移動方法などは上記HPを参考にしてください。
まずはTeratermでport番号22でログインします。
つぎに作った公開鍵をTeratermにドロップしてサーバーにあげます。
ちなみに鍵のパスフレーズは空でもOKみたい。
# haguでログイン
cd # 確実にホームディレクトリに移動
mkdir .ssh # ディレクトリ作成
chmod 700 .ssh/ # 自分以外のアクセスを禁止
mv id_rsa.pub .ssh/authorized_keys # 公開鍵リスト作成
chmod 600 .ssh/authorized_keys # 自分以外の読み書きを禁止
# sshの設定編集
sudo vi /etc/ssh/sshd_config
# 上記の/etc/ssh/sshd_config の編集中身。下2つはすでに書かれているので変更です。
Port 11022 # portを22から11022に変更するならば
PermitRootLogin no # yes を「no」(許可しない)に変更
PasswordAuthentication no # yes を「no」に変更
# 編集反映。コマンドラインで。
sudo systemctl restart sshd
sudo systemctl status sshd
# Firewall設定を11022を追加
sudo firewall-cmd --permanent --zone=public --add-port=11022/tcp
sudo firewall-cmd --reload
これで次回のログインからport:11022指定で鍵を使ったログイン方法になるはずです。
もしログインできなくなってしまったら、ConoHaのサーバーコントロールパネルのコンソールボタンからログインし、設定をもういちど確認してみてください。
5.htppingをインストールして速度を測ってみよう!
なぜAWS以外にサーバーを借りたかというと、bitFlyerに近いサーバーが欲しい、というのも大きな理由でした。
で、その速度を図るのにhttpingがいいです。
入っていないのでソースからコンパイルしてインストールします。
途中、なにか聞かれたらyを押しておきます。
yum install -y centos-release-scl
sudo yum install -y devtoolset-9
scl enable devtoolset-9 bash
cd /usr/local/src/
sudo wget http://www.vanheusden.com/httping/httping-2.5.tgz
sudo tar xfz httping-2.5.tgz
cd httping-2.5/
sudo make
sudo make install
cd ~
これでhttpingがはいりました。
早速速度を計測してみます。
httping api.bitflyer.jp
httping api.bitflyer.com
10回ほど計測したらCtrl+Cを押して抜けましょう。
ConoHaは概ねAWS東京よりは速かったので一安心。
ちなみに、
api.bitflyer.jp => 104.23.242.145 or 104.23.243.145
api.bitflyer.com => 107.154.247.50
もしこれで遅かったら、別のVPS業者に行きましょう。
今回はとりあえずAWS東京よりは速かったのでこのまま続行です。
6.Python3をインストールしてみよう!
なんとpythonのver3が入っていないのでいれます。
ver3.6を入れますが、他のverが良ければ3.7とかでもいいと思います。
sudo yum install python36 python36-devel python36-libs python36-tools
python3 -V
で確認してみてください。
後でもいいのですが、ここでbot開発に必要なモジュールをインストールしておきます。
TA-LIBはコンパイルしてインストールになります。
sudo pip-3.6 install numpy
sudo pip-3.6 install pandas
sudo pip-3.6 install ccxt
sudo pip-3.6 install websocket-client
sudo pip-3.6 install scipy
sudo pip-3.6 install matplotlib
sudo pip-3.6 install tqdm
sudo pip-3.6 install webcolors
sudo pip-3.6 install mpl_finance
sudo pip-3.6 install plotly==3.4.2
sudo pip-3.6 install simplejson
sudo pip-3.6 install sortedcontainers
sudo pip-3.6 install pyyaml
sudo pip-3.6 install psutil
cd ~
wget http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz
tar xvzf ta-lib-0.4.0-src.tar.gz
cd ta-lib
./configure --prefix=/usr
make
sudo make install
sudo bash -c "echo "/usr/local/lib64" >> /etc/ld.so.conf"
sudo /sbin/ldconfig
sudo pip-3.6 install ta-lib
7.Cloud9をインストールしてみよう!
Cloud9のインストールはほぼイナトレさんのnoteのままです。
sudo yum -y install git
sudo yum -y install glibc-static
sudo yum -y install epel-release
sudo yum -y install nodejs npm --enablerepo=epel
sudo yum -y groupinstall -y development
sudo mkdir /opt/workspace
sudo chmod 777 /opt/workspace
sudo mkdir ~/.c9
sudo chmod 777 ~/.c9
cd /usr/local/src
sudo chmod 777 /usr/local/src
git clone git://github.com/c9/core.git c9sdk
cd c9sdk
sudo scripts/install-sdk.sh
Firewallの設定をします。Cloud9をport:8080で立ち上げます。その後、Apache(wwwサーバー)も立ち上げますので、合わせてポートの設定。
sudo firewall-cmd --permanent --add-service=http --zone=public
sudo firewall-cmd --permanent --add-service=https --zone=public
sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp
sudo firewall-cmd --permanent --zone=public --add-port=11022/tcp
sudo firewall-cmd --permanent --zone=public --add-port=80/tcp
sudo firewall-cmd --permanent --zone=public --add-port=443/tcp
sudo firewall-cmd --reload
11022はさっき設定したSSHのもので、さっきしてあったらもういいです。
80はhttpで接続用、443はhttps用です。
インストール終了したら、次に手動で起動してみましょう。
ユーザー名、パスワード、は自分の好きなの(ログインしているのと同じでなくて良い)、IPアドレスは自分のサーバーのIPです。IPアドレスはConoHaのコントロールパネルのサーバー一覧に書いてありますし、ip -4 a コマンドからも確認できます。
cd /usr/local/src/c9sdk
sudo node ./server.js -p 8080 -a ユーザー名:パスワード -w /opt/workspace/ --listen 自分のIP
問題なく実行できれば以下のように表示され、Cloud9サーバーが立ち上がります。
ブラウザのアドレスバーに、「http://自分のipアドレス:8080」 と打てば、Cloud9が立ち上がるはずです。
上のserver.js起動時に設定したユーザー名とパスワードでログインです。
最初こんな画面なので、左下のAlway ~ をチェックして 右のFinishボタンで使えるようになるはずです。
ちなみにworkspaceというフォルダにアップロードされますが、実態は上で作った/opt/workspace です。
もし、他に変えたければそれ関連を適宜変えてserver.jsを起動してください。
このまま上記のserver.jsの起動方法ではsshが切断される度にcloud9も終了していまいます。
nodeのforeverというのがあるので、それでサーバー起動時に自動で起動するようにしましょう。
まずforeverをインストールします。nodeのモジュールのインストールは、npmコマンドです。(pythonのpipと同じ役割)
そのあと、crontab で起動時にforeverでserver.jsを起動するようにします。
sudo npm install -g forever
sudo crontab -e
viが立ち上がるので、以下を追加で書き込みます。
@reboot sudo forever start /usr/local/src/c9sdk/server.js -p 8080 -a ユーザー名:パスワード -w /opt/workspace/ --listen 自分のipアドレス
これでサーバー起動時に立ち上がりますので、いちいちsshログインしてserver.js立ち上げなくてもすみます。
ただ、cronだと、MS-DOSのautoexec.batのようなものなので、問題はないですが、ほんとはserviceとして起動したほうがいいのかもしれません。
こちらにserviceの登録の仕方が書いてありました。私は調べるの面倒でcronのままなので、これでいいかはよくわかりません。
8.Apacheをインストールしておこう!
wwwサーバー、Apacheをインストールします。
イナトレさんのnoteのようにソースからコンパイルしてインストールです。
cd /usr/local/src
sudo yum -y install gcc make pcre pcre-devel wget
sudo yum -y install openssl-devel
sudo yum -y install expat-devel
wget http://ftp.yz.yamagata-u.ac.jp/pub/network/apache//apr/apr-1.7.0.tar.gz
tar -xvzf apr-1.7.0.tar.gz
cd apr-1.7.0
./configure --prefix=/opt/apr/apr-1.7.0
make
make test
sudo make install
cd ..
wget http://ftp.jaist.ac.jp/pub/apache/apr/apr-util-1.6.1.tar.gz
tar -xvzf apr-util-1.6.1.tar.gz
cd apr-util-1.6.1
./configure --prefix=/opt/apr-util/apr-util-1.6.1 --with-apr=/opt/apr/apr-1.7.0
make
make test
sudo make install
cd ..
wget http://ftp.jaist.ac.jp/pub/apache//httpd/httpd-2.4.39.tar.gz
tar -xvzf httpd-2.4.39.tar.gz
cd /usr/local/src/httpd-2.4.39
./configure --prefix=/opt/httpd/httpd-2.4.39 --with-apr=/opt/apr/apr-1.7.0 --with-apr-util=/opt/apr-util/apr-util-1.6.1 --enable-mods-shared=all --enable-ssl --with-ssl=/bin/openssl
make
sudo make install
cd
これでApacheがインストールされました。
設定と起動をします。
とりあえず中途半端な設定でも起動だけしとかないと後のSSL証明書の発行でサーバーが見つかりませんよ、とエラーが出てしまいます。
(--standaloneオプションというものがあったので、それでできたかも)
/opt/httpd/httpd-2.4.39/conf/httpd.conf を編集します。
(ごめんなさい、とりあえず次の章のドメイン取得だけここで先にやっておいてください!
やることが前後しちゃってごめんなさい、もう書き直すのめんどい)
ServerName haguhagu.cf:80
あと、必要なのかわかりませんが、/etc/hosts も編集
自分のIPアドレス haguhagu.cf
起動します。
sudo /opt/httpd/httpd-2.4.39/bin/apachectl start
もし、already running とでたら、上記のコマンドのstart をstop に変えて止めてからもう一度startしてみてください。
さて、これで、haguhagu.cfにアクセスできますでしょうか?
It Works! と表示されれば動いています。
ちなみにDocumentRootは、/opt/httpd/httpd-2.4.39/htdocs です。
後のSSL証明書の発行で、このディレクトリ使います。
/var/www/htmlかと思ってハマりました。
(もちろん設定で変えれます。)
9.無料でドメインとSSL証明書をゲットしよう!
さて、ここまででCloud9とApacheのサーバーが作れましたが、このままだと暗号化(SSL接続)されていないので、悪意のある人がいたら通信を盗まれます。
SSL化しましょう。
SSL化をするのにドメインが必要ですので、まずドメイン取得から。
VPS業者でドメインも販売してますが、無料でゲットします。
こちらのサイトで任意の名前で検索してみて、無料のものをもらいます。
12ヶ月まで無料で使えます。
取得した後はドメイン有効期限の2週間前までに更新作業が必要です。
更新すればまた12ヶ月できるのかな?ちょっと未確認。
試しにhaguで検索してみると、これだけ無料のものがありました。
ここではhagu.gaを選択し、右下のチェックアウトを押し、次の画面でuse DNSを選択、自分のサーバーのIPアドレスを入力しておきます。
右で12 Monthsにしておきます。
次の画面ではチェックボックスにチェックし、CompleteOrderボタンを押します。
これでブラウザでhagu.gaでアクセスできるようになりました。
と思ったら、うちのPC保護ソフトがhagu.gaは危険なサイト、という警告を出してアクセスできませんでした。
仕方がないので他のドメインhaguhagu.cfを同様に取得しました。
hagu.gaは破棄しました。破棄もfreenomのHPでログイン後にできます。
(ちなみに記事入校後にこのドメインとIPアドレスは削除します。)
次にSSL証明書です。
Encryptで発行してもらいますが、web上ではなく、サーバー上でコマンドにて証明書をもらいます。
どうやらhttpサーバーが動いていないと証明書の発行でエラーがでるようなので、とりあえずApacheを動かしておきます。
sudo /opt/httpd/httpd-2.4.39/bin/apachectl start
発行のためのプログラムをインストールして、発行します。
sudo curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto
sudo chmod 700 /usr/bin/certbot-auto
certbot-auto certonly --webroot -w /opt/httpd/httpd-2.4.39/htdocs -d haguhagu.cf --email xxxxxx@gmail.com
上記のコマンドの3行目のhaguhagu.cfとemailは書き換えてください。
このように表示されれば成功です。
無事発行されたら以下にファイルができます。
/etc/letsencrypt/live/haguhagu.cf/の下に、
これらができます。
これらが証明書なので、ApacheのSSL設定を追加していきます。
10.SSLの接続設定をしよう!
Apacheの設定ファイルを編集します。
sudo vim /opt/httpd/httpd-2.4.39/conf/httpd.conf
さっき書き換えましたけど、以下になっているか確認
ServerName haguhagu.cf:80
次に、ファイルの最後にこれ追加
LoadModule ssl_module modules/mod_ssl.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
Listen 443 https
SSLPassPhraseDialog builtin
SSLSessionCache shmcb:/run/httpd/sslcache(512000)
SSLSessionCacheTimeout 300
SSLRandomSeed startup file:/dev/urandom 256
SSLRandomSeed connect builtin
SSLCryptoDevice builtin
<VirtualHost _default_:443>
ServerName haguhagu.cf:443 <----- ここ
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA
SSLCertificateFile /etc/letsencrypt/live/haguhagu.cf/cert.pem <---- ここ
SSLCertificateKeyFile /etc/letsencrypt/live/haguhagu.cf/privkey.pem <---- ここ
SSLCertificateChainFile /etc/letsencrypt/live/haguhagu.cf/chain.pem <---- ここ
BrowserMatch "MSIE [2-5]" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
# encryptの再発行時、下の4行消して、アパッチ再起動、再発行コマンドを実行する。
# sudo /opt/httpd/httpd-2.4.39/bin/apachectl stop
# sudo /opt/httpd/httpd-2.4.39/bin/apachectl start
# sudo /usr/bin/certbot-auto renew --non-interactive --agree-tos --keep --expand
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / http://haguhagu.cf:8080/ <---- ここ
ProxyPassReverse / http://haguhagu.cf:8080/ <---- ここ
</VirtualHost>
<VirtualHost *:80>
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^/(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
</VirtualHost>
まんなからへんのhaguhagu.cfはご自分のドメインに書き換えてください。
矢印の6箇所あります。
またサーバーを止めて再起動。
もし、編集でエラーがあればこのときメッセージがでます。
sudo /opt/httpd/httpd-2.4.39/bin/apachectl stop
sudo /opt/httpd/httpd-2.4.39/bin/apachectl start
これで、http://haguhagu.cf にアクセスすると、httpsにリダイレクトされて、さらにポート8080のCloud9にリダイレクト、という流れになり、安全な接続になりました!
試しに、http://haguhagu.cfにアクセスしてみましょう。
SSL化されてCloud9にいけましたでしょうか?
ブラウザのアドレスバーに鍵のアイコンがでていれば成功です。
さて、Apacheをサーバー起動時に起動するためにCronを設定します。
sudo crontab -e
ファイル内容が以下のようになるようにしてください。
@reboot /usr/bin/forever start /usr/local/src/c9sdk/server.js -p 8080 -a ユーザー名:パスワード -w /home/tibita/workspace/ --listen 自分のIPアドレス
@reboot /opt/httpd/httpd-2.4.39/bin/apachectl start
00 16 * * 2 /usr/bin/certbot-auto renew --non-interactive --agree-tos --keep --expand
3行目はSSL証明書を更新するコマンドです。
<追記 2020/04/28>
ですが、上記の設定で、clud9を動かしていると、https接続でcertbot-autoの書き込んだファイルが見れないので失敗していました。
encryptから、あと少しで期限ですよ~、というメールが来たので気づきました。
なので、apacheの設定を少し変えて、アパッチ再起動、証明書再発行、設定を戻してアパッチ再起動、の手順でできました。
vim /opt/httpd/httpd-2.4.39/conf/httpd.conf
で、下記の様に上で書き換えた部分を少し削ります。(コメントアウトします。)
<VirtualHost _default_:443>
ServerName haguhagu.cf:443 <----- ここ
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA
SSLCertificateFile /etc/letsencrypt/live/haguhagu.cf/cert.pem <---- ここ
SSLCertificateKeyFile /etc/letsencrypt/live/haguhagu.cf/privkey.pem <---- ここ
SSLCertificateChainFile /etc/letsencrypt/live/haguhagu.cf/chain.pem <---- ここ
BrowserMatch "MSIE [2-5]" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
# encryptの再発行時、下の4行消して、アパッチ再起動、再発行コマンドを実行する。
# sudo /opt/httpd/httpd-2.4.39/bin/apachectl stop
# sudo /opt/httpd/httpd-2.4.39/bin/apachectl start
# sudo /usr/bin/certbot-auto renew --non-interactive --agree-tos --keep --expand
#ProxyPreserveHost On
#ProxyRequests Off
#ProxyPass / http://haguhagu.cf:8080/ <---- ここ
#ProxyPassReverse / http://haguhagu.cf:8080/ <---- ここ
</VirtualHost>
保存してから、apache再起動です。
sudo /opt/httpd/httpd-2.4.39/bin/apachectl stop
sudo /opt/httpd/httpd-2.4.39/bin/apachectl start
その後、証明書の再発行コマンド
/usr/bin/certbot-auto renew --non-interactive --agree-tos --keep --expand
これで、再発行できたら、設定をもとに戻してアパッチ停止、再起動しておきましょう。
あと、自分のIPアドレス:8080でまだアクセスできてしまうので、このポートを閉じておきます。
sudo firewall-cmd --remove-port=8080/tcp --zone=public --permanent
sudo firewall-cmd --reload
念の為に開いているポートを確認してみます。
sudo firewall-cmd --list-ports --zone=public --permanent
結果、11022/tcp 80/tcp 443/tcp だけでしたらOKです。
11.bot作りをがんばろう!
なかなか長文になりました。
これで安全にCloud9にアクセスしてデバッグできるので開発効率があがると思います。
私はWindows上のPyCharmでデバッグして、Cloud9経由でアップロードしてますが、ftp代わりにできて便利です。
あと、12ヶ月後のちょっと手前でFreenomにログインしてドメインの更新をしましょう。
ここまで長文になるとは、、、12000文字!(コマンドもあるから実質は少ない)
疲れた。。。
これ書いている間もbotは動いています!
では皆さんお互いお金の奪い合い、頑張りましょう(^^;
8.コマンドまとめ
# httpのプロセスしらべる
sudo lsof -i | grep http
# ポートがどう使わwれてるかみる
netstat -lnp | grep :8080
netstat -lnp | grep :443
# 現在追加されているポート番号の確認(恒久的な設定のみ)
sudo firewall-cmd --list-ports --zone=public --permanent
# Apache設定
sudo vim /opt/httpd/httpd-2.4.39/conf/httpd.conf
# Apache 起動と停止
sudo /opt/httpd/httpd-2.4.39/bin/apachectl stop
sudo /opt/httpd/httpd-2.4.39/bin/apachectl start
# cron 編集
sudo crontab -e
# cron 再起動
sudo systemctl restart crond
# Puppeteer用
sudo yum -y install libX11 libXcomposite libXcursor libXdamage libXext libXi libXtst cups-libs libXScrnSaver libXrandr alsa-lib pango atk at-spi2-atk gtk3
sudo pip3 install requests requests_oauthlib pyppeteer
# IPAフォントの導入
sudo yum -y install ipa-gothic-fonts ipa-mincho-fonts ipa-pgothic-fonts ipa-pmincho-fonts
# OOM Killer
# OOM Killer されないようにする
echo -17 > /proc/{pid}/oom_adj
# OOM scoreを見る
cat /proc/{pid}/oom_score
# killされたプロセスをみる
cat /var/log/messages | grep Killed
9.追記 numbaのインストールにつまずく
下のやり方でやってたけど、スワップをめちゃとらないとだめみたい。
別のやり方
sudo yum install centos-release-scl
sudo yum install llvm-toolset-7
# llvm-configはこっちに入ってた。
sudo yum install llvm-toolset-7-llvm-devel-5.0.1-8.el7.x86_64
scl enable llvm-toolset-7 bash
export PATH=$PATH:/opt/rh/llvm-toolset-7/root/usr/bin/
# version確認
clang --version
(ここから下はメモリがいっぱいある人用&最新がいい人)
pip でnumba入れようとおもったらつまずいたので忘備録
まずllvmをいれないとならないんだけど、それにはgccやらCmakeやらいろいろ前にいれなければならないものが多かった。
yum install -y centos-release-scl
yum install -y devtoolset-8
確認
gcc --version
CMake
https://cmake.org/download/ から最新の cmake-3.19.2-Linux-x86_64.sh をダウンロード。
sh ./cmake-3.13.0-rc3-Linux-x86_64.sh
# 利用規約が表示されるのでyで答える。
Do you accept the license? [yN]:
y
# 解凍先を聞かれるのでYで答える
Saying no will install in: "/home/centos/install-llvm/cmake" [Yn]:
Y
# 独自パッケージ置き場(/opt)へコピーする(自分ルールがある方はご自由に)
sudo mv cmake-3.13.0-rc3-Linux-x86_64 /opt/cmake
# 今回は簡易環境なので/opt/cmake/binをパスへ追加
# (真面目な方はシンボリックリンク使うなりご自由に)
echo 'export PATH=$PATH:/opt/cmake/bin' >> ~/.bashrc
source ~/.bashrc
# 確認
cmake --version
cmake version 3.19.2
Z3ライブラリのインストール
Z3はパッケージが無いので Github から。
git clone https://github.com/Z3Prover/z3.git
cd z3
python scripts/mk_make.py --prefix=/usr/local/
cd build
make -j7
sudo make install
なんかz3いれたら、Cmakeエラーの
Host GCC version must be at least 5.1, your version is 4.8.5.
のエラーも消えた。
もし、消えなければ、
https://stackoverrun.com/ja/q/4702831
https://stackoverrun.com/ja/q/3505552
このあたりが参考になるかも。
llvm。コンパイルに数時間。。。
途中でメモリー不足によるよりリンカエラーがでた(1Gモデル)
スワップ増やす。
https://www.server-memo.net/centos-settings/system/add-swap.html
ここ参考に。
cd /
# サイズが2G
dd if=/dev/zero of=swap_ext1 bs=1M count=2048
chmod 600 swap_ext1
mkswap swap_ext1
swapon swap_ext1
# 再起動時に自動マウントさせる
cp -p /etc/fstab /etc/fstab_20210104
vi /etc/fstab
# 下の行をfstabに追記
/swap_ext1 swap swap defaults 0 0
LLVMのインストール
sudo yum install svn #llvmダウンロード
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
# clangダウンロード
cd llvm/tools
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang
cd ../..
# clang tools ダウンロード
cd llvm/tools/clang/tools
svn co http://llvm.org/svn/llvm-project/clang-tools-extra/trunk extra
cd ../../../..
# Compiler-RTのソースコードをダウンロード
cd llvm/projects
svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt
cd ../..
# build
mkdir build
cd build
cmake -G "Unix Makefiles" ../llvm
make
sudo make install
llvmliteのインストール
su #export LLVM_CONFIG=/usr/local/bin/llvm-config
export LLVM_CONFIG=/opt/rh/llvm-toolset-7/root/usr/bin/llvm-config
yum install libstdc++-static
pip3 install llvmlite
exit
numba
sudo pip3 install numba
ここから先は
¥ 500
サポートしていただけると励みになります。 頂いたサポートは有益な他の方のnote購入代に当てさせて頂き、回していきたいと思います。