ArchLinuxにRedmineを導入する手順・構築編

ArchLinuxにRedmineを構築したのでメモ

とりあえずRedmine自体の構築のみ
本番環境とSSL/TLSを利用する場合の設定は別に書きます

必要なもの

  • データベース
    • mysql(mariadb)とかsqliteとかperaconaとかお好みで選べるらしい
    • 今回はmariadbを使用する。
    • $ sudo pacman -S mariadb
  • webサーバ(Apache)
    • 今回はApacheを使用します。
    • $ sudo pacman -S apache
  • ImageMagick
    • 画像を表示させたりするやつ
    • $ sudo pacman -S imagemagick
  • git
    • Redmineと連携

リリースパッケージのダウンロードと展開

Redmineのサイトからダウンロード。
$ wget http://www.redmine.org/releases/redmine-3.0.3.tar.gz
$ wget http://www.redmine.org/releases/redmine-3.0.3.tar.gz.md5

md5でハッシュを確認しておく

$ md5sum redmine-3.0.3.tar.gz
> 493463.... 
$ cat redmine-3.0.3.tar.gz.md5
> 493463....

tarをお好みの場所に展開する。
自分は/srvに展開しました。
$ sudo tar fvxz redmine-3.0.3.tar.gz -C /srv/

データベースの用意

コマンドがmysqlとなっているが、あくまでmariadbはmysqlの実装なのでmysqlのコマンドが使える。

データベースの初期設定

デフォルトのテーブルのインストール

自分の環境だとこれをやらないと後でmysqld.serviceが起動できなくなってしまった。
ArchWikiのトラブルシューティングの項目に載っていた

# cd /usr
# mysql_install_db --user=mysql --ldata=/var/lib/mysql/

を実行

mysqlの起動

systemdでmysqlを起動してみる。
$ sudo systemctl start mysqld
うまく起動できたら起動時に実行されるようにしておく
$ sudo systemctl enable mysqld

データベースの初期化

セットアップスクリプトの実行
$ sudo mysql_secure_installation

rootのpassを聞かれるが、まだパスワードを設定していないのでそのままEnter
> Enter current password for root (enter for none) :
新しいrootのパスワードを設定するか聞かれるので"y"
> Set root password? [Y/n] : y
> New password: 設定したいパスワードを入力
> Re-enter new password: 設定したいパスワードを再入力
匿名ユーザーを削除する
> Remove anonymous users? [Y/n] : Enter
リモートからのrootログインを拒否
> Disallow root login remotely? [Y/n] : Enter
testテーブルを削除する。
testテーブルは誰でもアクセスできてしまう。セキュリティ的に消したほうがいいらしいので消す
> Remove test database and access to it? [Y/n] : Enter
権限テーブルをリロードする
> Reload privilege tables now? [Y/n] : Enter
設定は以上で終わり

データベースの文字コード

文字コードをUTF-8に変更します。
ArchWikiに載っていた方法だとうまく変更できなかったので他のサイトで見つけてきた方法で変更します。
ちなみに、RedmineはUTF-8に設定しておけば文字化けはしないそうです。

とりあえず先に現在の文字コードを確認
$ mysql -uroot -p
mysql> show variables like "chara%";

Variable_name Value
character_set_client latin1
character_set_connection latin1
character_set_database utf8
character_set_filesystem binary
character_set_results latin1
character_set_server utf8
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/

mysqlの設定ファイルを編集し、[client]と[mysqld]に次の行を追加
$ sudo vim /etc/mysql/my.cnf

[client]
default-character-set=utf8

[mysqld]
character-set-server=utf8

他の設定項目を見ると、アンダーバーとハイフンの2通りの設定項目がありますが、mysqlの設定ファイルの場合、どちらでも問題は無いようです。
ちなみに、default-character-set=utf8character-set-server=utf8は同じ意味だそうです。
詳しくはここ

もう一度確認してみます。
mysql> show variables like "chara%";

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/

データベースユーザの作成

Redmineが使用するMySQLのユーザを作成します。

