[Work/TechInfo/other]

研究室で非公開でgitサーバを使うためにGitBucket / 2017-02-02 (木)

はじめに

うちの学校・学部というかうちのコースでは,ポリシー上「許可を得ずに作品をネット上に公開する」ことができない.ソースコードが「作品」に含まれるかはビミョーだが,当然そのポリシーがない学校や研究室によっても,プロジェクトによっては公開できないこともある.

そこでTomcat上で動作するWebインタフェースを持つGitサーバGitBucketを用いる.

もちろん普通にgitサーバを立ち上げてもいいのだが,GitBucketはもともとgithubクローンとして開発されていた(現在はgithubからのクレームによりユーザインタフェースが変更されているが,基本的には同じ)ためWebインタフェースを持ち,githubと同じ感覚で使うことができる.

おまけに(うちではNISで提供されている)Unixユーザとgitユーザの切り分けもできる.

Ubuntu 16.04LTSでのインストールと設定

Oracle Java8のインストール

GitBucketはTomcatをJava8で動かすことを要求する.

普通にaptのレポジトリにppa:webupd8team/javaを追加して,apt updateinstall

$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt update
$ sudo apt install oracle-java8-installer

途中で「いいえ」「はい」の選択があるが,内容を読めばわかる通り「はい」を選択.システムで使用するJDKの選択も自動的にしてくれる.

Tomcat 8のインストール

$ sudo apt install tomcat8

で普通に入る.

GitBucketのインストール

GitBucketはTomcatのプロジェクト実行アーカイブ形式gitbucket.warという形で配布されている.単にこの.warファイル(2017年2月頭現在のGitBucketのバージョンは4.9)を/var/lib/tomcat8/webapps/以下に配置することで,デプロイ状態となる.

$ cd /var/lib/tomcat8/webapps/
$ sudo curl -L -O https://github.com/gitbucket/gitbucket/releases/download/4.9/gitbucket.war

GitBucketが設定やレポジトリの保管に使うディレクトリを作成し,そのディレクトリのオーナー,グループをtomcat8に変更しておく.

$ sudo mkdir /usr/share/tomcat8/.gitbucket
$ sudo chown tomcat8:tomcat8 /usr/share/tomcat8/.gitbucket

Tomcat8を起動.

$ systemctl restart tomcat8

sudoをつけないでsystemctlを実行すると「誰で実行するか」訊かれるので,管理アカウントがある場合(例えば安藤の場合はwheelというかsudoersに入っている「daichi」アカウントで通常作業をするのだが,その他にシステム全体の管理者として「linuxadmin」のようなアカウントを作って,システムはそのユーザの所有にしてある.),管理アカウントを選択してsystemctlを使うのが良さそう.

これはこの間のOneDriveデーモンをsystemdで管理する時にわかったのだけれど,systemdはユーザモードというかそういう感じのものを持っていて,sudoersに所属するユーザがsudoを使ってsystemctlを使っても「ユーザがsystemctlを叩いた」意味になるっぽい.

Tomcat8の自動起動の設定.

$ systemctl enable tomcat8.service

とすると,

tomcat8.service is not a native service, redirecting to systemd-sysv-install
Executing /lib/systemd/systemd-sysv-install enable tomcat8

当たり前だけどnativeサービスではないので,勝手にsystemd-sysv-install enable tomcat8が呼ばれるらしい.

自動起動されることを確認するために,再起動して,host名:8080/gitbucket/にアクセスすると,

このような初期画面が出てくる.root/rootでログインできるので,ログインしてパスワード変更,ユーザ追加(GitBucketの場合ユーザはLinuxユーザからは独立している)等の設定を行う.

[ ツッコミの受付は終了しています ]
この記事のリンク元 | 21 |

[Work/TechInfo/other]

シェル芸事例 / 2017-01-11 (水)

grepしてsedで置き換え

