- 投稿日:2020-01-20T22:44:38+09:00
DNSのdigコマンド
- 投稿日:2020-01-20T21:57:16+09:00
Linux 環境構築
- 投稿日:2020-01-20T21:42:37+09:00
Oracle Database XE導入手順纏め
【導入環境】
Oracle Linux 7
・Oracle Database XE取得
(取得先)
https://www.oracle.com/technetwork/jp/database/database-technologies/express-edition/downloads/index.html
ここでは、oracle-database-xe-18c-1.0-1.x86_64.rpm取得を想定・プレインストール取得(OL7用)
プレインストール導入プログラム
# curl -o oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm・プレインストール導入
# yum -y localinstall oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm
・Oracle Database XEインストール
# yum -y localinstall oracle-database-xe-18c-1.0-1.x86_64.rpm
・Oracle Database XEデータベースインスタンス作成
# /etc/init.d/oracle-xe-18c configure
必要入力項目:
- SYS, SYSTEM and PDBADMINパスワード
- ホストアドレス、ポート番号
- CDB,PDB名
・DB起動停止(OL7用)
(起動)
# systemctl start oracle-xe-18c
(停止)
# systemctl stop oracle-xe-18c
(再起動)
# systemctl restart oracle-xe-18c
- 投稿日:2020-01-20T20:28:06+09:00
個人的 Linuxでディスクの使用量を表示する
du -h [ディレクトリ] --max-depth=1du -h:サイズに応じて読みやすい単位で表示される
du --max-depth=1:ディレクトリ内のサブディレクトリは表示されない
(du -dでもLinuxはできるけど、macOSはできないので注意)
- 投稿日:2020-01-20T20:28:06+09:00
個人的 Linuxでディスクの使用量を大きい順に表示する
du -h [ディレクトリ] --max-depth=1 | sort -nrdu -h:サイズに応じて読みやすい単位で表示される
du --max-depth=1:ディレクトリ内のサブディレクトリは表示されない
(du -dでもLinuxはできるけど、macOSはできないので注意)sort -n:文字列を数値と見なして並べ替える
sort -r:逆順で並べ替える
sort -nr:数値の大きい順に並び替える
- 投稿日:2020-01-20T18:19:34+09:00
GCP初心者がGCEでマイクラサーバを建ててみた ~サーバ構築編~
はじめに
GCPを初めて半年未満の初心者が勉強のためにマイクラサーバを建ててみたって話です。
目標
- GCEでマイクラサーバを構築
- Discordを使いインスタンスの制御
- コマンドラインからGCPの操作に慣れる
構成
- VMインスタンス1(マイクラサーバ)
- VMインスタンス2(discordボット)
- クラウドストレージ(バックアップ用)
- サービスアカウント1(discordからの制御用)
構成図
手順
1. マイクラサーバ用のインスタンスの作成
なにはともあれマイクラサーバ用のインスタンスを作成しないとなにも始まりませんね。
基本的には以下の公式ドキュメントを参照し作成していきます。
GCPは公式ドキュメントはかなりわかりやすいものが用意されていて初心者には大助かりでした。インスタンスについては私はこのような設定で作成しました。
項目 内容 インスタンス名 mineserver リージョン us-central1 ゾーン us-central1-f シリーズ N1 マシンタイプ n1-standard-2 ブートディスク CentOS 7 プリエンプティブ 有効 ネットワークインタフェース外部IP IPアドレスを作成 プリエンプティブル インスタンスの制限
プリエンプティブルインスタンスを有効にするメリットは、単純にインスタンスの費用が通常の3分の1で済みます。
今回のマイクラサーバについては、ログインしっぱなしなんて状況はほとんど無いと思いましたので、コストを大幅に下げれることを優先しプリエンプティブルインスタンスを採用しました。
目標にも記載しましたが、discordからゲームをする時だけインスタンスをスタートし、終わったらストップするのであまり障害はないものと思っています。デメリットについては、公式ドキュメントに詳しく記載されているのでそちらを参照してください。
永続ディスクの追加
追加ディスクについては公式ドキュメントに記載されている通りに作成します。
項目 内容 ディスク名 minecraft-disk ディスクタイプ SSD永続タイプ ソースタイプ 空のタイプ サイズ 50GB 2. マイクラサーバのインストール・実行
こちらも基本的には上記に記載した公式ドキュメントを元に進めていきますが、
公式はOSがDebianを使用しており、私はCentOSを使用しているのでコマンドが一部ですが違ってきます。
違っている箇所を記載していますので、公式ドキュメントと合わせて読んでいただけると幸いです。Java ランタイム環境(JRE)をセットアップする
$ sudo yum update $ sudo yum install -y default-jre-headlessマイクラサーバのダウンロードとインストール
公式ではwgetを使いダウンロードしていますが、centOSにはデフォルトでwget
は入っていないのでインストールします。
ダウンロードリンクについてはminecraftのダウンロードページから最新のリンクをコピーして差し替えてください。$ sudo yum install wget $ wget https://launcher.mojang.com/v1/objects/f1a0073671057f01aa843443fef34330281333ce/server.jarサーバの初回起動
下記のコマンドに「-Xms1G -Xmx3G」とあるが、こちらはメモリの割り当てをしているもので、
マシンスペックに合わせて調整が可能です。$ java -Xms1G -Xmx3G -d64 -jar server.jar noguiマイクラサーバを使用するにあったての合意条件
初回起動が終わると同ディレクトリ内にいくつかファイルが生成され、その中にeula.txt
というファイルがあるので下記コマンドで開き編集します。
EULA の条件に同意する場合は、eula
の値をfalse
からtrue
に変更し、保存して終了します。$ vi eula.txt ここに内容を記載ここまでで最低限必要なセットアップは完了しました。
ですが、このままだとサーバからログアウトするとセッションが切れてマイクラサーバは停止してしまいます。
この問題を解決するためにscreen
を使用します。
まずはscreen
のインストールからです。$ yum install screenインストールした
screen
を使いマイクラサーバを実行します。
スクリーンコマンドの使い方は以下のページを参考にさせていただきました。$ screen -S mcs java -Xms1G -Xmx3G -d64 -jar server.jar noguiクライアントがマイクラサーバにログインできるようにする
公式ドキュメントに書かれているように、マイクラサーバは25565 をデフォルト リスニング ポートとして使用しますのでそちらに合わせたファイアウォールルールを作成します。
ポートを変更したい場合は同ディレクトリにあるserver.properties
を編集することで変更可能です。
また、server.properties
では他にもマイクラサーバの様々な設定を変更することが可能です。3. 定期バックアップの設定・実行
マイクラをプレイしていて突然クラッシュしデータが飛んでしまった。なんて悲しいことは私も何度か経験があります。
そんな時のために定期的にバックアップを取ることは必須ですよね。基本は公式ドキュメントの「定期バックアップをスケジュールする」の項目通りに進めます。
バックアップ用のスクリプトを作成し、cronを使い定期的に実行します。cronジョブをスケジュールするには、crontabに書き込む必要があります。
$ crontab -e //以下crontabの内容 0 */4 * * * /home/minecraft/backup.sh上記の設定をすると4時間ごとにbackup.shを実行されるようになります。
公式ドキュメントでは4時間でされていますが、私はクラッシュし復旧させる際に4時間も前の状態に戻るのは精神的にきついので1時間ごとにしました(笑)。
またcronについて詳細は以下のページを参考にさせていただきました。バックアップを世代保存する
バックアップを取り続けるだけですと、ファイルが膨大になってしまいますので一定の世代分だけを常に残すように設定します。
CloudStorageではオブジェクトのライフサイクル管理という機能があります。
簡単に説明すると自動的に古いバックアップを削除してくれるものです。設定については公式ドキュメントの「古いバックアップを自動的に削除する」の項目通りに進めます。
1点公式ドキュメントとは違う設定をした項目は、
[オブジェクト条件の選択] セクションで、[年齢] を選択します。年齢を 7 日間ではなく3日間にしました。
私の場合は1時間ごとにバックアップを取るので1日で24回、7日間も残すとなると168回分のバックアップが残ります。さすがにコストを考慮し3日間にしました。まとめ
いかがでしたでしょうか、ここまででマイクラサーバの構築編は終了です。
次回は作成したマイクラサーバの操作をdiscordから実行する方法について書いていきます。
- 投稿日:2020-01-20T16:11:45+09:00
Linux上でIntelliJを使っていて、日本語入力ができなくなった時の話
TL;DR
- IntelliJを使っている時に、気づくと日本語入力ができなくなっていた(IMEが切り替わらない)
- IntteliJを起動する時のJavaを切り替えると直った
環境
Ubuntu Linux 18.04 LTS。
$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 18.04.3 LTS Release: 18.04 Codename: bionicIntelliJのバージョン。
- 2019.3 Community Edition
事象と解決方法
起こっていた事象は、TL;DRに同じ。日本語入力に切り替えられなくて、困っていました。
IMEは、Mozcを使っています。
少し調べたら、以下のような記事を見つけたので、IntelliJの起動に使うJavaを切り替えて試してみました。
IntelliJ IDEA 2019.2等でmacOS環境において日本語入力中に発生する問題と回避策
IntelliJにバンドルされている(デフォルトで起動に使われる)Javaは、こちら。
jbr/bin/java --version openjdk 11.0.5 2019-10-15 OpenJDK Runtime Environment (build 11.0.5+10-b520.17) OpenJDK 64-Bit Server VM (build 11.0.5+10-b520.17, mixed mode)以下のドキュメントを見て、今回は環境変数で設定する方法を選択。
Change boot Java runtime for IntelliJ IDEA
IntelliJ IDEAの起動Javaランタイムを変更する
OpenJDK 8で起動するようにしました。
$ IDEA_JDK=/usr/lib/jvm/java-1.8.0-openjdk-amd64今回は、これで解決、と。
- 投稿日:2020-01-20T15:52:37+09:00
Teratermで自動SSHログインするためにとりあえずttlファイルにこれを書く
TeraTermでLinuxサーバにログインするときに聞かれるユーザー名とパスワードを、いちいち入力することが面倒な時は、自動ログインマクロを作っておくと楽です。
以下、SSHでログインする場合のソースを置きましたので、コピー&ペースト後、username,hostname,passwordを各々書き込んで、「ttlファイル」に保存してご利用ください。
鍵が必要であったり、プロキシを通過するようなケースですと、別個編集が必要となります。
username = '' #ログインユーザー名 hostname = '' #ホスト名(IPアドレスの場合が多い) password = '' #ログインパスワード msg = hostname strconcat msg ':22 /ssh /2 /auth=password /user=' strconcat msg username strconcat msg ' /passwd=' strconcat msg password connect msg
- 投稿日:2020-01-20T15:22:44+09:00
ディレクトリのシンボリックリンクを補完した時,末尾に"/"をつける
スラッシュつかない問題
シンボリック作成
$ ln -s /path/to/target/dir_name ~/dir_name2回Tabを押さないとスラッシュがつかない。
$ cd dir_na [Tab] $ cd dir_name [Tab] $ cd dir_name/解決
ホームディレクトリの
.inputrc
にset mark-symlinked-directories on
を記述。
私はファイル自体がなかったので作りました。$ echo "set mark-symlinked-directories on" >> ~/.inputrc若干の弊害
シンボリックを
rm
する時に/
がついてしまうと、実態を消そうとしてしまう。
誤って実体を消してしまわないように注意。# これのつもりが $ rm dir_name # 間違える可能性 $ rm dir_name/ rm: cannot remove 'dir_name/': Is a directory参考文献
- 投稿日:2020-01-20T08:55:08+09:00
Dockerとディスプレイを接続して画像を表示
はじめに
Docker上でOpenCV等のビジョン系ライブラリを使用する時は、DockerコンテナとローカルPCのディスプレイを接続する必要がありますが、この方法が分からず結構な時間を要してしまいましたので、途中で遭遇したトラブルとその解決策を含めてまとめていきたいと思います!
開発環境
Ubuntuです!詳細は下記コマンドでチェックしておきます!
$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=18.04 DISTRIB_CODENAME=bionic DISTRIB_DESCRIPTION="Ubuntu 18.04.3 LTS" $ arch x86_64Dockerイメージのダウンロード
まずはDocker HubからDockerイメージをダウンロードします。Docker Hubで公開されているDockerイメージは、自由にダウンロード、保存することができます。
$ docker pull ubuntu:18.04Dockerコンテナのデプロイ
保存済みのDockerイメージを用いて、Dockerコンテナを立ち上げます。Dockerコンテナをデプロイする際、様々なオプションがあります[1][2]。
今回使用するオプションは、-it
、--privileged
、--env
、--volume
、--name
です。
まず-it
により、Dockerコンテナに対して擬似端末(pseudo terminal)を割り当てることで、Dockerコンテナ上でBashを使用できるようにします。
続いて--privileged
により、全てのデバイスに対するアクセスを許可します。
--env
では、Dockerコンテナ内で使用する環境変数を指定します。
--volume
では、ホストOSのディレクトリをゲストOSにマウントすることができます[3]。
--name
ではコンテナ名を指定することができます。$ docker run -it \ --privileged \ --env="DISPLAY=$DISPLAY" \ --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \ --volume="$HOME/ws/:/home/" \ --name="ubuntu_cv2" \ ubuntu:18.04パッケージのインストール
まずはUbuntuお決まりのアップデート、アップグレードです。
# apt-get update# apt-get upgrade続いて、エディタとしてVimをインストールしておきます。
# apt-get install vimプログラミング言語にはPythonを使用します。
# apt-get install python3.6 \ python3-dev \ python3-pip \ libffi-dev \ libssl-devpipを使用してOpenCVをインストールします。
# pip3 install opencv-python画像表示プログラムを作成
OpenCVを使用して画像を表示する基本的なプログラムを作成しておきます。
open_image.pyimport cv2 # Load an color image img = cv2.imread('test.jpg') # Show the image cv2.imshow('image',img) # Stop when 0 pressed cv2.waitKey(0) cv2.destroyAllWindows()トラブル1:OpenCVを正しくインポートできない
まずPythonを実行して、OpenCVが正しくインポートできるかテストしてみます。
# python3 >>> import cv2 Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/local/lib/python3.6/dist-packages/cv2/__init__.py", line 3, in <module> from .cv2 import * ImportError: libSM.so.6: cannot open shared object file: No such file or directory案の定、エラーによりOpenCVをインポートできません。このエラーは、
libsm6
、libxext6
、libxrender-dev
のインストール[4]により解決できます。# apt-get install -y libsm6 libxext6 libxrender-devインストール後、もう一度OpenCVをインポートできるかテストしてみます。
# python3 >>> import cv2OKですね!
トラブル2:画像を表示できない
先程作成した
open_image.py
を実行してみましょう。# python3 open_image.py No protocol specified : cannot connect to X server :1PCとのディスプレイ接続に失敗しているようです。ホストPC側で、ゲストPCからのホストPCディスプレイへの接続要求を拒否していることが理由でした。別のターミナルを開けて、ホストPC側で下記コマンドを実行すると、ディスプレイへの接続を許可[5][6][7]することができます。
$ xhost + access control disabled, clients can connect from any host再度Dockerコンテナを実行していたターミナルに戻り、
open_image.py
を実行してみましょう。# python3 open_image.py X Error: BadAccess (attempt to access private resource denied) 10 Extension: 130 (MIT-SHM) Minor opcode: 1 (X_ShmAttach) Resource id: 0x247 ...別のエラーが出てきました。エラー原因を調査したところ、環境変数に
QT_X11_NO_MITSHM=1
を追加することで解決できるそうです。まずは.bashrc
ファイルをVimで開きます。# vim ~/.bashrc続いて、環境変数
QT_X11_NO_MITSHM=1
を追記します。export QT_X11_NO_MITSHM=1
.bashrc
ファイルを保存した後、環境変数の追加を反映させるため、source
コマンド[8]を実行します。# source ~/.bashrc
echo
コマンドを使用して、環境変数が正しく追加されているか確認してみましょう。# echo $QT_X11_NO_MITSHM 1OKですね!三度目の正直です。
open_image.py
を実行してみましょう!# python3 open_image.py画像が表示されました!!!
おわりに
様々なトラブルがありましたが、無事にDockerコンテナとPCディスプレイを接続して、OpenCVにより画像を表示させることができました。今回の検証より、Dockerコンテナをデプロイする際には、下記のように環境変数
QT_X11_NO_MITSHM=1
を追加しておくと良いことも分かりました。$ docker run -it \ --privileged \ --env="DISPLAY=$DISPLAY" \ --env="QT_X11_NO_MITSHM=1" \ --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \ --volume="$HOME/ws/:/home/" \ --name="ubuntu_cv2" \ ubuntu:18.04これからDockerマスターを目指して頑張っていこうと思います!
読んで頂いた方々、ありがとうございます!!!参考文献
[1] Docker run options, https://docs.docker.com/v17.12/edge/engine/reference/commandline/run/
[2] Example of docker run, https://qiita.com/tnarihi/items/275c009e9dec1306893f
[3] How to mount on docker, https://docs.docker.com/v17.09/engine/admin/volumes/bind-mounts/
[4] How to solve opencv import error, https://github.com/NVIDIA/nvidia-docker/issues/864
[5] Open X server, https://unix.stackexchange.com/questions/121716/unable-to-open-x-server
[6] Allowing computers access, https://www.stitson.com/pub/book_html/node72.html
[7] About xhost, https://wiki.archlinux.jp/index.php/Xhost
[8] Source command, https://bash.cyberciti.biz/guide/Source_command
- 投稿日:2020-01-20T08:55:08+09:00
Docker x 可視化がうまくいかずハマったのでまとめてみた!
はじめに
Docker上でOpenCV等のビジョン系ライブラリを使用する時は、DockerコンテナとローカルPCのディスプレイを接続する必要がありますが、この方法が分からず結構な時間を要してしまいましたので、途中で遭遇したトラブルとその解決策を含めてまとめていきたいと思います!
開発環境
Ubuntuです!詳細は下記コマンドでチェックしておきます!
$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=18.04 DISTRIB_CODENAME=bionic DISTRIB_DESCRIPTION="Ubuntu 18.04.3 LTS" $ arch x86_64Dockerイメージのダウンロード
まずはDocker HubからDockerイメージをダウンロードします。Docker Hubで公開されているDockerイメージは、自由にダウンロード、保存することができます。
$ docker pull ubuntu:18.04Dockerコンテナのデプロイ
保存済みのDockerイメージを用いて、Dockerコンテナを立ち上げます。Dockerコンテナをデプロイする際、様々なオプションがあります[1][2]。
今回使用するオプションは、-it
、--privileged
、--env
、--volume
、--name
です。
まず-it
により、Dockerコンテナに対して擬似端末(pseudo terminal)を割り当てることで、Dockerコンテナ上でBashを使用できるようにします。
続いて--privileged
により、全てのデバイスに対するアクセスを許可します。
--env
では、Dockerコンテナ内で使用する環境変数を指定します。
--volume
では、ホストOSのディレクトリをゲストOSにマウントすることができます[3]。
--name
ではコンテナ名を指定することができます。$ docker run -it \ --privileged \ --env="DISPLAY=$DISPLAY" \ --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \ --volume="$HOME/ws/:/home/" \ --name="ubuntu_cv2" \ ubuntu:18.04パッケージのインストール
まずはUbuntuお決まりのアップデート、アップグレードです。
# apt-get update# apt-get upgrade続いて、エディタとしてVimをインストールしておきます。
# apt-get install vimプログラミング言語にはPythonを使用します。
# apt-get install python3.6 \ python3-dev \ python3-pip \ libffi-dev \ libssl-devpipを使用してOpenCVをインストールします。
# pip3 install opencv-python画像表示プログラムを作成
OpenCVを使用して画像を表示する基本的なプログラムを作成しておきます。
open_image.pyimport cv2 # Load an color image img = cv2.imread('test.jpg') # Show the image cv2.imshow('image',img) # Stop when 0 pressed cv2.waitKey(0) cv2.destroyAllWindows()トラブル1:OpenCVを正しくインポートできない
まずPythonを実行して、OpenCVが正しくインポートできるかテストしてみます。
# python3 >>> import cv2 Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/local/lib/python3.6/dist-packages/cv2/__init__.py", line 3, in <module> from .cv2 import * ImportError: libSM.so.6: cannot open shared object file: No such file or directory案の定、エラーによりOpenCVをインポートできません。このエラーは、
libsm6
、libxext6
、libxrender-dev
のインストール[4]により解決できます。# apt-get install -y libsm6 libxext6 libxrender-devインストール後、もう一度OpenCVをインポートできるかテストしてみます。
# python3 >>> import cv2OKですね!
トラブル2:画像を表示できない
先程作成した
open_image.py
を実行してみましょう。# python3 open_image.py No protocol specified : cannot connect to X server :1PCとのディスプレイ接続に失敗しているようです。ホストPC側で、ゲストPCからのホストPCディスプレイへの接続要求を拒否していることが理由でした。別のターミナルを開けて、ホストPC側で下記コマンドを実行すると、ディスプレイへの接続を許可[5][6][7]することができます。
$ xhost + access control disabled, clients can connect from any host再度Dockerコンテナを実行していたターミナルに戻り、
open_image.py
を実行してみましょう。# python3 open_image.py X Error: BadAccess (attempt to access private resource denied) 10 Extension: 130 (MIT-SHM) Minor opcode: 1 (X_ShmAttach) Resource id: 0x247 ...別のエラーが出てきました。エラー原因を調査したところ、環境変数に
QT_X11_NO_MITSHM=1
を追加することで解決できるそうです。まずは.bashrc
ファイルをVimで開きます。# vim ~/.bashrc続いて、環境変数
QT_X11_NO_MITSHM=1
を追記します。export QT_X11_NO_MITSHM=1
.bashrc
ファイルを保存した後、環境変数の追加を反映させるため、source
コマンド[8]を実行します。# source ~/.bashrc
echo
コマンドを使用して、環境変数が正しく追加されているか確認してみましょう。# echo $QT_X11_NO_MITSHM 1OKですね!三度目の正直です。
open_image.py
を実行してみましょう!# python3 open_image.py画像が表示されました!!!
おわりに
様々なトラブルがありましたが、無事にDockerコンテナとPCディスプレイを接続して、OpenCVにより画像を表示させることができました。今回の検証より、Dockerコンテナをデプロイする際には、下記のように環境変数
QT_X11_NO_MITSHM=1
を追加しておくと良いことも分かりました。$ docker run -it \ --privileged \ --env="DISPLAY=$DISPLAY" \ --env="QT_X11_NO_MITSHM=1" \ --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \ --volume="$HOME/ws/:/home/" \ --name="ubuntu_cv2" \ ubuntu:18.04これからDockerマスターを目指して頑張っていこうと思います!
読んで頂いた方々、ありがとうございます!!!参考文献
[1] Docker run options, https://docs.docker.com/v17.12/edge/engine/reference/commandline/run/
[2] Example of docker run, https://qiita.com/tnarihi/items/275c009e9dec1306893f
[3] How to mount on docker, https://docs.docker.com/v17.09/engine/admin/volumes/bind-mounts/
[4] How to solve opencv import error, https://github.com/NVIDIA/nvidia-docker/issues/864
[5] Open X server, https://unix.stackexchange.com/questions/121716/unable-to-open-x-server
[6] Allowing computers access, https://www.stitson.com/pub/book_html/node72.html
[7] About xhost, https://wiki.archlinux.jp/index.php/Xhost
[8] Source command, https://bash.cyberciti.biz/guide/Source_command