MySQLにログインし、次の3行を入力

CREATE DATABASE redmine CHARACTER SET utf8;
CREATE USER 'redmine'@'localhost' IDENTIFIED BY '[パスワード]';
GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';

データベースの設定

"production"環境用のデータベース設定をする。
Railsではproduction、development、testなどの本番環境や開発環境で環境をわけれるらしい?
productionが本番環境用で、developmentは開発環境
違いはdevelopmentはある程度のエラーは許容するみたい

ここでは、一旦Redmineのデータベースの設定を行います。
実際のテーブルとかは後で作成します。

config/database.ymlの作成

Redmineの展開ディレクトリに移動して
$ sudo cp config/database.yml.example config/database.yml 設定ファイルの編集

# vim config/database.yml
    production:
        adapter: mysql2
        database: redmine
        host: localhost
        username: redmine
        password: "[パスワード]"
        encoding: utf8

bundlerのインストール

インストール

$ sudo gem install --no-user-install bundler
ArchLinuxでは、デフォルトではgemはシステム全体ではなく、個別にインストールされるようになっている。
--no-user-installオプションを追加することで、システム全体(/usr/lib/ruby/gems/)にインストールされる

gemのインストール

Redmineの展開したディレクトリの中で
$ bundle install --without development test postgresql sqlite
$ sudo -uhttp bundle install --without development test postgresql sqlite
今回はMySQLを使用するので、postgresqlとsqliteのgemを省略します。
ImageMagickをインストールしていない場合は--withoutオプションにrmagickを追加します。
インストールしている場合、エラーが出ることがあるそうです。
その場合はこことかが参考になりそうです

bundleコマンドは基本的にはsudoを使用しなくて問題ないみたいです。
sudoでbundleを使用したら怒られました
root権限が必要なときはその時にパスワードを求めてくるそうです。

セッションストア秘密鍵の生成

Redmineの展開ディレクトリで下記コマンドを実行
$ sudo rake generate_secret_token

データベース上にテーブルを作成

Redmineの展開ディレクトリに移動

データベースにテーブルを作成

テーブルとRedmineの管理者アカウントが作成される
$ RAILS_ENV=production rake db:migrate

デフォルトデータをデータベースに登録

デフォルトのロール、トラッカー、ステータス、ワークフロー、列挙項目がロードされる 使用言語を聞かれるのでjaと解答
$ RAILS_ENV=production rake redmine:load_default_data

パーミッションの設定

Redmineの展開ディレクトリ内で、
$ sudo mkdir tmp public/plugin_assets
$ sudo chown -R http:http [Redmine全体]
$ sudo chmod -R 755 files log tmp public/plugin_assets

ちなみにRedmine Guideによると、

Railsアプリケーションのディレクトリ($RAILS_ROOT)および$RAILS_ROOT以下のファイル・ディレクトリのオーナーは、root以外としてください。 Passengerでは、root権限でRailsアプリケーションを動かすことはできません。Railsアプリケーションが動作するユーザーは$RAILS_ROOT/config/environment.rbのオーナーとなりますが、environment.rbがrootの場合はnobodyユーザーで動作します。このとき、オーナーがrootである$RAILS_ROOT/logディレクトリや$RAILS_ROOT/tmpディレクトリに書き込みができず、アプリケーションが動作しないことがあります。

rootだとダメみたいです。

構築できたか確認

うまく構築できたか一度確認します。
$ sudo ruby script/rails server webrick -e production
script/railsは無いとか怒られたんでbin/railsを使用します。
$ sudo ruby bin/rails server webrick -e production
外部のVPSなどで起動する場合、そのVPSのIPをオプションで設定してあげる必要があります。
$ sudo ruby bin/rails server webrick -e production -b 157.7.53.36

WEBrickを起動して、http://[ホスト名]:3000/ にアクセスするとRedmineが開けるはずです。
(ポートの開け忘れに注意!)

WEBrickはRedmine Guideによると、

