前々からautoconfではなく、cmakeでのビルドを推奨していたLLVMだが、ついにautoconfのサポートが無くなってしまった。
そこでcmakeでのARMクロスコンパイラのビルド方法を記載しておく。
(1)LLVM(Clang含む)のソースコード一式を適当なフォルダに展開する
展開の仕方は公式のGetting startedを参照
(2)LLVMのフォルダとは別の場所にビルドフォルダを作成し移動する.
(3)以下のようにcmakeを実行すればMakefileが生成される
cmake <LLVMフォルダパス> -DCMAKE_CROSSCOMPILING=True -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD="ARM;AARCH64" -DCMAKE_INSTALL_PREFIX=<ビルドしたバイナリのインストール先パス> -DLLVM_TARGET_ARCH=ARM -DLLVM_DEFAULT_TARGET_TRIPLE=arm-none-eabi
(4)make; make install
2016年10月31日月曜日
2016年8月11日木曜日
ARMクロスコンパイル用clang その2
ARMクロスコンパイル用clangの続き
普段使っているのがWindowsなのでWindows上でもARMクロスコンパイルclangを作成して見る
自作OS向けなのでベアメタルビルドでOK。
ライブラリ無しのコンパイラのみなのでビルドはシンプル。
普段使っているのがWindowsなのでWindows上でもARMクロスコンパイルclangを作成して見る
自作OS向けなのでベアメタルビルドでOK。
ライブラリ無しのコンパイラのみなのでビルドはシンプル。
■準備
msys2 32bit版を導入
(1) https://msys2.github.io/ から msys2-i686-[hhhhmmdd].exe をダウンロードして実行する
(2) メニューからMinGW-w64 Win32 shellを選択してターミナルを出す
(3) ターミナルからシステムアップグレード
pacman -Syu --noconfirm
(4) ターミナルを1度閉じる
(5) エクスプローラから C:\msys32\mingw32.exe を実行する
アップグレードするとメニューからのターミナル起動ショートカットがなぜか効かなくなるので直接実行
(6) clangビルドに必要なパッケージをインストール
pacman -S base-devel mingw-w64-i686-toolchain python --noconfirm
■binutils, clangをビルド
ビルド用スクリプトbuild-arm-clang.shを用意
(使用方法)
build-arm-clang.sh [binutilsバージョン] [llvm/clangバージョン]
何も指定しないとbinutils-2.27, llvm-3.8.1 になる
(使用方法)
build-arm-clang.sh [binutilsバージョン] [llvm/clangバージョン]
何も指定しないとbinutils-2.27, llvm-3.8.1 になる
2016年7月30日土曜日
Nginx + Redmine
■前提
nginx, Redmine(ruby, bundler, unicorn含む)はインストール済みとする
■nginxの設定
/etc/nginx/sites-available のサーバー設定に以下を追加
upstream unicorn {
server unix:[redmineインストールパス]/tmp/unicorn.sock fail_timeout=0;
}
server {} の中に locationを追加
location /redmine {
alias [redmineインストールパス]/public;
try_files $uri/index.html $uri.html $uri @unicorn;
}
location @unicorn {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://unicorn;
}
■Redmineの設定
sub-uri /redmine で動作するように若干変更
[redmineインストールパス]/config/routes.rb の以下の部分を変更
(変更前)
Rails.application.routes.draw do
root :to => 'welcome#index', :as => 'home'
・
・
・
end
(変更後)
Redmine::Utils::relative_url_root="/redmine"
Rails.application.routes.draw do
scope Redmine::Utils::relative_url_root do
root :to => 'welcome#index', :as => 'home'
・
・
・
end
■Redmineの起動
■nginx再起動
service nginx restart
nginx, Redmine(ruby, bundler, unicorn含む)はインストール済みとする
■nginxの設定
/etc/nginx/sites-available のサーバー設定に以下を追加
upstream unicorn {
server unix:[redmineインストールパス]/tmp/unicorn.sock fail_timeout=0;
}
server {} の中に locationを追加
location /redmine {
alias [redmineインストールパス]/public;
try_files $uri/index.html $uri.html $uri @unicorn;
}
location @unicorn {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://unicorn;
}
■Redmineの設定
sub-uri /redmine で動作するように若干変更
[redmineインストールパス]/config/routes.rb の以下の部分を変更
(変更前)
Rails.application.routes.draw do
root :to => 'welcome#index', :as => 'home'
・
・
・
end
(変更後)
Redmine::Utils::relative_url_root="/redmine"
Rails.application.routes.draw do
scope Redmine::Utils::relative_url_root do
root :to => 'welcome#index', :as => 'home'
・
・
・
end
end
■Redmineの起動
cd [redmineインストールパス]
bundle exec unicorn -c config/unicorn.rb -E production -D
これでunicorn経由でRedmineがデーモン状態で立ち上がる
■nginx再起動
service nginx restart
2016年2月14日日曜日
Gitoliteサーバ
■サーバ設定
・/var/lib/gitolite3/.gitolite.rc
UMASK 0700がデフォルト(rwx --- ---)。
redmine等の管理システムからリポジトリ参照したい場合は0027(rwxr-x---)としてグループからの読み込みも許可しておく
こうしないとgit でpushするたびにredmineからリポジトリ参照できなくなる
App 13972 stderr: fatal: Failed to resolve HEAD as a valid ref.
App 13972 stderr: fatal: Not a valid object name HEAD:
こんな感じのエラーログが出る。
■ユーザー追加
・Unixユーザー追加
・/var/lib/gitolite3/.gitolite.rc
UMASK 0700がデフォルト(rwx --- ---)。
redmine等の管理システムからリポジトリ参照したい場合は0027(rwxr-x---)としてグループからの読み込みも許可しておく
こうしないとgit でpushするたびにredmineからリポジトリ参照できなくなる
App 13972 stderr: fatal: Failed to resolve HEAD as a valid ref.
App 13972 stderr: fatal: Not a valid object name HEAD:
こんな感じのエラーログが出る。
■ユーザー追加
・Unixユーザー追加
useradd [ユーザーID]
passwd [ユーザーID]
・SSHキーペア生成
ssh-keygen -t rsa -b 2048
パスフレーズ入力して作成完了
id_rsa(秘密鍵), id_rsa.pub(公開鍵)の2つが生成される。
・gitoliteに追加
gitolite.conf のアクセスリポジトリにユーザーと権限追加
keydirフォルダに公開鍵を追加
ubuntu 14.04 + nginx + SSL立ち上げ
■apt準備
/etc/apt/sources.list に以下を追加
deb http://nginx.org/packages/ubuntu/ trusty nginx
deb-src http://nginx.org/packages/ubuntu/ trusty nginx
■パッケージインストール
apt-get update
apt-get install nginx
■設定
nginxのサイト設定は以下のどちらかのフォルダに設定することが出来る。
/etc/nginx/conf.d
/etc/nginx/sites-available
運用方針は人それぞれだが共通設定をconf.dに置き、サイト設定はsites-availableに置く。
有効にするサイト設定は/etc/nginx/sites-enabled/からシンボリックリンクを貼る
(1)サーバー共通設定作成
nginxのサイト設定は以下のどちらかのフォルダに設定することが出来る。
/etc/nginx/conf.d
/etc/nginx/sites-available
運用方針は人それぞれだが共通設定をconf.dに置き、サイト設定はsites-availableに置く。
有効にするサイト設定は/etc/nginx/sites-enabled/からシンボリックリンクを貼る
(1)サーバー共通設定作成
/etc/nginx/conf.d/default.conf を拡張子を変えて保存
/etc/nginx/conf.d/example_ssl.confを拡張子を変えて保存
/etc/nginx/conf.d/default.conf を新たに作成し中身を以下にする
========== ここから ==========
server {
listen 80;
listen [::]:80;
# httpへのアクセスをhttpsへリダイレクトする
# return 301 https://$host$request_uri; <= 後でコメントをはずす
}
========== ここまで ==========
========== ここから ==========
server {
listen 80;
listen [::]:80;
# httpへのアクセスをhttpsへリダイレクトする
# return 301 https://$host$request_uri; <= 後でコメントをはずす
}
========== ここまで ==========
(2)PFS用パラメータを生成
mkdir /etc/nginx/ssl
cd /etc/nginx/ssl
openssl dhparam 2048 -out dhparam.pem
mkdir /etc/nginx/ssl
cd /etc/nginx/ssl
openssl dhparam 2048 -out dhparam.pem
■サイト設定
(1)サイト設定の有効化
/etc/nginx/nginx.confの末尾に以下を追加
include /etc/nginx/sites-enabled/*;
(2)サイト設定の作成
(1)サイト設定の有効化
/etc/nginx/nginx.confの末尾に以下を追加
include /etc/nginx/sites-enabled/*;
(2)サイト設定の作成
/etc/nginx/sites-available/defaultのコピーを作成する
root および server_name を適宜設定
apache2からの移行ならroot は /var/www/html で良いかもしれない
(3)サイト設定の有効化
cd /etc/nginx/sites-enabled
ln -s /etc/ngingx/sites-available/<(2)でコピーしたサイト>
■let's encryptインストール
sudo su
cd /usr/share <= どこか適当な場所でよい
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto --help
依存関係が自動でインストールされてヘルプが表示されれば成功
■証明書取得
./letsencrypt-auto certonly --webroot -w <WEBファイルルートフォルダ> -d <サイトドメイン名> -d www.<サイトドメイン名> -m <管理者メールアドレス> --agree-tos
www.<サイトドメイン名>オプションは必要に応じて。無くてもいい。
取得に成功すると /etc/letsencrypt/live/<ドメイン名>/に証明書ファイルが保存される。
保存されるのは以下4ファイル
cert.pem
chain.pem
fullchain.pem
privkey.pem
■nginx SSL設定
(1)SSL設定
/etc/nginx/sites-available/ssl を作成し中身を以下にする
========== ここから ==========
root <WEBファイルルートフォルダ>;
index index.html;
# Perfect Forward Security (PFS)用パラメータ
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
# Online Certificate Status Protocol(OCSP)有効化
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8;
# HTTP Strict Transport Security(HSTS)有効化
add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains;';
}
root および server_name を適宜設定
apache2からの移行ならroot は /var/www/html で良いかもしれない
(3)サイト設定の有効化
cd /etc/nginx/sites-enabled
ln -s /etc/ngingx/sites-available/<(2)でコピーしたサイト>
■let's encryptインストール
sudo su
cd /usr/share <= どこか適当な場所でよい
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto --help
依存関係が自動でインストールされてヘルプが表示されれば成功
■証明書取得
./letsencrypt-auto certonly --webroot -w <WEBファイルルートフォルダ> -d <サイトドメイン名> -d www.<サイトドメイン名> -m <管理者メールアドレス> --agree-tos
www.<サイトドメイン名>オプションは必要に応じて。無くてもいい。
取得に成功すると /etc/letsencrypt/live/<ドメイン名>/に証明書ファイルが保存される。
保存されるのは以下4ファイル
cert.pem
chain.pem
fullchain.pem
privkey.pem
■nginx SSL設定
(1)SSL設定
/etc/nginx/sites-available/ssl を作成し中身を以下にする
========== ここから ==========
server {
listen 443 ssl;
listen [::]:443 ssl;
listen [::]:443 ssl;
server_name <サーバーのドメイン名>;
root <WEBファイルルートフォルダ>;
index index.html;
ssl_certificate /etc/letsencrypt/live/<ドメイン名>/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/<ドメイン名>/privkey.pem;
ssl_certificate_key /etc/letsencrypt/live/<ドメイン名>/privkey.pem;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
# サーバ側の暗号化スイートを優先する
ssl on;
# SSLプロトコルを安全なものだけ指定
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# 暗号化アルゴリズムはサーバーが指定.
ssl_prefer_server_ciphers on;
# 具体的に使うアルゴリズム以外は無効に設定
ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:!EXPORT:!DES:!3DES:!MD5:!RC4:!DSS:!SHA1;
# Perfect Forward Security (PFS)用パラメータ
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
# Online Certificate Status Protocol(OCSP)有効化
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8;
# HTTP Strict Transport Security(HSTS)有効化
add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains;';
}
========== ここまで ==========
(2)80ポートの扱い変更
最初に作成した/etc/nginx/conf.d/default.confの末尾のコメントをはずしポート80へのhttpアクセスはポート443のhttpsにリダイレクトする
この設定はお好みで。80をふさぐ場合は設定そのものを消す
■nginx起動
service nginx restart
■セキュリティ状態の確認
https://www.ssllabs.com/ssltest/index.html
ドメイン名を入力してテストしてもらう
■let's encrypt 証明書自動更新
/etc/cron.monthly/letsencrypt.shを作成
========== ここから ==========
#!/bin/sh
/usr/share/letsencrypt/letsencrypt-auto renew --force-renew
service nginx reload
========== ここまで ==========
(2)80ポートの扱い変更
最初に作成した/etc/nginx/conf.d/default.confの末尾のコメントをはずしポート80へのhttpアクセスはポート443のhttpsにリダイレクトする
この設定はお好みで。80をふさぐ場合は設定そのものを消す
■nginx起動
service nginx restart
■セキュリティ状態の確認
https://www.ssllabs.com/ssltest/index.html
ドメイン名を入力してテストしてもらう
■let's encrypt 証明書自動更新
/etc/cron.monthly/letsencrypt.shを作成
========== ここから ==========
#!/bin/sh
/usr/share/letsencrypt/letsencrypt-auto renew --force-renew
service nginx reload
========== ここまで ==========
[Grails] postgresql エラーメッセージ
例外発生時に文字化け
■対策
メッセージのロケール設定が悪いため発生。日本語だと厳しいので英語化
Windows:
C:\Program Files\PostgreSQL\9.1\data\postgresql.conf
Linux:
/etc/pgsql/postgresql.conf
lc_messages = 'Japanese_Japan.932' となっているのを lc_messages='C' にする
■対策
メッセージのロケール設定が悪いため発生。日本語だと厳しいので英語化
Windows:
C:\Program Files\PostgreSQL\9.1\data\postgresql.conf
Linux:
/etc/pgsql/postgresql.conf
lc_messages = 'Japanese_Japan.932' となっているのを lc_messages='C' にする
■Grails 2.4.0
・2.3.xからの変更点
upgradeコマンドが無くなった。
→バージョンアップはset-application-versionコマンドで行うこと
またはapplication.propertiesを開いてバージョンを手動で上げる。このファイルを保存すると自動でアップデートが走り出す。
■spring-security-core
・1.xからの変更点
パッケージが変更。grails.plugin.springsecurity.annotation.Securedが基本になった
さらにメソッドに対してのみ@Securedアノーテーションが使用可能に。
→web flowに対して設定できなくなった。さてどうしよう。
Login/LogoutControllerがプラグイン埋め込みになった。自動生成スクリプトが無くなった。
→自作のControllerに変更は可能。Config.groovyで指定するらしい
・2.3.xからの変更点
upgradeコマンドが無くなった。
→バージョンアップはset-application-versionコマンドで行うこと
またはapplication.propertiesを開いてバージョンを手動で上げる。このファイルを保存すると自動でアップデートが走り出す。
■spring-security-core
・1.xからの変更点
パッケージが変更。grails.plugin.springsecurity.annotation.Securedが基本になった
さらにメソッドに対してのみ@Securedアノーテーションが使用可能に。
→web flowに対して設定できなくなった。さてどうしよう。
Login/LogoutControllerがプラグイン埋め込みになった。自動生成スクリプトが無くなった。
→自作のControllerに変更は可能。Config.groovyで指定するらしい
Ubuntu 12.04 へのドメイン名の反映
■さくら VPS設定
・ドメイン名登録
コントロールパネル画面右上の「ネームサーバ登録」を選択。取得したドメイン名をテキストフィールドに入力して送信。
そうすると自動でさくらのDNSに登録される。
www. mail. などのサブドメインも登録してくれる。
・逆引き登録
コントロールパネルの右「設定」から「ホスト名逆引き登録」を選択
標準ホスト名にチェックが付いているが、カスタムに変更して取得したドメイン名を入力する
■Ubuntu設定
12.04からresolverの設定方法が変更になったらしい。
/etc/network/interfaces にresolver情報も記述する.
iface eth0 inet static
address ****
netmask ****
network ****
broadcast ****
gateway ****
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers ****
dns-search ****
という形に記述する。dns-nameservers にはさくらVPSのDNSサーバアドレスを記述
dns-search にはサーバが所属するドメインを複数記述する。
通常はhostname -f で取得できる結果と同じものを指定する。
単一のドメインに所属であれば、dns-domainを書けば良いらしい。
一応、さくら標準のホスト名でも検索できるように2つのドメインを指定
[番外編] Tomcat ログ出力
■Tomcatログ設定
ローテーションはtomcatでは行わない
設定 /usr/java/tomcat/conf/server.xml
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b"
resolveHost="false" rotatable="false" />
■ログローテーション
logrotate に任せる。
設定 /etc/logrotate.d/tomcat
/var/log/tomcat/*.out {
copytruncate
missingok
notifempty
compress
rotate 8
weekly
}
(意味)
copytruncate --- コピー元ログはローテーション後に切り詰める
missingok --- ログが無くてもエラーにしない
notifempty --- ログが空の場合はローテーションしない
compress --- ローテーションファイルは圧縮
rotate 8 --- ローテーションは8回分保存
weekly --- ローテーションは週1回実行
ローテーションはtomcatでは行わない
設定 /usr/java/tomcat/conf/server.xml
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b"
resolveHost="false" rotatable="false" />
■ログローテーション
logrotate に任せる。
設定 /etc/logrotate.d/tomcat
/var/log/tomcat/*.out {
copytruncate
missingok
notifempty
compress
rotate 8
weekly
}
(意味)
copytruncate --- コピー元ログはローテーション後に切り詰める
missingok --- ログが無くてもエラーにしない
notifempty --- ログが空の場合はローテーションしない
compress --- ローテーションファイルは圧縮
rotate 8 --- ローテーションは8回分保存
weekly --- ローテーションは週1回実行
登録:
投稿 (Atom)