[Linux]tarで圧縮元に絶対パスを指定する時、指定のディレクトリのみを圧縮する
以下のようにtarの第二引数に絶対パスを指定すると、以下のメッセージが表示される。
tar cvzf /home/hoge/files.tar.gz /home/hoge/files tar: メンバ名から先頭の `/' を取り除きます
上記のfile.tar.gzを展開すると、home/hoge/filesというディレクトリ構造まで復元されてしまう。
files以下のみが展開されるようにするには、以下のように-Cを使う。
tar cvzf /home/hoge/files.tar.gz -C /home/hoge files
- Cオプションをつけることにより、そのパスからの相対指定ができる。これにより、filesディレクトリのみを圧縮できる。
[Linux]さくらVPSのCentOSにRedmineをインストール
前回の続き
[Linux]さくらVPSのCentOSにApacheをインストール - daybreaksnow's diary
Redmineの公式サイトを参考にした。
Redmine 2.4をCentOS 6.4にインストールする手順 | Redmine.JP Blog
SELinuxを無効にする
セキュリティ管理用のモジュールらしい。
http://itpro.nikkeibp.co.jp/article/COLUMN/20070827/280414/
無効にしないでもインストールできるらしい(http://h2np.net/docs/redmine-selinux.html)が、さくらのデフォルトでdisabledになっていたので修正なし
EPELパッケージのインストール
以下から最新のパッケージのパスを確認
http://dl.fedoraproject.org/pub/epel/6/x86_64/repoview/epel-release.html
最新のパッケージのパス
http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
インストール
#rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
さくらのデフォルトではインストール済みだった。
開発ツール(Cコンパイラ等)のインストール
yum groupinstall "Development Tools"
以下のメッセージが出た。メッセージを見る限り引数が不正なようだが、このまま進んでも問題なかった。
Warning: Group development does not have any packages. No packages in any requested group available to install or update
※2014/8/29追記
日本語化している(/etc/sysconfig/i18nでLANG=ja_JP.UTF-8としている)場合、「開発ツール」としなければならない。
RubyとPassengerのビルドに必要なヘッダファイルなどをインストール
yum install openssl-devel readline-devel zlib-devel curl-devel libyaml-devel
Is this ok?と聞かれるので、y。
再度にComplete!と出て完了。
ImageMagickとヘッダファイル・日本語フォントのインストール
これは任意だが、ImageMagickは添付ファイルのサムネイル表示に使うということなので、入れておく。
yum install ImageMagick ImageMagick-devel yum install ipa-pgothic-fonts
ipa-pgothic-fontsはデフォルトで入っているようだ。
Package ipa-pgothic-fonts-003.02-4.1.el6.noarch already installed and latest version Nothing to do
Rubyのインストール
最新のtarballを落とす
http://www.ruby-lang.org/ja/downloads/
前世代の安定版: Ruby 2.0.0-p353 を落とした。
http://cache.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p353.tar.gz
MySQLの設定
MySQLを起動、自動起動ON
service mysqld start chkconfig mysqld on
ここでmsqldの起動でエラーとなった。
ログを見てみる
- コマンド
less /var/log/mysqld.log
- 中身
[ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist
上記エラーメッセージでググってみると、mysql_install_dbコマンドを実行すればよいらしい。
root権限で実行、再度mysqldをstartすると、今度は起動に成功した。
rootにパスワード設定
このままだとmysql -u rootでパスワードなしでログインできてしまう。
rootにパスワードを設定する。
sudo mysqladmin -u root password [パスワード]
エンコード確認
mysqlにログイン後、以下のコマンドを実行
show variables like 'character_set%';
以下のように全てUTF-8になっていればOK。
+--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+
不要なユーザを除去
- ユーザ確認SQL
use mysql; select user from user;
- 実行結果
以下のように名前なしユーザが二人いた。
mysql> select user from user; +------+ | user | +------+ | root | | | | root | | | | root | +------+ 5 rows in set (0.00 sec)
匿名のユーザを削除する。
delete from user where user = '';
Redmine用データベースとユーザーの作成
create database db_redmine default character set utf8; grant all on db_redmine.* to user_redmine identified by 'パスワード'; flush privileges;
Redmineのインストール
以下からRedmineのtarballをダウンロード
http://www.redmine.org/projects/redmine/wiki/Download
解凍したらRedmineの配置先に移動する。
mv redmine-2.4.3 /var/lib/redmine
データベースへの接続設定
/var/lib/redmine/config/database.ymlを作成。
database.yml.sampleをコピーして、以下を修正した。
production: database: db_redmine username: user_redmine password: パスワード (Redmine用データベースとユーザーの作成で設定したもの)
configuration.ymlの設定
/var/lib/redmine/config/configuration.ymlを作成。
configuration.yml.sampleをコピーして、以下を修正した。
production: smtp_settings: address: "localhost" domain: 'サーバのIPアドレス' rmagick_font_path: /usr/share/fonts/ipa-pgothic/ipagp.ttf
ここで:の後の半角スペースがないと、後でrake db:migrateの実行時にエラーとなるので注意。
サーバのIPアドレスと書いたところは、サーバのFQDNとなっているが、ドメインを取っていないのでIPアドレスにした。これでいいかは不明。
SMTPの設定なので、メール通知を使わないなら適当でもOK?
Gemパッケージのインストール
redmineが必要とするライブラリを入れる。
redmineのインストールディレクトリ(/var/lib/redmine)で以下を実行
# bundle install --without development test
実行後、以下のメッセージが出た
rubyのバージョンは2.0.0のため、nothing to doに当てはまり、追加のインストールは必要ない。
Depending on your version of ruby, you may need to install ruby rdoc/ri data: <= 1.8.6 : unsupported = 1.8.7 : gem install rdoc-data; rdoc-data --install = 1.9.1 : gem install rdoc-data; rdoc-data --install >= 1.9.2 : nothing to do! Yay!
Redmineの初期設定とデータベースのテーブル作成
セッションデータ改竄防止用鍵の生成とテーブル作成
Redmineのインストールディレクトリで以下のコマンドを実行
bundle exec rake generate_secret_token RAILS_ENV=production bundle exec rake db:migrate
RAILS_ENV=productionは単に環境変数にproductionを入れるだけ。
rubyではこの環境変数でdevelopment、test、productionなどのモードを切り替えるとのこと。
db:migrateはその名前の通りDBのマイグレーションを行う。あらかじめ定義したDDLを実行する感じか?
bundle execと、直接rakeを呼ぶのでは、以下のような違いがある。
rake:Railsの共通のライブラリ保存場所から読みだす bundle exec:プロジェクトのライブラリ保存場所から読み出す
参考:http://ka-zoo.net/2013/07/difference-of-rake-xxx-and-bundle-exec-rake-xxx/
Passengerのインストール
Passengerとは:apacheでrubyアプリを動かすためのapacheモジュール
gem install passenger --no-rdoc --no-ri passenger-install-apache2-module
rdocとはJavaDoc的なものか。
文字化けが出たがそのままエンターで進んだ。
- 出力結果
LoadModule passenger_module /usr/local/lib/ruby/gems/2.0.0/gems/passenger-4.0.37/buildout/apache2/mod_passenger.so <IfModule mod_passenger.c> PassengerRoot /usr/local/lib/ruby/gems/2.0.0/gems/passenger-4.0.37 PassengerDefaultRuby /usr/local/bin/ruby </IfModule>
Passengerの設定
- 作成ファイル
/etc/httpd/conf.d/passenger.conf
- 記述内容
# Passengerの基本設定。 # passenger-install-apache2-module --snippet を実行して表示される設定を使用。 # LoadModule passenger_module /usr/local/lib/ruby/gems/2.0.0/gems/passenger-4.0.37/buildout/apache2/mod_passenger.so <IfModule mod_passenger.c> PassengerRoot /usr/local/lib/ruby/gems/2.0.0/gems/passenger-4.0.37 PassengerDefaultRuby /usr/local/bin/ruby </IfModule> # Passengerが追加するHTTPヘッダを削除するための設定(任意)。 # Header always unset "X-Powered-By" Header always unset "X-Rack-Cache" Header always unset "X-Content-Digest" Header always unset "X-Runtime" # Passengerのチューニング。 # TODO Phusion Passenger users guide(http://www.modrails.com/documentation/Users%20guide%20Apache.html)を参照。 PassengerMaxPoolSize 20 PassengerMaxInstancesPerApp 4 PassengerPoolIdleTime 3600 PassengerHighPerformance on PassengerStatThrottleRate 10 PassengerSpawnMethod smart RailsAppSpawnerIdleTime 86400 RailsFrameworkSpawnerIdleTime 0
Redmineを公開する(サブディレクトリでRedmineを実行)
redmineのインストールディレクトリへのシンボリックリンクを作成
ln -s /var/lib/redmine/public /var/www/html/redmine
/etc/httpd/conf.d/passenger.confに以下を追記。
RackBaseURI /redmine
apacheを再起動。
service httpd graceful
restartはhttpd プロセスを完全に停止してから再起動する。
gracefulは httpd プロセスの通信が終わるのを待って、順次新しい設定を反映した httpd を起動させる。
[Linux]さくらVPSのCentOSにApacheをインストール
Redmineを立てたかったので、まずはAapacheを動かす。
やったこと
参考:
基本設定 | 初心者でもわかる!さくらVPS | Sakura VPS 設定マニュアル
SERIES | アカベコマイリ
OSのバージョンを確認
- コマンド
cat /proc/version cat /etc/redhat-release
- 結果
Linux version 2.6.32-431.3.1.el6.x86_64 (mockbuild@c6b10.bsys.dev.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Fri Jan 3 21:39:27 UTC 2014 CentOS release 6.5 (Final)
rootのパスワードをデフォルトのものから変更
passwd
パッケージをアップデート
yum update
操作用ユーザ追加
useadd hoge
新規ユーザにパスワード追加
passwd ユーザ名
suをwheelグループ内のユーザのみ可能とする。
- 編集対象
vim /etc/pam.d/su
- 修正内容
以下のコメントを解除
#auth required pam_wheel.so use_uid
sudoを有効に
- 編集対象
visudo
- 修正内容
以下のコメントを解除
# %wheel ALL=(ALL) ALL
ここから http://akabeko.me/blog/2012/04/revps-01-prepare-ssh-key/#revps-01-04 を参考
SSHの設定
TeraTermでSSH接続用の鍵を作る
1.TeraTermを起動。 2.メニューバーのSetup→SSH KeyGenerator… 鍵の種類:RSA ビット数:2048 パスフレーズを入力し、「Save public key」「Save private key」ボタンを実行、保存。それぞれ「id_rsa.pub」「id_rsa」で保存する。 3.id_rsa.pubをサーバに転送。ログイン済みのTeraTermにドラッグ&ドロップ→SCPで転送できる。 転送したファイルはログインユーザのホームディレクトリ直下に置かれる
公開鍵のパーミッション設定
この鍵でログインしたいユーザのhomeディレクトリに移動する。
rootでログインしたくないので、最初に作ったユーザのhomeディレクトリにする。
mkdir .ssh chmod 700 .ssh mv id_rsa.pub .ssh/authorized_keys chmod 600 .ssh/authorized_keys
SSHでのパスワードログインを無効化
パスワードだとブルートフォースとか怖いので、公開鍵でのみログイン可能とする。
- 編集対象
vi /etc/ssh/sshd_config
- 修正内容
以下の値をyesからnoに
PermitRootLogin no (rootのログイン) PasswordAuthentication no (パスワードによるログイン)
sshを再起動
service sshd restart
なお、SSHのサービスの実体は /etc/rc.d/init.d/sshd にあり、以下のコマンドでも実行可能。
/etc/rc.d/init.d/sshd restart
ここから http://akabeko.me/blog/2012/04/revps-02-sudo-ssh-port/ を参考
SSHのポート変更
デフォルトの22だとアタックされやすいので、変えておく
- 編集対象
sudo vi /etc/ssh/sshd_config
- 編集内容
以下のコメントを外して、適当な数字にする。
#Port 22
sshを再起動
service sshd restart
これでSSHで22番で接続しようとすると、接続が拒否されました、と言われるようになる。
ここから http://akabeko.me/blog/2012/04/revps-03-iptables-logwatch/ を参考
iptablesを設定
SSH と HTTP 用の接続のみを許可する。
- 編集対象(新規ファイルになる)
sudo vi /etc/sysconfig/iptables
- 修正内容
以下をコピペ。この定義の元サイトはこちら。http://www.nina.jp/server/redhat/iptables/iptables.html
SSHのポート番号については適宜変更すること。(★の箇所)
# パケットフィルタリングでは、filterテーブルを使う *filter ### :チェーン名 デフォルトポリシー [パケットカウント:バイトカウント] # デフォルトポリシーをACCEPTにすると明示されないパケットは通過され、DROPにすると明示されないパケットは破棄される # INPUTチェーン、送信先がローカルホストのパケットに適用される :INPUT ACCEPT [0:0] # FORWARDチェーン、ローカルホストを経由するパケットに適用される :FORWARD ACCEPT [0:0] # OUTPUTチェーン、送信元がローカルホストのパケットに適用 :OUTPUT ACCEPT [0:0] # ユーザ定義チェーン :RH-Firewall-1-INPUT - [0:0] #ルール。 #-A チェーン名 マッチング条件 -j ターゲット # ローカルホスト宛のパケットは、ユーザ定義チェーン"RH-Firewall-1-INPUT"でチェック -A INPUT -j RH-Firewall-1-INPUT # ローカルホスト経由のパケットは、ユーザ定義チェーン"RH-Firewall-1-INPUT"でチェック -A FORWARD -j RH-Firewall-1-INPUT # 受信インタフェースが"lo"(ループバック)ならば、通信を許可 -A RH-Firewall-1-INPUT -i lo -j ACCEPT # プロトコルが"icmp"ならば、通信を許可 -A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT # プロトコル番号が"50"(ESP)ならば、通信を許可 -A RH-Firewall-1-INPUT -p 50 -j ACCEPT # プロトコル番号が"51"(AH)ならば、通信を許可 -A RH-Firewall-1-INPUT -p 51 -j ACCEPT # プロトコルが"udp"かつ送信先ポートが"5353"(Multicast DNS)かつ送信先アドレスが"224.0.0.251"ならば、通信を許可 -A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT # プロトコルが"udp"かつ送信先ポートが"631"(Internet Printing Protocol)ならば、通信を許可 -A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT # プロトコルが"tcp"かつ送信先ポートが"631"(Internet Printing Protocol)ならば、通信を許可 -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT # 接続状態が"ESTABLISHED"または"RELATED"ならば、通信を許可 # これがないと通信ができない! -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # SSH, HTTP # ★接続状態が"NEW"かつプロトコルが"tcp"かつ送信先ポートが"22"ならば、通信を許可 # SSHサーバへの接続要求パケット -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT # HTTPサーバへの接続要求パケット -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT # ここまでのチェックでひっかからなかったパケットは、ICMPパケット"host-prohibited"を返して接続拒否 -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited COMMIT
ここでコメント行の先頭に空白があったり、空行の先頭にスペースがあるとエラーとなる。
- エラー出力例
iptables: ファイアウォールルールを適用中: iptables-restore v1.4.7: no command specified Error occurred at line: 11 Try `iptables-restore -h' or 'iptables-restore --help' for more information. [失敗]
iptablesの再起動
sudo /etc/rc.d/init.d/iptables restart
- iptablesの設定の確認
sudo iptables -L
修正前
Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
修正後
Chain INPUT (policy ACCEPT) target prot opt source destination RH-Firewall-1-INPUT all -- anywhere anywhere Chain FORWARD (policy ACCEPT) target prot opt source destination RH-Firewall-1-INPUT all -- anywhere anywhere Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain RH-Firewall-1-INPUT (2 references) target prot opt source destination ACCEPT all -- anywhere anywhere ACCEPT icmp -- anywhere anywhere icmp any ACCEPT esp -- anywhere anywhere ACCEPT ah -- anywhere anywhere ACCEPT udp -- anywhere 224.0.0.251 udp dpt:mdns ACCEPT udp -- anywhere anywhere udp dpt:ipp ACCEPT tcp -- anywhere anywhere tcp dpt:ipp ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:22(SSHのポート番号) ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:http REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
apacheのインストール
# yum update -y install httpd
セキュリティを向上させる
- 編集対象
vi /etc/httpd/conf/httpd.conf
- 修正内容
ServerTokens OSをServerTokens Prodに(サーバの情報をどれだけクライアントに返すか) Options Indexes FollowSymLinksを、-Indexesとハイフンを付けて無効に(ファイル一覧ページが自動生成されないように) ServerSignature OnをOffに(internal server error時にサーバの情報を出すかどうか)
- 編集対象2
vi /etc/httpd/conf/welcome.conf
- 修正内容
全てコメントアウト(行頭に#)する(ウェルカムページを非表示に。ウェルカムページにはOS名まで出てしまっている)
httpd.confの文法チェック
# apachectl configtest
[アイマス]12/08 LTP08ログ
細かい口調とかは適当。
クイズころあず
1問目 テーマ:テニス
ラリーは2年間、ぴょんきちは半年やってた。二人共ソフトテニスで、二人共後衛?
ぴょん吉は某アニメの影響で。
ぴょん:テニスって前衛と後衛があるじゃん?
もちょ:?(目を斜め上に向けた後、パチパチと5,6回まばたき。天使。)
・問題:テニス部に居たころあずが部室に書いた答えは?
ヒント:今の私。すごい事を書いた
ぴょん、衣吹:声優になる(「なる」と「なりたい」で微妙にニュアンスは違ってたはず) もちょ:生きててよかった!(8thツアーでころあずが書いた言葉)→ナイスアピール ラリー:ルノアール(写実的な絵を書いた、という意味)
正解:声優になれます。なれますようにだとちょっと願望が強いから。でもなれます、まで書いちゃったので。今も残ってるんじゃないかな。
2問目 友達
もちょ:友達っているの?(ラリーらゲストの方を剥いて)
→違う、どんな友達がいるの?って意味。
ころあずが上京して出来た初めての友達は?
衣吹:お医者さん。(ころあずと事務所が同期だったから聞いたことがある) ラリー:声優 ぴょん:はっしー もちょ:pityな人(類は友を呼ぶ)
ぴょん:そういうの書くんだったんだ、わたし思いっきり個人名出しちゃった
ころ:ぴょんきちはもっとちゃんと私の話を聞くべきでした。上京してから初、なので、はっしーではない
会場からpityと呼ばれて喜ぶころあず(アクセントの付け方を注文出してた?)
正解:医者
3問目 牛
牛のどこが好き?
ぴょん:私、牛のミルク好き
ラリー:肉
もちょ:顔
衣吹:肉
もちょ:肉のどの部位が好き?
かな:え…お腹?
もちょ:お腹ってどこ?
問題 ころあずが唯一牛で苦手なところ
ころあず ヒントは私の頭です。
衣吹:顔が怖い(イラスト付き) ラリー:出産が激しい ぴょん:あたまわるい? もちょ:もーもー(イラスト付き。かわいい。)
ころ:ぴょんきち…
ぴょん:違う違う、ころあずは頭悪くない、牛は頭悪い、だから嫌いなのかと
もちょ もーもーって怒ってるみたいだから、嫌なのかなって
(モチョカワイイネーの雰囲気)
ころ:もちょ、私がいつも付けてるキーホルダーそんなんじゃないでしょ(牛の柄について?)
答え:牛という漢字。私の頭がバカだから、午と間違えそうになる
優勝はぴょん吉
ぴ ころあずお昼もこんな簡単な計算2回も間違えたんですよー
景品:高級な醤油
ライブパートは各自個人曲。
ラリーは環のNの私服をイメージした服を来ていた。
Thank youを歌う前に出てきた時は物販のTシャツを着てきた。
[Git]良く使うコマンド
コミット前の変更を元に戻す
git checkout .
[Hibernate]特定のバージョンでone-to-manyタグにproperty-ref属性を指定できない
参考URL
Hibernate Mapping problem with unrelated collection - Stack Overflow
[HHH-2862] Collection is not associated with any session exception when doing an eager fetch on a non-unique collection. - Hibernate JIRA
問題となるHibernateのバージョン
3.1.3~3.2.5
問題となるhbm
<set name="items" inverse="true" fetch="join" cascade="all"> <key property-ref="hogeCode"> <column name="piyo_code" /> </key> <one-to-many class="hoge.example.Piyo" /> </set>
keyタグのproperty-refを外す(=PKで参照する)と動くが、property-refがあると検索時に以下の例外が発生する
org.hibernate.HibernateException: collection is not associated with any session