注意: Webrickは通常は開発時に使用すものであり、通常の運用には適していません。動作確認以外には使用しないでください。本番運用においてはPassenger (mod_rails)、FCGI、またはRackサーバ(Unicorn, Thin, Puma, hellipなど)の利用を検討してください。

とのことなので、本番環境を何で動かしゃいいのかググった結果、 ArchWikiに本番環境はApacheにPassengerを導入したものでいいみたいなことが書いてあったので、そうしたいと思います。

本番環境の構築と、設定などは次の記事で書きたいと思います。

ちなみにWEBrickでも login: admin password: admin でログインして設定変更とかは出来ます。

[参考サイト]

MySQL

SSHのインストールと設定

VPSにArchを入れ直した際に行ったSSHの設定とか、
localに保存しておいたメモとかのまとめ

眠い時にうつらうつら書いたので誤字脱字があるかも。

環境

  • サーバ - ArchLinux
  • クライアント - ArchLinux

SSHのインストール

鯖$ sudo pacman -S openssh
local$ sudo pacman -S openssh

サーバ側の設定

設定

鯖$ sudo vim /etc/ssh/sshd_config

Port

デフォルトポートのままだと攻撃される確率が高いため変更する。
Port 22222
Port番号を変更した場合は、sshコマンドに'-p[ポート番号]'を追加する。
ex) $ ssh -p22222 foo@XXX.XXX.XXX.XXX

Protocol

バージョン1だと脆弱性があるのでバージョン2を使用する。
デフォルトで2だけを使用するように設定されているみたいだけど、明示的に2を使用するように設定する。(特に意味はない)
Protocol 2

PermitRootLogin

rootでログインできるかどうか
もちろん無効にする。
suはsudoはできる。
PermitRootLogin no

PermitEmptyPasswords

空パスワードを使用できるかどうか
無効にする。
PermitEmptyPasswords no

PasswordAuthentication

パスワード認証を使用するかどうか
これを無効にすると公開鍵認証でしか認証できなくなる。
公開鍵の設定をしていない状態でこれを有効にしてしまうとSSHでパスワード認証が出来ずログインできなくなるので注意!!!
PasswordAuthentication no
※ この後にする公開鍵認証の設定を行ってからnoにする。

AllowAgentForwarding

踏み台にできるやつ
詳しくはここ
使用しない場合は無効にする
AllowAgentForwarding no

AllowTcpForwarding

ポートフォワーディングの設定
使用しない場合は無効にする
AllowTcpForwarding no

X11Forwarding

リモートでGUIを使うかどうか
使用しないので無効にしておく
X11Forwarding no

MaxAuthTries

パスワード認証時のログイン試行回数
デフォルトでは6回になっている。
公開鍵認証では関係無い
MaxAuthTries 6

AllowUsers

SSHを使用できるユーザを制限する。
ここでユーザ名が指定されたユーザのみSSHを使用できるようになる。
特定ユーザのみ拒否したい場合はDenyUsersを使用する。
基本的にはAllowUsersを使用すべき
AllowUsers foo bar baz
ちなみに、AllowUsers foo@10.1.1.1とかAllowUsers *@10.1.1.1とかもできる
(10.1.1.1からのfooでのログインのみ許可や、10.1.1.1からだけログインを許可するといったことができる。)
もしつながらない場合、*@127.0.0.1/8 のようにプレフィックス長も入力するとうまく行くかもしれません

サービスの起動

systemdの場合
鯖$ sudo systemctl start sshd.service
鯖$ sudo systemctl enable sshd.service

Firewall設定

iptablesを使用している場合。
鯖$ sudo vim /etc/iptables/iptables.rules
以下を追加
-A INPUT -p tcp -m state --state NEW -m tcp --dport [ポート番号] -j ACCEPT
FORWARDの後に書くとポートが開かなかったりするので書く場所には注意

試しにログインしてみる

local$ ssh [ユーザ名]@[接続先名]
PasswordAuthenticationをnoにしている場合はまだログイン出来ない。
この後する公開鍵認証の設定が出来てからnoにする。
Port番号を変更している場合は
local$ ssh -p[ポート番号] [ユーザ名]@[接続先名]