$ grep -l '置換対象の文字列' ./hoge* | xargs sed -i.bak -e 's/置換対象の文字列/置換後の文字列/g'

xargsは「`」と同じ役割を果たす.


[Work/TechInfo/other]

ソースからインストールしたNode.jsのPREFIXにシンボリックリングがある場合のmake uninstall / 2017-01-04 (水)

自分の環境ではホーム以下にシンボリックリンクが多い

自分の環境は,どのOSでも「~/Utils」以下にbin, etc, lib, include, share, src, site-lisp, libexec, info等のシンボリックリンクがあり,これが「~/Dropbox/Utils/OSX/bin」「~/Dropbox/Utils/Windows/bin」などOSごとに作ってあるディレクトリの実体へ張られている.

つまり,Dropbox以下に自分が必要なツールは基本全て入っていて,そこからそのマシンに必要なUnixファイルツリーをシンボリックリンクで貼ってくる,という形をとっている. (dotfilesも~/Dropbox/Utils/Dotfiles/(例えば).bashrcに実体があり,~/.bashrcはシンボリックリンク..bashrc内部で各OSやマシンごとに条件分岐させている.)

そのため,ソースからmake installする場合(OSXでもbrewなどは使わないため,わりと多い),

$ cd ~/Utils/src/node-v0.12.1
$ ./configure --prefix="/Users/daichi/Utils"

という感じで~/Utils以下をprefixとして,makeしてmake installする.

Node.jsはmake installでpythonスクリプトを呼んでいる

ところがNode.jsの場合,make installやmake uninstallの内部ではpythonスクリプトを呼び出している.make install時には何も問題が起きないが,make uninstallしようとしたら,

myMac:~/Utils/src/node-v0.12.1 daichi$ make uninstall
/usr/bin/python tools/install.py uninstall '' '/Users/daichi/Utils'
removing /Users/daichi/Utils/bin/node
Traceback (most recent call last):
  File "tools/install.py", line 202, in 
    run(sys.argv[:])
  File "tools/install.py", line 198, in run
    if cmd == 'uninstall': return files(uninstall)
  File "tools/install.py", line 130, in files
    action(['out/Release/node'], 'bin/node')
  File "tools/install.py", line 80, in uninstall
    def uninstall(paths, dst): map(lambda path: try_remove(path, dst), paths)
  File "tools/install.py", line 80, in 
    def uninstall(paths, dst): map(lambda path: try_remove(path, dst), paths)
  File "tools/install.py", line 77, in try_remove
    try_rmdir_r(os.path.dirname(target_path))
  File "tools/install.py", line 52, in try_rmdir_r
    os.rmdir(path)
OSError: [Errno 20] Not a directory: '/Users/daichi/Utils/bin'
make: *** [uninstall] Error 1

make uninstallから呼ばれているPythonスクリプトに怒られた.  

どうやらOSXにおいては,シンボリックリンクはPythonにとってディレクトリじゃないらしい.

解決法 シンボリックリンクを含まないフルパスでconfigureし直す

いかんせん内部でpythonスクリプトが呼ばれているため,シンボリックリンクを含まないフルパスでconfigureし直してmake uninstallできるか確証は無かったが,

$ ./configure —prefix =“/Users/daichi/Dropbox/Utils/OSX”
$ make uninstall

で無事にmake uninstallが通った.


[Work/TechInfo/other]

Ubuntu 14.04とTomcat7,Oracle Java8のインストールと起動 / 2016-02-04 (木)

2016年2月初めの段階では,apt-getではTomcat8は落ちてこないので,Tomcat7を使う.

Oracle Javaのインストール

まずOracle Javaのリポジトリを追加し,apt-getで入れられるようにする.

$ sudo add-apt-repository ppa:webupd8term/java
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer

途中で規約をに同意するか訊いてくるので答える.

それが終わったら,Java周りの環境変数をOracle Javaに一発で整えてくれるパッケージもインストールする.

$ sudo apt-get install oracle-java8-set-default

終わったらjavaのバージョンを確認しておくこと.

Tomcat7のインストールと起動

そのままapt-getで入る.

$ sudo apt-get install tomcat7

インストールが終わったら,/etc/init.d/tomcat7のJDK_DIRSを編集.最後に

/usr/lib/jvm/java-8-oracle

を追加する.

$ sudo service tomcat7 restart

でTomcatを起動し,http://localhost:8080にブラウザでアクセス.

上図のようなTomcatが動作確認画面が得られる.

TomcatのWebマネージャのインストールと設定

$ sudo apt-get install tomcat7-admin

で,TomcatのWebマネージャをインストールする.

/etc/tomcat7/tomcat-users.xmlを編集する.設定は全てコメントアウトされているので,以下の状態になるように書く.このときusernameとpasswordは適切に設定すること.

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
   <role rolename="manager-gui" />
   <user username="admin" password="pass" roles="manager-gui" />
</tomcat-users>

Tomcatのサービスを再起動する.

$ sudo service tomcat7 restart

http://localhost:8080/manager/htmlにブラウザでアクセスし,上記で設定したusernameとpasswordを入力するとWebマネージャの画面が得られる.

.warファイルのデプロイ

Eclipseなどで作成した.warファイル(開発した一式をまとめたファイル)を,Webマネージャ画面の「WARファイルの配備」からアップロードしてやるとデプロイできる

[ ツッコミの受付は終了しています ]
この記事のリンク元 | 2 | 2 |

[Work/TechInfo/other]

MinGW+MSYSもしくはMinGW+CMD.EXEでのOpenCVのコンパイル / 2015-01-15 (木)

概要

OpenCVをWindows環境でコンパイルしようと思った時に,標準パッケージではVisual Studio用のライブラリしかついてこない.
ソースコードも付いてくる,そしてCMake用のListも付いてくるので,サクッとMinGW用にコンパイルした……はずなのだが,ハマった.
理由を推測するに,どうやら,cmd.exeで実行する場合とMSYSで実行する場合とで,cmakeで生成される設定が異なり(つまり違うバイナリが生成され),これが自分のプログラムのコンパイル時のリンカの挙動に影響するようだ.(パスの渡し方とかだろうか?).

というわけでこの記事には,

  1. MSYSからコマンドを叩いてコンパイルする場合
  2. cmd.exeからコマンドを叩いてコンパイルする場合

の2通りを書く.

必要なもの

  • cmake Installerでもいいし,zipでもよい.環境変数でパスを通しておく.
  • OpenCVのWindowsパッケージ この記事では2.4.10で行っている.
  • MinGWとMSYSのセットアップが終わっていること

この際注意すべきは,cmakeはWindows Vista以降のシンボリックリンクをどうやら認識してくれない,ということ.
環境変数にパスを設定する場合には,シンボリックリンクを含まないパスで記述する.

OpenCVのWinパックは,自己解凍exeになっているので,展開するとこんな感じ.
Visual Studioならそのまま使えるライブラリが,build/x86/vc10,vc11,vc12に入っているが,VisualStudioを使うなんて当然却下である.

OpenCVのWindowsパッケージを展開したところ.

OpenCVそのもののビルド

cmake-gui.exeを起動する.
「Where is the source code:」に,opencvを展開したディレクトリのsourceディレクトリを指定.

「Where to build the binaries:」に,opencvを展開したディレクトリのbuild/x86以下に,buildする先を書く.
ここではC:\Users\daichi\Downloads\opencv\build\x86以下となる.

CMD.EXEから叩きたい場合は「cmd_exe_mingw」みたいな感じで指定.

cmake-guiのSourceディレクトリとbuild先ディレクトリの指定 CMD.EXEの場合

MSYSのbashから叩きたい場合は「msys_bash_mingw」みたいな感じで指定.

cmake-guiのSourceディレクトリとbuild先ディレクトリの指定 MSYSの場合

「Configure」ボタンを押すと,ディレクトリを作っていいかの確認が行われ,

ディレクトリを作っていいかの確認.CMD.EXEの場合 ディレクトリを作っていいかの確認.MSYSの場合

その後に生成するMakefileのターゲットを訊いてくる.

CMD.EXEから叩きたい場合は「MinGW Makefiles」を指定.

cmake-guiの生成するMakefileの指定.CMD.EXEの場合

MSYSから叩きたい場合は「MSYS Makefiles」を指定.

cmake-guiの生成するMakefileの指定.MSYSの場合

「Use default native compilers」を選択して「Finish」

何回か止まることがあるが,その度ごとにConfigureを押していけば問題がない.

ただし,特にCMD.EXEを使う場合,上記のシンボリックリンクを含んだパスに注意すること.
これは何度押しても解決しないか,あとのmakeの時にエラーを吐く.
なので,Configureが通っても,Valueで検出されたパスがシンボリックリンクを含んでいるパスになった場合,「Configureで一度検出された後,Generateを押す前」に,「Value」の欄のパスを適切に修正する必要がある.
(正確には./configureがもう一度やり直されるのだが)

CMD.EXEの場合,シンボリックリンクを含んだパスは修正する.

Configureが終わったら「Generate」を押すと,Makefileが生成される.

Makefileができたら,CMD.EXEかMSYSのbashで,指定したbuild先にMakefileがあることを確認したら,makeを実行する.

この時,CMD.EXEを使っている場合にはmingw32-makeコマンドを,MSYSの場合はmakeコマンドを叩く.

mingw32-makeコマンドを実行.CMD.EXEの場合 makeコマンドを実行.MSYSの場合

こんな感じでビルドが進行していく.

ビルドの進行状況.CMD.EXEの場合 ビルドの進行状況.MSYSの場合

自分のソースコードファイルのコンパイル

上でビルドした場所からインクルードファイルやライブラリファイルを動かしてないとして,

CMD.EXEから叩く場合は以下のように.

mingw32-g++ CPPファイル名 ^
-Ic:\Users\daichi\Downloads\opencv\build\include ^
-Lc:\Users\daichi\Downloads\opencv\build\x86\cmd_exe_mingw ^
-lopencv_(ライブラリディレクトリにある限りのライブラリ名)2410 ^
-o 出力ファイル名 -static-libgcc -static-libstdc++

MSYSから叩く場合は以下のように.

g++ CPPファイル名 \
-I/c/Users/daichi/Downloads/opencv/build/include \
-L/c/Users/daichi/Downloads/opencv/build/x86/msys_bash_mingw \
-lopencv_(ライブラリディレクトリにある限りのライブラリ名)2410 \
-o 出力ファイル名 -static-libgcc -static-libstdc++

*.dll.aなるライブラリファイルができているのでスタティックリングができるのかと思いきや,安藤が今の所確認している限りできないので,素直にダイナミックリンクのみにすべきである.
つまり,-staticオプションは絶対につけない.
ダイナミックリンクなので,当然実行ファイルと同じ場所かパスが通っている場所に,ビルドされたlibopencv_*.dllを全部コピーする必要がある.

「(ライブラリディレクトリにある限りのライブラリ名)」というのは,OpenCVはライブラリが細かく分かれているので,どれを指定したらいいのか,インクルードしているヘッダファイルからは判別がつかないことがあるから(特にVer.1系の機能を使うと).
具体的には,

-lopencv_core2410 -lopencv_highgui2410 -lopencv_*2410 -lopencv_*2410 ...

と全部列挙する感じである.
面倒くさいので,Makefileを書いた方が精神的にもよっぽど良いだろう.

[ ツッコミの受付は終了しています ]
この記事のリンク元 | 7 | 1 |