勝手に2016年振り返りメモ
たまの大晦日なので、ツイッターのタイムラインを振り返ってみました。
長い割にたいした内容も無いので、暇なときにのんびり読むのをおすすめします。
動作を確認した環境
環境 | 情報 |
---|---|
Xcode | 8.2.1 (8C1002) |
iOS | 10.2 |
Swift | 3.0.2 |
Date | 2016/12/31 |
まとめ
1/20
バッククオートでselfに代入できるのはおそらくバグだとアップルの人の回答。その上でこの提案が受け入れられたら、普通にselfにguard節で代入できるようになる。 https://t.co/MVT7iEO5Pu https://t.co/MGYfn6YcHB
— kishikawa katsumi (@k_katsumi) 2016年1月20日
現在の環境で実験してみると、Swift 3で普通に使えることが判明。自分で使うことは無いと思うけど。
2/13
なるほど( ´・‿・`)
— mono( ´・‿・`)🐶🍎📱⌚️ (@_mono) 2016年2月12日
> なぜもっと簡潔に、整数でインデックスできるようにしないのでしょうか。これは、Swift的に、そのオペレーションにはコストがかかるという事実を補強しているのです。https://t.co/Bl63LdwMN3 via @POSTDcc
言いたいことはすごくよくわかる・・・ けど、現実問題としていちいちIndexを扱うのは面倒だから、Intでアクセスできるようにラップしちゃう。
文字数の話は、年末にQiitaで再燃してたっけ。
2/18
すごく面白いネタだけど・・・ これのすごさがちゃんとわかるのは、SwiftのGenericsとProtocolではまったことのある人だけのような気が。/Swift - Introducing PONS = Prot - Qiitahttps://t.co/owrkb5e3Gl
— See.Ku (@See_Ku) 2016年2月18日
個人的には、今年のQiitaでトップクラスに面白い記事だと思うんだけど・・・ あまり一般受けしないネタなんだろうか? 公式で取り込んでも良いレベル。名前はちょっとアレだけど。
2/24
Realm Browserに、直接パスを指定してファイルを開く手段が見つからない。いや、まさか、これが無いって事は無いと思うんだけど・・・
— See.Ku (@See_Ku) 2016年2月24日
Realm BrowserでRealmのファイルを開く方法。結局、Finderでディレクトリを開いて、ファイルをダブルクリックする方法に落ち着いたけど、これが正解なんだろうか?
2/27
既存クラスへのextensionが複数のモジュールで被ったとき、明示的に使い分ける方法が今のSwiftにはないと思うんだけど・・・ ここは、誰も問題にしてないんだろうか? extensionだけ昔ながらにprefixをつけるべきなのかな。
— See.Ku (@See_Ku) 2016年2月27日
ずっと頭を悩ませている、フレームワークにおける命名問題シリーズ。今年だけで、このネタでいくつつぶやいたんだか。結局、考えてても答えが出ないんで、試しにすべてのPrefixを排除してみる(ただし、Class名は除く)。これで問題が出るようなら、また復活させよう。
2/27
あとは、メンバーがHashableだけのタプルは自動でHashableになってほしいけど・・・ これは、Swift 3.5ぐらいか?
— See.Ku (@See_Ku) 2016年2月27日
試してみた・・・ これは、未だに出来ないのね。
2/27
TDDは好きだし、重要な開発スキルだと思うけど、TDD原理主義になるのは良くない。TDDが向いているケースは「これから書くプログラムの入力と出力が明確であること」「テストコードの書き方が事前に想像できていること」の2点。片方がNOなら、「プログラムが先、テストコードは後」でOK。
— Junichi Ito (伊藤淳一) (@jnchito) 2016年2月27日
すごく良い意見・・・ 問題になるのは、テストコードを後にすると、書く気が失せるって事ぐらいで。この問題の解決方法は未だに発見できてない。
3/3
Issue #12 https://t.co/GCcrwlyCIy written by @jesse_squires
— Swift Weekly Brief (@swiftlybrief) 2016年3月3日
SE-0026として、Abstractを追加する話が提案されて・・・ 結局、先送りになりました、と。個人的には欲しい・・・ というか、必要な機能だと思うんだけど、実際に導入されるのがいつになるかは不明。
それまでは、assertionFailure()を多用しようかな、と。
3/23
Swiftのinit()でsuper.init()を省略できる条件って、どこかに明記されてたっけ・・・
— See.Ku (@See_Ku) 2016年3月23日
イニシャライザを継承するときの話では無くて、継承したイニシャライザの中で『super.init』を呼び出す話。
自分が調べた範囲でわかったのは、overrideしたイニシャライザの中でselfを使う場合は、それまでにsuper.initが必須。selfを使わないならsuper.initが無くてもビルド可能、と。
この動作はどこにも明記されてない気がするんだけど・・・ 省略なんて考えなくて、毎回ちゃんとsuper.initを書くのが正解なんだろう。たぶん。
3/24
今のSwiftの場合、publicを付けるしか無いからこの問題は解決できないんだよなぁ。protectedがアクセス制御的に意味が無いって意見も理解できるけど、現実問題として欲しくなる事もあるって事で。
— See.Ku (@See_Ku) 2016年3月24日
定期的に欲しくなるProtectedの話題。これだけコード補完が万能の時代になってくると、候補に邪魔なものがあるだけで鬱陶しくなるわけで。・・・どうにかなりませんかね?
3/24
たまに欲しくなる機能シリーズだと『public private(set)』って響きが美しくないから、readonlyって書くと代わりになって欲しかったり。
— See.Ku (@See_Ku) 2016年3月24日
これもまさに、定期的に欲しくなる機能シリーズ。10年後も同じ事を書いてるような気がするけど。
4/13
『RawValueがStringのenumの場合だけ、protocol extensionでデフォルトの実装を用意する』って、出来てみれば普通のコードだけど意外と手間取ったのでメモ。 pic.twitter.com/PZfPeTxSvD
— See.Ku (@See_Ku) 2016年4月13日
メモ。
9/25
そもそも、一番大事なのは、『好きにすれば良い』って事だったりしますが。
— See.Ku (@See_Ku) 2016年9月25日
座右の銘。実際には方言っぽく(?)『すきにしぃ』って発音。
9/27
RealmのNSDateの話。すぐに公式のドキュメントが出るだろうと思ってたけど、Qiitaあたりに自分でまとめた方が良いかな・・・
— See.Ku (@See_Ku) 2016年9月27日
未だに、日本語の公式ドキュメントは出ていない・・・
10/3
そろそろSwiftに『superのメソッドを呼び出す必要があるかどうか』を示す属性が出来ても良いと思う。
— See.Ku (@See_Ku) 2016年10月3日
たまに、これがあると便利だろうと思うんだけど・・・ 『先頭で呼ぶ』『最後で呼ぶ』『どっちでも良い』とか、場合分けがいろいろ必要になって逆に面倒かな? ドキュメント化で逃げるのが正解なのか。・・・それはそれで、90年代から進歩してないような気もするけど。
10/16
* Genericsでデータ型にバリエーションを持たせた場合、共通の基底クラスを素直に表現できない
— See.Ku (@See_Ku) 2016年10月16日
* Abstractを表現できない問題を回避する方法はあるけど、あまり美しくない
『素直じゃ無い』とか『美しくない』って部分は、見なかったことにするのが正解なのかな・・・
ここ2ヶ月ぐらい悩んでた問題がこのツイートにまとまってる。結局、Class階層+Genericsの合わせ技で・・・ つまり、以前と同じやり方に落ち着いたけど。
ちなみに、Abstractの代替手段としては、PropertyとしてOptionalなClosureを持たせる方法を考えていた・・・ もう少し簡単にweak selfが使えるようになったら、これでもよかったかなぁ。いや、やっぱりだめか。
12/16
Namespace専用の構文が欲しいなぁ。ClassやStructを使えば、実質的に同じことは出来るけど。
— See.Ku (@See_Ku) 2016年12月16日
Swiftでプログラムを書いてる人は、慣れてる人ほど何の違和感も無く、structを名前空間の代わりに使ってると思うけど・・・ 冷静に考えると、これって変では? という話。
12/23
ExtensionありのProtocolを適用してから継承したときの動作は、明瞭性に反してる気がするなぁ。この部分は、早めにどうにかして欲しかった。Swift3で変わらなかったってことは、この仕様のままで押し通すんだろうか? pic.twitter.com/F9pafmazhD
— See.Ku (@See_Ku) 2016年12月23日
この問題、どこかで見覚えがあると思って探してみたら・・・ 約9ヶ月前に見てた。まさか、いまさら・・・ Swift3になってから、罠にはまるとはorz/Swiftのプロトコルエクステンションの罠 - Qiitahttps://t.co/r3zocYXOx1
— See.Ku (@See_Ku) 2016年12月23日
現在のSwiftで、一番わかりにくくて使いにくいのがこの点では・・・ 本当にこの仕様で押し通すんだろうか? それとも、どこかのタイミングでこっそり直すのか?
最後に
4月から9月まで間が空いてるのは・・・ Swift 3が来るまで、他のことをやってたってのがわかりやすいですね。では、よいお年を。
CentOS 7(32bit版)の細かい設定いろいろ
いろいろ、細かい設定の話です。CentOSが7になったのにあわせて、いろいろ調べ直してみました。
いわゆる小ネタ集ですね。
動作を確認した環境
環境 | 情報 |
---|---|
CentOS | CentOS-7-i386-Minimal-1511.iso |
Date | 2016/12/11 |
自動で日時を合わせる
CentOS 6までと同じようにNTPを使うことも出来ますが、CentOS 7ではChronyという新しいパッケージが用意されているようです。せっかくなので、Chronyを使って設定してみます。
まずは、Chronyをインストール。
# yum install -y chrony
設定を変更。
# nano /etc/chrony.conf
元からあるserverを全てコメントアウト。その下に、nictへの設定を追加します。
server ntp.nict.jp iburst minpoll 14
『minpoll 14』で16384秒=4.6時間おきに確認となります。この辺りは好みで。
あとはサービスを開始、自動起動を設定しておきましょう。
# systemctl start chronyd
# systemctl enable chronyd
日時の確認は以下のコマンドで出来ます。
# timedatectl
参考資料
CentOS7の時刻をChronyを使ってNICTと同期する - Qiita http://qiita.com/Kenji_TAJIMA/items/88ec9985a0585e66ef33
CentOS7での日付、時刻、タイムゾーン設定
http://www.linuxmaster.jp/linux_skill/2016/01/centos7-4.html
wifiをオフにする
ネットワークに関するデバイスの状況は、以下のコマンドで確認できます。
# nmcli d
こんな感じで、デバイスの一覧と状態が表示されます。
DEVICE TYPE STATE CONNECTION enp4s0 ethernet connected enp4s0 wlp1s0 wifi disconnected -- lo loopback unmanaged --
wifiをオフにするのは以下のコマンドで。
# nmcli radio wifi off
SDカードの自動マウント
必要なとき、自動でマウントしてくれるようにしてみます。
SDカードのデバイスを確認
SDカードを挿入した状態で、以下のコマンドを実行。
# fdisk -l
こんな感じの行があるのを確認しておきます。
Device Boot Start End Blocks Id System /dev/sdc1 137 3842047 1920955+ e W95 FAT16 (LBA)
『/dev/sdc1』の部分がこの後で必要になります。
autofsを設定
まず、autofsをインストールします。
# yum install -y autofs
設定を確認。
# cat /etc/auto.master
上のほうに『/misc /etc/auto.misc』と書いてあるのを確認しておきます。
misc関係の設定を修正。
# nano /etc/auto.misc
以下の一行を追加しておきます。
sd_card -fstype=vfat :/dev/sdc1
一番最後の『/dev/sdc1』の部分でデバイスを指定します。
あとは、サービスを起動。自動実行を設定しておきます。
# systemctl start autofs
# systemctl enable autofs
これで『/misc/sd_card』にアクセスすると、自動でマウントされるようになりました。ちなみに標準の設定だと、10分間アクセスが無いと自動でアンマウントされます。この辺りの設定はお好みで。
参考資料
9.4.2. autofs の設定
https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Storage_Administration_Guide/s2-nfs-config-autofs.html
バッテリー容量の確認
バッテリー容量の確認には、upowerが良さそうです。
# yum install -y upower
バッテリーに関するデバイス一覧の表示。
# upower --enumerate
こんな感じで表示されます。『battery』が入ってるのがバッテリーでしょう。たぶん。
/org/freedesktop/UPower/devices/line_power_AC0 /org/freedesktop/UPower/devices/battery_BAT0 /org/freedesktop/UPower/devices/DisplayDevice
一覧の情報を使って、詳細な情報を取得します。
# upower -i /org/freedesktop/UPower/devices/battery_BAT0
バッテリー容量が1/10まで減ってるとかorz
sshの接続が遅い問題
sshの接続が遅い場合、以下の修正で直るかもしれません。・・・というか、自分の環境ではかなり快適になりました。
※サーバー側で作業を行います
# nano /etc/ssh/sshd_config
適当な位置に、以下の行を追加。
UseDNS no
サービスを再起動しておきます。
# systemctl restart sshd
接続できるまでしばらく待たされていたのが、これで一瞬で繋がるようになりました。
参考資料
sshの接続確立が遅い場合の対処方法 - yuyarinの日記
http://d.hatena.ne.jp/yuyarin/20090410/1239298235
CentOS 7(32bit版)でFirewallを設定
念のため、Firewallの設定をやっておきます。・・・念のため?
動作を確認した環境
環境 | 情報 |
---|---|
CentOS | CentOS-7-i386-Minimal-1511.iso |
Date | 2016/12/10 |
方針
- インターネット経由の接続は考慮しない
- けど、無駄なポートは空けない
インストール
Firewallをインストール。標準で入ってなかったのはなぜなんでしょう?
# yum install -y firewalld
サービスを起動。ついでに、自動で起動するように設定。
# systemctl start firewalld
# systemctl enable firewalld
設定
デフォルトのゾーンを変更。ローカルな環境でしか使わないので、今回は『internal』にしてみました。
# firewall-cmd --set-default-zone=internal
必要なサービス、ポートを追加。
# firewall-cmd --permanent --add-service=http
# firewall-cmd --permanent --add-port=8080/tcp
# firewall-cmd --permanent --add-port=29418/tcp
変更した設定を読み込み。
# firewall-cmd --reload
設定を確認。
# firewall-cmd --list-all
internal (default) interfaces: sources: services: dhcpv6-client http ipp-client mdns samba-client ssh ports: 8080/tcp 29418/tcp masquerade: no forward-ports: icmp-blocks: rich rules:
RedmineやGitBucketで繋がることを確認。
参考資料
4.5. ファイアウォールの使用
https://access.redhat.com/documentation/ja-JP//Red_Hat_Enterprise_Linux/7/html/Security_Guide/sec-Using_Firewalls.html
firewalldの設定方法(基本設定編) | server-memo.net
http://www.server-memo.net/centos-settings/firewalld/firewalld.html
CentOS7.1 64bit firewalldによるアクセス制御 | kakiro-web カキローウェブ
http://www.kakiro-web.com/linux/firewalld.html
firewalldの設定方法(基本設定編) | server-memo.net
http://www.server-memo.net/centos-settings/firewalld/firewalld.html
GitBucketをssh経由でユーザー認証できるように設定
なぜか、普通にXcodeからGitBucketを使うとエラーが出ます。
仕方がないのでssh経由でユーザー認証できるようにしておきます。
動作を確認した環境
環境 | 情報 |
---|---|
VirtualBox | VirtualBox-5.1.10-112026-Win.exe |
CentOS | CentOS-7-i386-Minimal-1511.iso |
Gitbucket | 4.7.1 |
Date | 2016/12/10 |
GitBucketの設定を変更
ssh経由のアクセスを設定
GitBucketにrootでログインして、メニューから『System administration』を選択。
User Managementから『System Settings』を選択。
『Base URL』にGitBucketを使用する外部のマシン(この場合はXcodeを動かしているMac)から、アクセスするときのURLを記入します。
『Enable SSH access to git repository』のチェックをオンに。
『SSH Host』にホストの名称を記入。これも、外部からアクセスするときの名前です。
『SSH Port』にGitBucketで使用するポートを記入します。通常のsshアクセスとは別に、GitBucket専用のポートを使います。Firewallやポートフォワードの設定も忘れずに。
設定を失敗した場合
『System Settings』の画面でやらかした場合・・・ 特に『Base URL』の設定を失敗した場合、ブラウザ経由でGitBucketにアクセスできなくなる場合があります。そんな時は、設定ファイルを直接編集しましょう。
# nano /usr/share/tomcat/.gitbucket/gitbucket.conf
ユーザーごとの設定
sshの鍵を作成
こんな感じで、GitBucketで使用する秘密鍵・公開鍵を作成します。
$ ssh-keygen -t rsa -f gitbucket
ちなみに、pbcopyを使うと簡単にクリップボードにコピーできます。
$ cat gitbucket.pub | pbcopy
GitBucketに設定
『Account Settings』から左のメニューで『SSH Keys』を選択して設定画面に移動します。
『Title』は適当にわかりやすい内容を記入。
『Key』の方に、先程作成した公開鍵を記入します。
一通り記入したら『Add』を押して登録しましょう。
プロジェクトごとの設定
まずは、GitBucketでリポジトリを作成。Xcodeでプロジェクトを開いて、リモートリポジトリに追加しておきます。この辺りの流れはGitHubと同じですね。
あとは普通にプッシュするだけ。認証画面が出たら、GitBucketで使用する秘密鍵を選びます。
これで、無事に動くはず・・・ 動かないとしたら、ポートの設定があやしいかな?
CentOS 7(32bit版)にGitBucketをインストール
Redmineのついでに、GitBucketをインストールしてみます。ついで?
動作を確認した環境
環境 | 情報 |
---|---|
VirtualBox | VirtualBox-5.1.10-112026-Win.exe |
CentOS | CentOS-7-i386-Minimal-1511.iso |
Gitbucket | 4.7.1 |
Date | 2016/12/10 |
インストール
Tomcatをインストール
いきなりTomcatをインストール。Javaはついでに入れてくれます。
# yum install -y tomcat
今回使ったバージョンはこんな感じ。
# tomcat version Server version: Apache Tomcat/7.0.54 Server built: Oct 10 2016 10:04:15 Server number: 7.0.54.0 OS Name: Linux OS Version: 3.10.0-327.36.3.el7.i686 Architecture: i386 JVM Version: 1.8.0_111-b15 JVM Vendor: Oracle Corporation
GitBucketをダウンロード
GitBucketのバージョンをGitHubで確認します。
Releases · gitbucket/gitbucket · GitHub
https://github.com/gitbucket/gitbucket/releases
# wget -P /usr/share/tomcat/webapps/ https://github.com/gitbucket/gitbucket/releases/download/4.7.1/gitbucket.war
Tomcatを起動
ついでに、自動で起動するように設定しておきます。
# systemctl start tomcat # systemctl enable tomcat
ここまで出来たら、実際にアクセスして動作を確認しましょう。環境によっては、起動にかなり時間がかかるかも?
http://{サーバーのアドレス:8080}/gitbucket/
デフォルトのユーザIDとパスワードは下記の通りです。
- ユーザID: root
- パスワード: root
Redmine 2.3のデータをRedmine 3.3に移行
古いサーバーで動いていたRedmineのデータを、新しいサーバーに移行します。
具体的に言うとMySQLのデータをMariaDBに移行。普通に、dumpを使って作業します。
使用した環境
- 旧サーバー
環境 | 情報 |
---|---|
CentOS | CentOS release 6.6 (Final) |
Redmine | 2.3.1.stable |
Ruby | 1.9.3 (i686-linux) |
Rails | 3.2.13 |
- 新サーバー
環境 | 情報 |
---|---|
CentOS | CentOS Linux release 7.2.1511 (AltArch) |
Redmine | 3.3.1.stable |
Ruby | 2.3.3-p222 (2016-11-21) [i686-linux] |
Rails | 4.2.7.1 |
データの保存・復元
旧サーバーでデータを保存
データベースのデータをすべてダンプ。
# mysqldump -u user_redmine -p{password} db_redmine > ~/backup_mysql.dump
Redmineで使われているファイルを圧縮。
# cd /var/lib/redmine # tar zcvf ~/backup_files.tar.gz files
それぞれ、scpなどを使って新サーバーにコピーしておきます。
新サーバーでデータを復元
ファイルを展開。
# tar zxvf backup_files.tar.gz -C /var/lib/redmine
ダンプしたデータを復元。
# mysql -u user_redmine -p{password} db_redmine < ~/backup_mysql.dump
マイグレーション
不要なテーブルを削除
これだけで動いてくれれば楽なんですが・・・ このままだとデータのマイグレーションでエラーが出るので、不要なテーブルを削除しておきます。
# nano drop_table.sql
以下の内容でファイルを保存。
drop table changeset_parents; drop table queries_roles; drop table custom_fields_roles; drop table email_addresses; drop table roles_managed_roles; drop table imports; drop table import_items; drop table custom_field_enumerations;
まとめて、削除を実行します。
# mysql -u user_redmine -p{password} db_redmine < drop_table.sql
データベースのマイグレーション
マイグレーションを実行します。
# cd /var/lib/redmine # bundle exec rake generate_secret_token # RAILS_ENV=production bundle exec rake db:migrate
動作を確認
ここまで出来たら、実際にアクセスして確認しましょう。
http://{サーバーのアドレス}/redmine
これでアクセスできれば成功です。
参考資料
Redmine3.1をCentOS7.1にインストールし、既存のRedmine1.2のデータの移行を行う手順 - Qiita
http://qiita.com/k-awa/items/88243fbee921bf3ac13b
CentOS 7(32bit版)にRedmineをインストール
なぜか、CentOS 7なのに32bit版にRedmineをインストールしたときのメモです。
ChefもAnsibleもあってDockerが盛りあがってるこの時代に、なぜ、あえて手作業でRedmineをインストールしているのかは謎です。
方針
動作を確認した環境
環境 | 情報 |
---|---|
VirtualBox | VirtualBox-5.1.10-112026-Win.exe |
CentOS | CentOS-7-i386-Minimal-1511.iso |
Ruby | ruby-2.3.3.tar.gz |
Redmine | redmine-3.3.1.tar.gz |
Date | 2016/12/10 |
インストール
必要なソフトをインストール
いろいろ、まとめてインストールしておきます。
# yum -y groupinstall "Development Tools" # yum -y install openssl-devel readline-devel zlib-devel curl-devel libyaml-devel libffi-devel # yum -y install mariadb-server mariadb-devel # yum -y install httpd httpd-devel # yum -y install ImageMagick ImageMagick-devel ipa-pgothic-fonts
Rubyをインストール
ダウンロード
https://www.ruby-lang.org/ja/downloads/
今回は2.3.3をインストールします。
# curl -O https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.3.tar.gz # tar xvf ruby-2.3.3.tar.gz # cd ruby-2.3.3 # ./configure --disable-install-doc # make # make install # cd ..
ついでにbundlerを入れておきます。
# gem install bundler --no-rdoc --no-ri
Redmineをインストール
Redmineのサイトで最新のバージョンを確認。
Download - Redmine
http://www.redmine.org/projects/redmine/wiki/Download
こんな感じでインストールします。簡単ですね。
# curl -O http://www.redmine.org/releases/redmine-3.3.1.tar.gz # tar xvf redmine-3.3.1.tar.gz # mv redmine-3.3.1 /var/lib/redmine
Passengerをインストール
こんな感じでインストール。
# gem install passenger --no-rdoc --no-ri # passenger-install-apache2-module --auto
Apacheの設定で使う情報をメモしておきます。
# passenger-install-apache2-module --snippet
こんな感じになるはず。
LoadModule passenger_module /usr/local/lib/ruby/gems/2.3.0/gems/passenger-5.0.30/buildout/apache2/mod_passenger.so <IfModule mod_passenger.c> PassengerRoot /usr/local/lib/ruby/gems/2.3.0/gems/passenger-5.0.30 PassengerDefaultRuby /usr/local/bin/ruby </IfModule>
初期設定
MariaDBの初期設定
デフォルトのキャラセットとしてutf8を使うように変更します。
# nano /etc/my.cnf
[mysqld]に character-set-server=utf8 を追加、[mysql] セクションに default-character-set=utf8 を追加します。
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 # Settings user and group are ignored when systemd is used. # If you need to run mysqld under a different user or group, # customize your systemd unit file for mariadb according to the # instructions in http://fedoraproject.org/wiki/Systemd character-set-server=utf8 [mysqld_safe] log-error=/var/log/mariadb/mariadb.log pid-file=/var/run/mariadb/mariadb.pid # # include all files from the config directory # !includedir /etc/my.cnf.d [mysql] default-character-set=utf8
MariaDBを起動。ついでに自動起動の設定もやっておきます。
# systemctl start mariadb # systemctl enable mariadb
MariaDBの初期設定ツールを実行しておきます。rootのパスワードを設定。他は全て『Y』がおすすめかな?
# mysql_secure_installation
Redmineで使用するデータベースを作成
まず、設定内容をまとめたファイルを作成します。
# nano redmine_db.sql
内容はこんな感じ。
create database db_redmine default character set utf8; grant all on db_redmine.* to user_redmine@localhost identified by '{password}'; flush privileges;
{password}の部分はデータベースに接続するときのパスワードが入ります。database.ymlで使用します。
あとは、まとめて実行するだけ。
# mysql -uroot -p < redmine_db.sql
Redmineの初期設定
database.ymlとconfiguration.ymlを作成します。database.ymlはこんな感じ。
# nano /var/lib/redmine/config/database.yml
production: adapter: mysql2 database: db_redmine host: localhost username: user_redmine password: "{password}" encoding: utf8
{password}の部分はデータベースに接続するときのパスワードが入ります。すぐ上で使ったのと同じ物です。
configuration.ymlはこんな感じで。
# nano /var/lib/redmine/config/configuration.yml
production: email_delivery: delivery_method: :smtp smtp_settings: address: "localhost" port: 25 domain: "example.com" rmagick_font_path: /usr/share/fonts/ipa-pgothic/ipagp.ttf
このままでも動きますがあまりにも手抜きな設定なので、Redmineでメールを使いたい人は真面目に設定しましょう。
データベースの初期化
bundlerを使って必要になるgemをインストールします。
# cd /var/lib/redmine # bundle install --without development test --path vendor/bundle
こんな感じでデータベースを初期化。デフォルトのデータを登録しておきます。
# cd /var/lib/redmine # bundle exec rake generate_secret_token # RAILS_ENV=production bundle exec rake db:migrate # RAILS_ENV=production REDMINE_LANG=ja bundle exec rake redmine:load_default_data
Apacheの設定
サブディレクトリで動かす設定にしてみます。
# chown -R apache:apache /var/lib/redmine # ln -s /var/lib/redmine/public /var/www/html/redmine
Redmineのための設定ファイルを作っておきます。
# nano /etc/httpd/conf.d/redmine.conf
『Passengerの基本設定』の部分は、Passengerのインストールでメモした内容を入れます。
# Redmineの画像ファイル・CSSファイル等へのアクセスを許可する設定。 # Apache 2.4のデフォルトではサーバ上の全ファイルへのアクセスが禁止されている。 <Directory "/var/lib/redmine/public"> Require all granted </Directory> # Passengerの基本設定。 # passenger-install-apache2-module --snippet で表示された設定を記述。 # 環境によって設定値が異なるため以下の3行はそのまま転記せず、必ず # passenger-install-apache2-module --snippet で表示されたものを使用すること。 LoadModule passenger_module /usr/local/lib/ruby/gems/2.3.0/gems/passenger-5.0.30/buildout/apache2/mod_passenger.so <IfModule mod_passenger.c> PassengerRoot /usr/local/lib/ruby/gems/2.3.0/gems/passenger-5.0.30 PassengerDefaultRuby /usr/local/bin/ruby </IfModule> # Passengerが追加するHTTPヘッダを削除するための設定(任意)。 Header always unset "X-Powered-By" Header always unset "X-Runtime" # 必要に応じてPassengerのチューニングのための設定を追加(任意)。 # 詳しくはPhusion Passenger users guide(https://www.phusionpassenger.com/library/config/apache/reference/)参照。 PassengerMaxPoolSize 20 PassengerMaxInstancesPerApp 4 PassengerPoolIdleTime 864000 PassengerHighPerformance on PassengerStatThrottleRate 10 PassengerSpawnMethod smart PassengerFriendlyErrorPages off # サブディレクトリでRedmineを実行 RackBaseURI /redmine
ここまで出来たらApacheを起動。ついでに自動実行の設定もやっておきます。
# systemctl start httpd # systemctl enable httpd
動作を確認
ここまで出来たら、実際にアクセスして動作を確認しましょう。
http://{サーバーのアドレス}/redmine
これでアクセスできれば成功。
- ログイン: admin
- パスワード: admin
でログインできるはず。たぶん。