公開鍵認証の設定

このままではブルートフォースアタックが出来てしまうので、公開鍵認証を使用したログイン方式に変更する。
まず、クライアント側で秘密鍵と公開鍵のペアを作成する。

鍵の種類について

DSAよりRSAの方が暗号強度が高い
DSAはユーザ認証しかカバーしていないが、RSAは、ユーザ認証と暗号化の2つをカバーしている。
ただ、SSHの場合は認証だけ公開鍵認証で行って、実際の通信は共通鍵暗号で暗号化しているみたいです。
今回はRSAで鍵ペアを作成したいと思います。

鍵ペアの作成

local$ ssh-keygen -t rsa
ちなみに作成できる鍵のタイプは、
dsa : DSA(SSHv2)
ecdsa :
ed25519 :
rsa : RSAバージョン2(SSHv2)
rsa1 : RSAバージョン1(SSHv1)
こんな感じ
※ rsa1がバージョン1で、rsaがバージョン2だそうです

鍵ペアの名前を設定する。何も入力せずにEnterで~/.ssh/id_rsaが作成される。
Enter file in which to save the key (/home/hnron/.ssh/id_rsa): [鍵ペア名]
ちなみに相対指定はできるけど~(チルダ)は使えなかった
鍵名はデフォルトの場合問題ないが、自分で指定する場合、'-i'オプションで秘密鍵を指定する必要がある。それを回避する方法は下の方に書いておきます。

パスフレーズの入力。
Enter passphrase (empty for no passphrase): [パスフレーズ]
Enter same passphrase again: [パスフレーズ]
パスフレーズは無くても問題は無い。ちなみんパスフレーズはネットワーク上に流れず、ローカルで処理される。
秘密鍵が流出しちゃった時に、パスフレーズが設定されていると、パスフレーズが解析されるまで時間が稼げる。
詳しくはここ

鍵ペアの作成が成功するとフィンガープリントが表示される。
これで公開鍵と秘密鍵のペアが'~/ssh/'内に作成される。
鍵は、'[鍵ペア名]'で指定したものと同じ名前のほうが秘密鍵、.pubの拡張子が付いている方が公開鍵。

アクセス権と鍵の場所

鍵ペアは特に理由が無い限り ~/.ssh/ 内に保存しておく

パーミッション

local側
~/.ssh 700
秘密鍵 600
公開鍵 644
~/.ssh/known_hosts 644

サーバ側
~/.ssh 700
~/.ssh/authorized_keys 644 ~/.ssh/known_hosts 644

パーミッションがおかしいとSSH使用時に怒られる。

公開鍵をサーバに登録する

公開鍵をサーバに登録する方法は2通りある
scpでコピーする方法とssh-copy-idを使用する方法

scpでコピーする方法

~/.ssh/[鍵].pub をscpコマンドを使用してサーバに登録する。

local$ scp -P[ポート番号] ~/.ssh/[公開鍵].pub foo@XXX.XXX.XXX.XXX:
コピーするユーザはSSHで普段ログインするユーザ

一度サーバ側にログインし、公開鍵がコピーできているか確認
local$ ssh -p22222 foo@XXX.XXX.XXX.XXX

鯖$ ls
[公開鍵].pub

このファイルを '~/.ssh/authorized_keys' に追記する

鯖$ mkdir ~/.ssh
鯖$ touch ~/.ssh/authorized_keys
鯖$ cat [公開鍵].pub >> ~/.ssh/authorized_keys
鯖$ chmod 700 ~/.ssh
鍵$ chmod 644 ~/.ssh/authorized_keys

一度ログアウトして再度SSHログインをすると公開鍵認証になるはず
-iオプションでサーバに登録した鍵ペアの秘密鍵を指定する
local# ssh -i [秘密鍵] -p[ポート番号] foo@XXX.XXX.XXX.XXX

ssh-copy-idを使用する方法

local$ ssh-copy-id -i [秘密鍵] -p[ポート番号] foo@XXX.XXX.XXX.XXX
これで自動的に秘密鍵に対応する公開鍵がサーバの~/.ssh/authorized_keysに登録される

公開鍵認証を有効にする

この後、サーバ側の/etc/ssh/sshd_configの設定で
PasswordAuthentication no
の設定にしておきます
これでパスワード認証が無効になって公開鍵認証しか使えなくなりました

オプションで秘密鍵を指定するのが面倒な場合

ssh-keygenで鍵ペアを作成する場合、デフォルトの鍵名の場合は-iオプションが必要無いが、自分で鍵名を指定した場合は-iオプションで秘密鍵を指定する必要がある。
~/.ssh/configにチョメチョメすると回避できる
ちなみに、Port番号も指定できる local$ vim ~/.ssh/config

# アクセスする際の名前(ただのalias)
Host XXX.XXX.XXX.XXX
    # ユーザ名
    User foo
    # 実際のIPアドレスやホストネーム
    Hostname XXX.XXX.XXX.XXX
    # 秘密鍵の場所
    IdentityFile ~/.ssh/[秘密鍵]
    # ポート番号
    Port 22222
    # パスワード認証の有無
    PasswordAuthentication no
    # 公開鍵認証の有無
    RSAAuthentication yes

Host bar.com
    User foo
    Hostname bar.com
    IdentityFile ~/.ssh/[秘密鍵]
    passwordAuthentication no
    RSAAuthentication yes

パスフレーズを入力するのが面倒な場合

ssh-agentを使います
ssh-agentの子プロセスとしていつも使ってるシェルを起動
local$ ssh-agent zsh
local$ ssh-add [秘密鍵]
Enter passphrase for /home/hoge/.ssh/key: [パスフレーズ]
これでSSHでログインしようとするとパスフレーズを入力せずにログインできるようになっているはずです

参考サイト

公開鍵ペアの名前を変更して保存したい場合

ConoHaにLinuxからsftpでISOimageをアップロードする

ConoHaを利用する際、使いたいOSのイメージが用意されていなかったり、自分で用意したい場合のやり方。

事前準備

インストールしたいOSのイメージを用意する

SSHの設定

ConoHaのコンパネを開き、コンソールの画面を開くと、下の方に "SSH Private Key" というのがあるので、クリックして秘密鍵をダウンロード。

ダウンロードしたら秘密鍵の場所とパーミッションを変更する。

# mv [秘密鍵] ~/.ssh/
# chmod 600 [秘密鍵]

イメージのアップロード

さっき "SSH Private Key" をダウンロードした場所に書いてある、 "ISOイメージアップロード(SFTP)" の接続先とユーザ名を確認する。

コンソールから

# sftp -o IdentityFile=[秘密鍵のパス] [ユーザ名]@[接続先]:images/
> Connected to sftp1001.cnode.jp.
> Changing to: /images/
sftp> put [ISOイメージ]
> Uploading Linux.iso to /images/Linux.iso
> Linux.iso
sftp> exit

これでアップロードができる。
あとはコンパネからOS再インストールを選択すると、インストール元から今回アップロードしたイメージが選択できる。

参考

ConoHaのブログ

ConoHaにArchLinuxをインストールした時の手順

最近VPS上のArchLinuxを再インストールしたのでその手順をまとめてみました。

環境

  • OS : ArchLinux64bit(自分でアップロードしたISOイメージ)
  • VPS : ConoHa
  • プラン : メモリ2Gのやつ

VPSの作成とインストールイメージの用意

VPSを作成する

  • 最初にVPSを作成するときはCentOSしか選べないはずなので、とりあえず適当にVPSをひとつ作ります。

今回使用するArchのインストールイメージについて

  • 作成した後、OSの再インストールを開くと、ConoHaで用意されているArchLinuxのインストールイメージがあるのですが、今回は自分でインストールイメージを用意します。
  • ArchLinuxのイメージを用意する方法は2つあります(今考えた)。
    • 自分で落としてきてConoHaにアップロード
    • いま作成したVPSにイメージをDLしてそこからConoHaにアップロード
  • 今回は現在使用しているネット回線が通信速度絶賛規制中なので今作成したVPSにDLしてConoHaにアップロードする方法でいきます。

ArchLinuxのイメージを用意する

インストールイメージのダウンロード
  1. ConoHaのコンパネからコンソールを開くと、下の方に"SSH Private Key"というのがあるのでクリックして秘密鍵をダウンロードします。
  2. 今DLした秘密鍵の場所とパーミッションを変更します。
local# mv [秘密鍵] ~/.ssh/
local# chmod 600 [秘密鍵]
  1. SSHでログイン
    local# ssh -i./ssh/[秘密鍵] root@X.X.X.X
  2. 適当な場所にwgetでイメージをDLします。
    cent# wget http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/iso/2015.06.01/archlinux-2015.06.01-dual.iso
  3. DLが完了したらcent# sha1sum archlinux-2015.06.01-dual.isoでハッシュを確認します。
インストールイメージのアップロード

今ダウンロードしたインストールイメージをConoHaにアップロードします。

  1. VPS上からConoHaにアップロードできるように、さっきDLした秘密鍵をCentOS上にscpする。
    local# scp ~/.ssh/[秘密鍵] root@X.X.X.X:.ssh/
  2. ConoHaのコンパネで "OS再インストール" を選択し、ページの一番下にある "ISOイメージアップロード(SFTP)" から "接続先&ユーザ名" を確認する。
  3. sftpでインストールイメージをアップロードするためのサーバに接続し、イメージをアップロード
cent# sftp -o IdentityFile=[秘密鍵のパス] [ユーザ名]@[接続先]:images/
> Connected to sftp1001.cnode.jp.
> Changing to: /images/
sftp> put archlinux-2015.06.01-dual.iso
> Uploading archlinux-2015.06.01-dual.iso to /images/archlinux-2015.06.01-dual.iso
> archlinux-2015.06.01-dual.iso
sftp> exit

Archのインストールディスクを起動する

  1. "OS再インストール" を選択。
  2. "インストール元" でアップロード済みISOイメージを選択。
  3. "テンプレートイメージ" からさっきアップロードしたISOイメージを選択する。
  4. Archの場合 "Virtio" が使えないので "OFF" にする。

    FreeBSD、ArchLinuxはVirtioをOFFにしてください。 ONの場合はVirtioドライバーがないため、デバイスを認識できずにインストールが途中で止まってしまいます。

    だそうです。

  5. "ビデオデバイス" はGUIを使用する場合は "vmvga" にする。 あと処理速度も "vmvga" のほうが高いらしい。 前回 "vmvga" でArchも動いたのでそっちを使用する。 詳しい違いはここを参考
  6. "ディスク構成" は分ける必要も無いかなと思うので "カスタム" で片方を200GBに指定して一つにまとめてしまいます。
  7. 変更を確定し、VPSを起動させる。

ドライブの準備

パーティションの準備

今回はrootディレクトリ一つとswapの2つのパーティションを作成たいと思います。
(bootパーティションとか分けてもいいけど正直そこまでしなくてもいい気がする。)

rootパーティションの作成

fdiskを使用してパーティションを作成します。

archiso# fdisk /dev/sda
archiso# Command (m for help): o ("o"を入力でパーティションテーブルの作成)
> Created a new DOS disklabel with disk identifier XXXXXXXXXX.
archiso# Command (m for help): n ("n"を入力で新しいパーティションテーブルを作成)
> Partition type
>  p  primary (0 primary, 0 extended, 4 free)
>  e  extended
archiso# Select (default p): (パーティションのタイプを選ぶ。何もせずにEnter)
> Using default response p.
archiso# Partition numver (1-4, default 1): (作成するパーティションのナンバーを入力。1を入力してEnter)
archiso#Firest sector (2048-XXXXXXX, default 2048):` (何も入力せずにEnter)
archiso#Last sector, +sectors or +size{K,M,G,T,P} (2048-XXXX,default XXXX) : +190G
今回HDDは200GB。SWAPを適当に10GBぐらいで作ろうと思うので単純計算+190Gにしときました。
> Created a new partition 1 of type 'Linux' and of size 190 GiB.
swapパーティションの作成

今のと同じ手順でSWAP用のパーティションを作成していきます。

archiso# Command (m for help): n
後はすべてEnter
> Created a new partition 2 of type 'Linux' and of size 10GiB
上手く10GB分作れてた。
archiso# Command (m for help): w ("w"で変更をディスクに書き込んで終了!)  
> The partition table has been altered.
> Calling ioctl() to re-read partition table.
> Syncing disks.
  • wで書き込んだ時に、Re-reading the partition table failed.: Device or resource busyと怒られた場合、
    lsblkした時に、前回のパーティション構成が表示されてしまっていますが、再起動すると適応されるはずです。
    気になる人は再起動してからやり直してもいいかも(私はやり直しました)

ちゃんとパーティションが作成されているか確認。

archiso# lsblk
sda    200G
|-sda1 190G
|-sda2  10G

ファイルシステムの作成

archiso# mkfs.ext4 /dev/sda1
archiso> proceed anyway? (y,n)と聞かれたらyと応える
そしてswapの作成
archiso# mkswap /dev/sda2
swaponするのを忘れないように!
archiso# swapon /dev/sda2
ちゃんとファイルシステムが作成されているか確認

archiso# lsblk -f
sda
|-sda1 ext4
|-sda2 swap

パーティションのマウント

archiso# mount /dev/sda1 /mnt
今回パーティションは"/dev/sda1"しか作成していないのでこれだけ

インストール

一応ネットワークにつながっているか確認する
archiso# ping archlinux.org

ミラーリストの選択

"mirrorlist"を編集して日本のサーバを1番上に持ってきます。 インストールした時にこの設定が引き継がれるっぽいです。
archiso# vi /etc/pacman.d/mirrorlist .jpのサーバが2つあるはずなのでヤングして1番上に持ってきます。 保存して終了

ベースシステムのインストール

ベースシステムのインストールを行います。
archiso# pacstrap /mnt base base-devel
ここで、引数のbasebase-devel以外にインストールしたいパッケージを指定すると一緒にインストールしてくれます。
こんな感じ archiso# pacstrap /mnt base base-devel vim zsh grml-zsh-config openssh

fstabの生成

fstabを作成します。これがないと起動出来ないので注意。
archiso# genfstab -U -p /mnt >> /mnt/etc/fstab
一応確認

archiso# cat /mnt/etc/fstab
> # /dev/sda1
> UUID=XXX / ext4 rw,relatime,data=ordered 0 1
> # /dev/sda2
> UUID=XXX none swap defaults 0 0

ちゃんと作れてました。

Chrootとベースシステムの設定

今インストールしたArchLinuxにChrootでログインして色々と設定します。
archiso# arch-chroot /mnt /bin/bash

ロケール

ロケールの設定をする

locale.genを編集
chroot# vi /etc/locale.gen
 en_US.UTF-8 UTF-8
 ja_JP.UTF-8 UTF-8

行の最初の"#" を削除

localeを生成

chroot# locale-gen

locale.confの編集

chroot# echo LANG=en_US.UTF-8 > /etc/locale.conf
chroot# export LANG=en_US.UTF-8

タイムゾーン

日本のタイムゾーンを設定
chroot# ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

ハードウェアクロック

Archにはデフォルトで時刻合わせのためのデーモン等が入っていません。
ntpかsystemdで設定してあげる必要があります。
今回はsystemdで設定したいと思います。

chroot# vi /etc/systemd/timesyncd.conf (2行追加)
    NTP=0.arch.pool.ntp.org 1.arch.pool.ntp.org 2.arch.pool.ntp.org 3.arch.pool.ntp.org
    FallbackNTP=0.pool.ntp.org 1.pool.ntp.org 0.jp.pool.ntp.org

chroot# timedatectl set-ntp true
chroot# date (正しい時間か確認)
chroot# hwclock --systohc --utc

ホストネーム

かっちょいいホストネームをつけます
chroot# echo [かっちょいいホストネーム] > /etc/hostname
同じホスト名を"/etc/hosts"に追加

chroot# vi /etc/hosts
127.0.0.1 localhost.localdomain localhost [ホストネーム]
::1       localhost.localdomain localhost [ホストネーム]

Pacmanの設定

[multilib]を有効にします。

chroot# vi /etc/pacman.conf
    [multilib]
    Include = /etc/pacman.d/mirrorlist

この2行の最初の"#"を消します。[multilib]の行の"#"も消さないとダメです。

パッケージリストの更新
chroot# pacman -Sy

rootパスワードの設定

chroot# passwd

ブートローダのインスコと設定

今回はGRUBを使います

chroot# pacman -S grub
chroot# grub-install --recheck /dev/sda
> Installing for i386-pc platform.
>Installation finishd. No error reported.

上手くインストールできたみたいです

"grub.cfg"を自動生成します。
chroot# grub-mkconfig -o /boot/grub/grub.cfg

パーティションのアンマウントと再起動

Chrootを抜けます
chroot# exit
アンマウント
archiso# umount /mnt
電源を落とします。
archiso# reboot

コンソールページ右上の排出ボタンでディスクを取り出します。  

必要最低限の設定

ネットワークに接続させる

dhcpcdを起動して上げると後は勝手にやってくれます。
arch# systemctl enable dhcpcd.service
arch# systemctl start dhcpcd.service

ユーザーの追加

管理者用のユーザを追加

arch# useradd -m -G wheel -s /bin/zsh [ユーザ名]
先にpacmanでzshをインスコしていたのでデフォルトシェルはzshです
オプション忘れそうなので書いておくと
-m ユーザディレクトリを自動生成
-g プライマリグループ、指定しないと自動でユーザ名&UIDと、同じグループ名&GIDで作成してもらえる
-G セカンダリグループ
-s デフォルトシェル
wheelは、sudoを使えるグループ的な感じ

パスワードの設定

arch# passwd [ユーザ名]

sudoを使えるように設定
arch# visudo
%wheel ALL=(ALL) ALL

行の最初の"#"を消す

Firewallの設定

iptablesの設定

設定はCentOSから引っ張ってきました

arch# vim /etc/iptables/iptables.rules
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    -A INPUT -p icmp -j ACCEPT
    -A INPUT -i lo -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
    -A INPUT -j REJECT --reject-with icmp-host-prohibited
    -A FORWARD -j REJECT --reject-with icmp-host-prohibited
    COMMIT
iptablesの起動

arch# systemctl start iptables
すでに起動している場合は再起動しないと設定が更新されません
arch# systemctl restart iptables
んで、起動時にサービスがスタートするように設定
arch# systemctl enable iptables

ちなみに、Archだとデフォルトで/etc/iptables/iptables.rulesが作成されていません。
iptablesは.rulesファイルがないと起動出来ないので注意!

ip6tablesの設定
こっちもCentOSから設定を引っ張ってきました。

arch# vim /etc/iptables/ip6tables.rules
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    -A INPUT -p ipv6-icmp -j ACCEPT
    -A INPUT -i lo -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
    -A INPUT -j REJECT --reject-with icmp6-adm-prohibited
    -A FORWARD -j REJECT --reject-with icmp6-adm-prohibited
    COMMIT

ip6tablesの起動
arch# systemctl start ip6tables
すでに起動している場合は再起動しないと設定が更新されません
arch# systemctl restart ip6tables
んで、起動時にサービスがスタートするように設定
arch# systemctl enable ip6tables

備考

  • sshだとかの手順はそのうち書く予定

参考サイト

  • 事前準備的なので使用した ConoHaにISOイメージをアップロードするための手順 ConoHaのブログ

変更履歴

6月6日 作成