<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://wiki.archlinux.jp/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Fragment</id>
	<title>ArchWiki - 利用者の投稿記録 [ja]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.archlinux.jp/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Fragment"/>
	<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php/%E7%89%B9%E5%88%A5:%E6%8A%95%E7%A8%BF%E8%A8%98%E9%8C%B2/Fragment"/>
	<updated>2026-04-06T20:02:38Z</updated>
	<subtitle>利用者の投稿記録</subtitle>
	<generator>MediaWiki 1.44.3</generator>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Fragment&amp;diff=40734</id>
		<title>利用者:Fragment</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Fragment&amp;diff=40734"/>
		<updated>2025-08-22T02:18:27Z</updated>

		<summary type="html">&lt;p&gt;Fragment: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Slackでニュース翻訳要約してる人&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Nftables&amp;diff=6973</id>
		<title>Nftables</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Nftables&amp;diff=6973"/>
		<updated>2017-01-14T10:34:31Z</updated>

		<summary type="html">&lt;p&gt;Fragment: /* シンプルな IP/IPv6 ファイアウォール */ ポート番号修正&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:nftables}}&lt;br /&gt;
[[Category:ファイアウォール]]&lt;br /&gt;
[[en:nftables]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|ファイアウォール}}&lt;br /&gt;
{{Related|iptables}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
[http://netfilter.org/projects/nftables/ nftables] は既存の ip-, ip6-, arp-, ebtables フレームワークを置き換える netfilter のプロジェクトです。新しいパケットフィルタリングフレームワーク、新しいユーザースペースユーティリティ (nft)、そして ip- と ip6tables の互換レイヤーを提供します。現行のフック、接続追跡システム、ユーザースペースのキューイングコンポーネント、そして netfilter のログサブシステムを使っています。&lt;br /&gt;
&lt;br /&gt;
nftables は3つのメインコンポーネントから構成されています: カーネルの実装、libnl netlink communication そして nftables ユーザースペースフロントエンド。カーネルは netlink の設定インターフェイスだけでなく、小さなクラス言語インタプリタを使用するランタイムのルールセットの評価も提供します。libnl にはカーネルと通信するためのローレベルな関数が含まれています。nftables フロントエンドはユーザーが対話するものです。&lt;br /&gt;
&lt;br /&gt;
[http://wiki.nftables.org nftables の公式 wiki] には詳しい情報が載っています。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
Linux カーネル 3.13 から nftables を使うことはできますが、できるかぎり最新のカーネルを使用すること推奨します。nftables のユーザーランドユーティリティは {{Pkg|nftables}} パッケージで利用できます。[[Arch User Repository|AUR]] には {{AUR|nftables-git}} パッケージも存在します。&lt;br /&gt;
&lt;br /&gt;
== 基本的な実装 ==&lt;br /&gt;
&lt;br /&gt;
他のファイアウォールと異なり、nftables ではコマンドラインで作成される一時的なルールと、ファイルに保存して読み込まれる永続的なルールを区別しています。デフォルトファイルの {{ic|/etc/nftables.conf}} には &amp;quot;inet filter&amp;quot; という名前のシンプルな ipv4/ipv6 ファイアウォールテーブルが既に記述されています。&lt;br /&gt;
&lt;br /&gt;
=== デフォルトルールセットのロード ===&lt;br /&gt;
&lt;br /&gt;
{{ic|nftables.service}} を[[起動]]・[[有効化]]してください。&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでルールセットを確認できます:&lt;br /&gt;
&lt;br /&gt;
 # nft list ruleset&lt;br /&gt;
&lt;br /&gt;
inet filter テーブルの設定が表示された場合、デスクトップとしてインターネットを問題なく利用できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|systemd サービスが正しく動作するように必要な nftables 関連のモジュール全てのエントリを含む {{ic|/etc/modules-load.d/nftables.conf}} を作成する必要があります。モジュールのリストは次のコマンドで取得可能です: {{bc|&amp;lt;nowiki&amp;gt;$ lsmod | grep &#039;^nf&#039;&amp;lt;/nowiki&amp;gt;}} 作成していないと、{{ic|Error: Could not process rule: No such file or directory}} エラーで終了してしまいます。}}&lt;br /&gt;
&lt;br /&gt;
== nft ==&lt;br /&gt;
nftables のユーザースペースユーティリティ {{ic|nft}} は現在カーネルのためにルールセットを処理する前にほとんどのルールセットの評価を行います。そのため、nftables はデフォルトのテーブルやチェインを提供していません。しかしながらユーザーが iptables のような設定をエミュレートすることが可能です。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Pkg|nftables}} には &amp;quot;filter&amp;quot; テーブルが記述されている {{ic|/etc/nftables.conf}} が含まれています。このテーブルのルールでは、特定のプロトコルだけを許可して、他のプロトコルは全て拒否するようになっています。}}&lt;br /&gt;
&lt;br /&gt;
nft は ifconfig や iproute2 と同じような感じで動作します。iptables のように引数のスイッチを使う代わりに、長く構造化された連続のコマンドになります。例えば:&lt;br /&gt;
 nft add rule ip6 filter input ip6 saddr ::1 accept&lt;br /&gt;
{{ic|add}} はコマンドです。{{ic|rule}} は {{ic|add}} のサブコマンドです。{{ic|ip6}} は {{ic|rule}} の引数で、ip6 ファミリーを使うことを宣言しています。{{ic|filter}} と {{ic|input}} は {{ic|rule}} の引数で、それぞれ使用するテーブルとチェインを指定しています。残りはルールの定義で、マッチ ({{ic|ip}}) とパラメータ ({{ic|saddr}})、パラメータの引数 ({{ic|::1}}) そしてジャンプ ({{ic|accept}}) からなります。&lt;br /&gt;
&lt;br /&gt;
以下は nft で利用できるコマンドの不完全なリストです:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
list&lt;br /&gt;
  tables [family]&lt;br /&gt;
  table [family] &amp;lt;name&amp;gt;&lt;br /&gt;
  chain [family] &amp;lt;table&amp;gt; &amp;lt;name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
add&lt;br /&gt;
  table [family] &amp;lt;name&amp;gt;&lt;br /&gt;
  chain [family] &amp;lt;table&amp;gt; &amp;lt;name&amp;gt; [chain definitions]&lt;br /&gt;
  rule [family] &amp;lt;table&amp;gt; &amp;lt;chain&amp;gt; &amp;lt;rule definition&amp;gt;&lt;br /&gt;
&lt;br /&gt;
table [family] &amp;lt;name&amp;gt; (shortcut for `add table`)&lt;br /&gt;
&lt;br /&gt;
insert&lt;br /&gt;
  rule [family] &amp;lt;table&amp;gt; &amp;lt;chain&amp;gt; &amp;lt;rule definition&amp;gt;&lt;br /&gt;
&lt;br /&gt;
delete&lt;br /&gt;
  table [family] &amp;lt;name&amp;gt;&lt;br /&gt;
  chain [family] &amp;lt;table&amp;gt; &amp;lt;name&amp;gt;&lt;br /&gt;
  rule [family] &amp;lt;table&amp;gt; &amp;lt;handle&amp;gt;&lt;br /&gt;
&lt;br /&gt;
flush&lt;br /&gt;
  table [family] &amp;lt;name&amp;gt;&lt;br /&gt;
  chain [family] &amp;lt;table&amp;gt; &amp;lt;name&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
{{ic|family}} は任意ですが、デフォルトは {{ic|ip}} になります。&lt;br /&gt;
&lt;br /&gt;
==テーブル==&lt;br /&gt;
テーブルの用途はチェインを保持することです。iptables のテーブルと違って、nftables には初めから組み込まれているテーブルはありません。テーブルは指定の5つのファミリーのうちどれか一つを持つことができ、それによって様々な iptables のユーティリティを一つに統一します:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! nftables ファミリー || iptables ユーティリティ&lt;br /&gt;
|-&lt;br /&gt;
| ip || iptables&lt;br /&gt;
|-&lt;br /&gt;
| ip6 || ip6tables&lt;br /&gt;
|-&lt;br /&gt;
| inet || iptables と ip6tables&lt;br /&gt;
|-&lt;br /&gt;
| arp || arptables&lt;br /&gt;
|-&lt;br /&gt;
| bridge || ebtables&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ファミリー ===&lt;br /&gt;
&lt;br /&gt;
{{ic|ip}} (IPv4) がデフォルトのファミリーです。特に指定がなければ {{ic|ip}} が使われます。&lt;br /&gt;
&lt;br /&gt;
IPv6 は {{ic|ip6}} で指定できます。&lt;br /&gt;
&lt;br /&gt;
IPv4 と IPv6 の両方に適用されるルールを作成するには {{ic|inet}} を使います。Linux 3.15 以上が必要で、{{ic|ip}} と {{ic|ip6}} ファミリーを統一してルールを簡単に定義できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|inet}} は {{ic|nat}} タイプのチェインでは使えず、{{ic|filter}} タイプのチェインを使う必要があります ([http://www.spinics.net/lists/netfilter/msg56411.html ソース])。}}&lt;br /&gt;
&lt;br /&gt;
===表示===&lt;br /&gt;
ファミリーの現在のテーブルは {{ic|nft list}} コマンドで一覧できます。&lt;br /&gt;
 # nft list tables&lt;br /&gt;
 # nft list tables ip6&lt;br /&gt;
&lt;br /&gt;
テーブルの名前を指定することで完全なテーブルの定義を一覧できます:&lt;br /&gt;
 # nft list table &#039;&#039;foo&#039;&#039;&lt;br /&gt;
 # nft list table &#039;&#039;ip6 foo&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===作成===&lt;br /&gt;
テーブルは2つのコマンド (片方はもう片方のショートカットです) で追加することができます。以下は foo という名前の ip テーブルと foo という名前の ip6 テーブルを追加する例です:&lt;br /&gt;
 # nft add table &#039;&#039;foo&#039;&#039;&lt;br /&gt;
 # nft table &#039;&#039;ip6 foo&#039;&#039;&lt;br /&gt;
ファミリーが異なっていれば同じ名前のテーブルを作ることが可能です。&lt;br /&gt;
&lt;br /&gt;
===削除===&lt;br /&gt;
テーブルを削除することができるのはチェインが存在しない場合だけです。&lt;br /&gt;
 # nft delete table &#039;&#039;foo&#039;&#039;&lt;br /&gt;
 # nft delete table &#039;&#039;ip6 foo&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==チェイン==&lt;br /&gt;
チェインの用途はルールを保持することです。iptables のチェインと違って、nftables には初めから組み込まれているチェインはありません。そのためチェインが netfilter フレームワークにあるタイプやフックをどれも使わない場合、iptables とは異なりチェインを通り抜けるパケットは nftables の影響を受けません。&lt;br /&gt;
&lt;br /&gt;
===表示===&lt;br /&gt;
{{ic|nft list table foo}} コマンドは foo テーブルの全てのチェインを表示します。個々のチェインからルールを一覧することもできます。&lt;br /&gt;
 # nft list chain &#039;&#039;foo&#039;&#039; &#039;&#039;bar&#039;&#039;&lt;br /&gt;
 # nft list chain &#039;&#039;ip6 foo bar&#039;&#039;&lt;br /&gt;
上記コマンドは ip と ip6 の {{ic|foo}} テーブルの {{ic|bar}} チェインを表示します。&lt;br /&gt;
&lt;br /&gt;
===作成===&lt;br /&gt;
テーブルがファイル定義や {{ic|nft add chain}} コマンドによって作成されたら、チェインを追加することができます。&lt;br /&gt;
 # nft add chain &#039;&#039;foo&#039;&#039; &#039;&#039;bar&#039;&#039;&lt;br /&gt;
 # nft add chain &#039;&#039;ip6 foo bar&#039;&#039;&lt;br /&gt;
上記コマンドは {{ic|bar}} という名前のチェインを ip と ip6 の {{ic|foo}} テーブルに追加します。&lt;br /&gt;
&lt;br /&gt;
====プロパティ====&lt;br /&gt;
nftables には組み込みチェインが存在しないため、チェインは netfilter フレームワークの特定の機能にアクセスすることができます。&lt;br /&gt;
 # nft add chain filter input \{ type filter hook input priority 0\; \}&lt;br /&gt;
上記コマンドは nftables に {{ic|input}} という名前のチェインを {{ic|filter}} テーブルに追加させ、そのタイプ・フック・プライオリティを定義します。これらのプロパティは基本的に iptables で組み込まれているテーブルやチェインを置き換えるものです。&lt;br /&gt;
&lt;br /&gt;
=====タイプ=====&lt;br /&gt;
チェインには3つのタイプがあり、iptables で使われているテーブルと対応しています:&lt;br /&gt;
*filter&lt;br /&gt;
*nat&lt;br /&gt;
*route  (mangle)&lt;br /&gt;
&lt;br /&gt;
=====フック=====&lt;br /&gt;
チェインは6つのフックを使うことができ、ingress 以外は iptables で使われているチェインと対応しています:&lt;br /&gt;
*ingress&lt;br /&gt;
*input&lt;br /&gt;
*output&lt;br /&gt;
*forward&lt;br /&gt;
*prerouting&lt;br /&gt;
*postrouting&lt;br /&gt;
&lt;br /&gt;
ingress フックは既存の {{ic|tc}} ユーティリティを置き換えます。&lt;br /&gt;
&lt;br /&gt;
=====プライオリティ=====&lt;br /&gt;
{{Note|&lt;br /&gt;
* パケットが先に来るチェインにはプライオリティの効果はありません。&lt;br /&gt;
* プライオリティは符号なしの整数として設定するようになっているため、負のプライオリティを設定した場合、優先度は逆に高くなります。}}&lt;br /&gt;
プライオリティは nftables がどのパケットを初めに通過させるかを示します。整数で指定し、高い値を与えるほど優先されます。&lt;br /&gt;
&lt;br /&gt;
=== 編集 ===&lt;br /&gt;
&lt;br /&gt;
チェインを編集するには、以下のようにコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # &amp;lt;nowiki&amp;gt;nft chain &amp;lt;table&amp;gt; &amp;lt;family&amp;gt; &amp;lt;chain&amp;gt; { [ type &amp;lt;type&amp;gt; hook &amp;lt;hook&amp;gt; device &amp;lt;device&amp;gt; priority &amp;lt;priority&amp;gt; \; policy &amp;lt;policy&amp;gt; \; ] }&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
例えば、デフォルトテーブルの input チェインのポリシーを &amp;quot;accept&amp;quot; から &amp;quot;drop&amp;quot; に変更するには:&lt;br /&gt;
&lt;br /&gt;
 # nft chain inet filter input { policy drop \; }&lt;br /&gt;
&lt;br /&gt;
===削除===&lt;br /&gt;
チェインはルールが存在しない場合にのみ削除することができます。&lt;br /&gt;
 # nft delete chain &#039;&#039;foo bar&#039;&#039;&lt;br /&gt;
 # nft delete chain &#039;&#039;ip6 foo bar&#039;&#039;&lt;br /&gt;
以上のコマンドは ip と ip6 の {{ic|foo}} テーブルから {{ic|bar}} チェインを削除します。&lt;br /&gt;
&lt;br /&gt;
==ルール==&lt;br /&gt;
ルールの用途はパケットを識別（マッチ）して処理を実行（ジャンプ）することです。iptables と同じように、様々なマッチやジャンプが利用できますが、nftables には欠けている機能も存在します。&lt;br /&gt;
&lt;br /&gt;
===表示===&lt;br /&gt;
テーブルを表示するのと同じ方法を使って、{{ic|nft list}} コマンドでテーブルの中の現在のルールを表示することができます。個別のチェインからルールを表示することも可能です。&lt;br /&gt;
 # nft list chain &#039;&#039;foo bar&#039;&#039;&lt;br /&gt;
 # nft list chain &#039;&#039;ip6 foo bar&#039;&#039;&lt;br /&gt;
上記のコマンドで、ip と ip6 の {{ic|foo}} テーブルの {{ic|bar}} チェインのルールが表示されます。&lt;br /&gt;
&lt;br /&gt;
===作成===&lt;br /&gt;
テーブルがファイル定義や {{ic|nft add rule}} コマンドによって作成されたら、ルールを追加することができます。&lt;br /&gt;
 # nft add rule foo bar ip saddr 127.0.0.1 accept&lt;br /&gt;
 # nft add rule ip6 foo bar ip saddr ::1 accept&lt;br /&gt;
上記のコマンドで、ip と ip6 の {{ic|foo}} テーブルの {{ic|bar}} チェインにルールが追加され、{{ic|saddr}} (ソースアドレス) が 127.0.0.1 (IPv4) や ::1 (IPv6) の場合に {{ic|ip}} パケットにマッチして、パケットを許可します。&lt;br /&gt;
&lt;br /&gt;
====マッチ====&lt;br /&gt;
nftables では様々なマッチを使うことができ、ほとんどは、iptables と対応するようになっています。一番大きな違いは汎用的なマッチと暗黙的なマッチが存在しないことです。汎用的なマッチとは、{{ic|--protocol}} や {{ic|--source}} のように、いつでも使うことができるマッチで、暗黙的なマッチとは、{{ic|--sport}} のように、特定のプロトコルでしか使えないマッチのことです。&lt;br /&gt;
&lt;br /&gt;
以下は利用できるマッチの一部です:&lt;br /&gt;
&lt;br /&gt;
* meta    (メタプロパティ。例: インターフェイス)&lt;br /&gt;
* icmp    (ICMP プロトコル)&lt;br /&gt;
* icmpv6  (ICMPv6 プロトコル)&lt;br /&gt;
* ip      (IP プロトコル)&lt;br /&gt;
* ip6     (IPv6 プロトコル)&lt;br /&gt;
* tcp     (TCP プロトコル)&lt;br /&gt;
* udp     (UDP プロトコル)&lt;br /&gt;
* sctp    (SCTP プロトコル)&lt;br /&gt;
* ct      (接続のトラッキング)&lt;br /&gt;
&lt;br /&gt;
以下はマッチ引数の一部です (完全なリストは {{man|8|nft|url=http://www.netfilter.org/projects/nftables/manpage.html}} を見て下さい):&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
meta:&lt;br /&gt;
  oif &amp;lt;output interface INDEX&amp;gt;&lt;br /&gt;
  iif &amp;lt;input interface INDEX&amp;gt;&lt;br /&gt;
  oifname &amp;lt;output interface NAME&amp;gt;&lt;br /&gt;
  iifname &amp;lt;input interface NAME&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  (oif and iif accept string arguments and are converted to interface indexes)&lt;br /&gt;
  (oifname and iifname are more dynamic, but slower because of string matching)&lt;br /&gt;
&lt;br /&gt;
icmp:&lt;br /&gt;
  type &amp;lt;icmp type&amp;gt;&lt;br /&gt;
&lt;br /&gt;
icmpv6:&lt;br /&gt;
  type &amp;lt;icmpv6 type&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ip:&lt;br /&gt;
  protocol &amp;lt;protocol&amp;gt;&lt;br /&gt;
  daddr &amp;lt;destination address&amp;gt;&lt;br /&gt;
  saddr &amp;lt;source address&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ip6:&lt;br /&gt;
  daddr &amp;lt;destination address&amp;gt;&lt;br /&gt;
  saddr &amp;lt;source address&amp;gt;&lt;br /&gt;
&lt;br /&gt;
tcp:&lt;br /&gt;
  dport &amp;lt;destination port&amp;gt;&lt;br /&gt;
  sport &amp;lt;source port&amp;gt;&lt;br /&gt;
&lt;br /&gt;
udp:&lt;br /&gt;
  dport &amp;lt;destination port&amp;gt;&lt;br /&gt;
  sport &amp;lt;source port&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sctp:&lt;br /&gt;
  dport &amp;lt;destination port&amp;gt;&lt;br /&gt;
  sport &amp;lt;source port&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ct:&lt;br /&gt;
  state &amp;lt;new | established | related | invalid&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====ジャンプ====&lt;br /&gt;
ジャンプは iptables と同じように使うことができますが、ひとつのルールで複数のジャンプを使用できるようになっています。&lt;br /&gt;
 # nft add rule filter input tcp dport 22 log accept&lt;br /&gt;
&lt;br /&gt;
以下はジャンプの未完成なリストです:&lt;br /&gt;
*accept  (パケットを許可)&lt;br /&gt;
*reject  (パケットを拒否)&lt;br /&gt;
*drop    (パケットを破棄)&lt;br /&gt;
*snat    (送信元 NAT を実行)&lt;br /&gt;
*dnat    (宛先 NAT を実行)&lt;br /&gt;
*log     (パケットを記録)&lt;br /&gt;
*counter (パケットカウンタを保持、nftables ではカウンタはオプションです)&lt;br /&gt;
*return  (チェインの横断を停止)&lt;br /&gt;
*jump &amp;lt;chain&amp;gt; (他のチェインにジャンプ)&lt;br /&gt;
*goto &amp;lt;chain&amp;gt; (他のチェインにジャンプ、元のチェインに戻らない)&lt;br /&gt;
&lt;br /&gt;
===挿入===&lt;br /&gt;
&lt;br /&gt;
====先頭に追加====&lt;br /&gt;
{{ic|nft insert rule}} コマンドでチェインにルールを挿入することができます。&lt;br /&gt;
 # nft insert rule filter input ct state established,related accept&lt;br /&gt;
&lt;br /&gt;
==== 特定の場所に追加 ====&lt;br /&gt;
&lt;br /&gt;
Nftables はハンドルを使用してルールの位置を定義します。情報を取得するには、-a フラグを付けてルールセットを確認してください:&lt;br /&gt;
&lt;br /&gt;
 # nft list ruleset -a&lt;br /&gt;
&lt;br /&gt;
特定のハンドラが付いているルールの後にルールを追加するには:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule &#039;&#039;table_name&#039;&#039; &#039;&#039;chain_name&#039;&#039; position &#039;&#039;handler_number&#039;&#039; &#039;&#039;[rule-definition]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===削除===&lt;br /&gt;
個々のルールはハンドルを使わないと削除することができません。{{ic|nft --handle list}} コマンドを使うことでルールのハンドルを確認できます。{{ic|--handle}} スイッチを付けると、{{ic|nft}} はハンドルを出力するようになります。&lt;br /&gt;
&lt;br /&gt;
以下ではルールのハンドルを確認してルールを削除しています。未解決の IP アドレスのような、数字の出力を表示するときは {{ic|--number}} 引数を使うと良いでしょう。&lt;br /&gt;
{{hc|# nft --handle --numeric list chain filter input|2=&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
table ip fltrTable {&lt;br /&gt;
     chain input {&lt;br /&gt;
          type filter hook input priority 0;&lt;br /&gt;
          ip saddr 127.0.0.1 accept # handle 10&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
 # nft delete rule fltrTable input handle 10&lt;br /&gt;
&lt;br /&gt;
{{ic|nft flush table}} コマンドを使うことでテーブルの全てのチェインをフラッシュできます。個別のチェインをフラッシュするときは {{ic|nft flush chain}} または {{ic|nft delete rule}} コマンドを使います。&lt;br /&gt;
 # nft flush table foo&lt;br /&gt;
 # nft flush chain foo bar&lt;br /&gt;
 # nft delete rule ip6 foo bar&lt;br /&gt;
最初のコマンドでは ip {{ic|foo}} テーブルのチェイン全てをフラッシュします。2番目のコマンドは ip {{ic|foo}} テーブルの {{ic|bar}} チェインをフラッシュします。3番目のコマンドは ip6 {{ic|foo}} テーブルの {{ic|bar}} チェインの全てのルールを削除します。&lt;br /&gt;
&lt;br /&gt;
===アトミックリロード===&lt;br /&gt;
現在のルールセットをフラッシュする:&lt;br /&gt;
 # echo &amp;quot;flush ruleset&amp;quot; &amp;gt; /tmp/nftables&lt;br /&gt;
現在のルールセットをダンプする:&lt;br /&gt;
 # nft list ruleset &amp;gt;&amp;gt; /tmp/nftables&lt;br /&gt;
{{ic|/tmp/nftables}} を編集して次のコマンドで変更を適用:&lt;br /&gt;
 # nft -f /tmp/nftables&lt;br /&gt;
&lt;br /&gt;
==ファイル定義==&lt;br /&gt;
{{ic|nft -f}} コマンドでファイル定義を利用することができます。このコマンドは {{ic|iptables-restore}} コマンドと同じように動作します。ただし、{{ic|iptables-restore}} と違って、既存のルールセットをフラッシュしないので、前もって flush コマンドを実行する必要があります。&lt;br /&gt;
{{hc|/etc/nftables/filter.rules|2=&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
flush table ip filter&lt;br /&gt;
table ip filter {&lt;br /&gt;
     chain input {&lt;br /&gt;
          type filter hook input priority 0;&lt;br /&gt;
          ct state established,related accept&lt;br /&gt;
          ip saddr 127.0.0.1 accept&lt;br /&gt;
          tcp dport 22 log accept&lt;br /&gt;
          reject&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ルールを ({{ic|iptables-save}} のように) エクスポートするには:&lt;br /&gt;
 # nft list ruleset&lt;br /&gt;
&lt;br /&gt;
==基本的なファイアウォール==&lt;br /&gt;
以下の例は &#039;&#039;nft&#039;&#039; コマンドを使ってベーシックな &#039;&#039;IPv4&#039;&#039; ファイアウォールを設定する方法を示しています。IPv4 と IPv6 の両方をフィルタリングしたい場合、{{ic|/usr/share/nftables}} にある他のサンプルを見たり、{{ic|/etc/nftables.conf}} のデフォルト (IPv4/IPv6 で動作するように設定済みです) を使うようにしてください。&lt;br /&gt;
&lt;br /&gt;
[[iptables]] のようなチェインを設定するには、まず備え付けの IPv4 フィルターファイルを使う必要があります:&lt;br /&gt;
&lt;br /&gt;
 # nft -f /usr/share/nftables/ipv4-filter&lt;br /&gt;
&lt;br /&gt;
作成されたチェインを表示するには:&lt;br /&gt;
&lt;br /&gt;
 # nft list table filter&lt;br /&gt;
&lt;br /&gt;
特定の宛先への出力を破棄:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule ip filter output ip daddr 1.2.3.4 drop&lt;br /&gt;
&lt;br /&gt;
宛先がローカルのポート 80 のパケットを破棄:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule ip filter input tcp dport 80 drop&lt;br /&gt;
&lt;br /&gt;
チェインの全てのルールを削除:&lt;br /&gt;
&lt;br /&gt;
 # nft delete rule filter output&lt;br /&gt;
&lt;br /&gt;
==サンプル==&lt;br /&gt;
===シンプルな IP/IPv6 ファイアウォール===&lt;br /&gt;
&lt;br /&gt;
{{hc|firewall.rules|2=&amp;lt;nowiki&amp;gt;&lt;br /&gt;
# A simple firewall&lt;br /&gt;
&lt;br /&gt;
flush ruleset&lt;br /&gt;
&lt;br /&gt;
table inet filter {&lt;br /&gt;
	chain input {&lt;br /&gt;
		type filter hook input priority 0; policy drop;&lt;br /&gt;
&lt;br /&gt;
		# established/related connections&lt;br /&gt;
		ct state established,related accept&lt;br /&gt;
&lt;br /&gt;
		# invalid connections&lt;br /&gt;
		ct state invalid drop&lt;br /&gt;
		&lt;br /&gt;
		# loopback interface&lt;br /&gt;
		iif lo accept&lt;br /&gt;
&lt;br /&gt;
		# ICMP&lt;br /&gt;
		# routers may also want: mld-listener-query, nd-router-solicit&lt;br /&gt;
		ip6 nexthdr icmpv6 icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert } accept&lt;br /&gt;
		ip protocol icmp icmp type { destination-unreachable, router-advertisement, time-exceeded, parameter-problem } accept&lt;br /&gt;
&lt;br /&gt;
		# SSH (port 22)&lt;br /&gt;
		tcp dport ssh accept&lt;br /&gt;
&lt;br /&gt;
		# HTTP (ports 80 &amp;amp; 443)&lt;br /&gt;
		tcp dport { http, https } accept&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===Limit rate IP/IPv6 ファイアウォール===&lt;br /&gt;
&lt;br /&gt;
{{hc|firewall.2.rules|2=&amp;lt;nowiki&amp;gt;&lt;br /&gt;
table inet filter {&lt;br /&gt;
	chain input {&lt;br /&gt;
		type filter hook input priority 0; policy drop;&lt;br /&gt;
&lt;br /&gt;
		# no ping floods:&lt;br /&gt;
		ip6 nexthdr icmpv6 icmpv6 type echo-request limit rate 10/second accept&lt;br /&gt;
		ip protocol icmp icmp type echo-request limit rate 10/second accept&lt;br /&gt;
&lt;br /&gt;
		ct state established,related accept&lt;br /&gt;
		ct state invalid drop&lt;br /&gt;
&lt;br /&gt;
		iifname lo accept&lt;br /&gt;
&lt;br /&gt;
		# avoid brute force on ssh:&lt;br /&gt;
		tcp dport ssh limit rate 15/minute accept&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===ジャンプ===&lt;br /&gt;
設定ファイルでジャンプを使うときは、先にターゲットチェインを定義する必要があります。そうしないと {{ic|Error: Could not process rule: No such file or directory}} というエラーが発生します。&lt;br /&gt;
{{hc|jump.rules|2=&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
table inet filter {&lt;br /&gt;
    chain web {&lt;br /&gt;
        tcp dport http accept&lt;br /&gt;
        tcp dport 8080 accept&lt;br /&gt;
    }&lt;br /&gt;
    chain input {&lt;br /&gt;
        type filter hook input priority 0;&lt;br /&gt;
        ip saddr 10.0.2.0/24 jump web&lt;br /&gt;
        drop&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 実践的なサンプル ==&lt;br /&gt;
&lt;br /&gt;
=== インターフェイスによってルールを変える ===&lt;br /&gt;
&lt;br /&gt;
複数のネットワークインターフェイスが存在する場合、それぞれのインターフェイスごとに別々のフィルターチェインを設定したい場合があるかもしれません。例えば、ホームルーターを構築するとき、LAN 上でアクセスできるウェブサーバーを実行しつつ ({{ic|nsp3s0}} インターフェイス)、インターネットからはアクセスできないようにしたい場合 ({{ic|enp2s0}} インターフェイス) などは以下のように設定します:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;table inet filter {&lt;br /&gt;
  chain input { # this chain serves as a dispatcher&lt;br /&gt;
    type filter hook input priority 0;&lt;br /&gt;
&lt;br /&gt;
    iifname lo accept # always accept loopback&lt;br /&gt;
    iifname enp2s0 jump input_enp2s0&lt;br /&gt;
    iifname enp3s0 jump input_enp3s0&lt;br /&gt;
&lt;br /&gt;
    reject with icmp type port-unreachable # refuse traffic from all other interfaces&lt;br /&gt;
  }&lt;br /&gt;
  chain input_enp2s0 { # rules applicable to public interface interface&lt;br /&gt;
    ct state {established,related} accept&lt;br /&gt;
    ct state invalid drop&lt;br /&gt;
    udp dport bootpc accept&lt;br /&gt;
    tcp dport bootpc accept&lt;br /&gt;
    reject with icmp type port-unreachable # all other traffic&lt;br /&gt;
  }&lt;br /&gt;
  chain input_enp3s0 {&lt;br /&gt;
    ct state {established,related} accept&lt;br /&gt;
    ct state invalid drop&lt;br /&gt;
    udp dport bootpc accept&lt;br /&gt;
    tcp dport bootpc accept&lt;br /&gt;
    tcp port http accept&lt;br /&gt;
    tcp port https accept&lt;br /&gt;
    reject with icmp type port-unreachable # all other traffic&lt;br /&gt;
  }&lt;br /&gt;
  chain ouput { # we let everything out&lt;br /&gt;
    type filter hook output priority 0;&lt;br /&gt;
    accept&lt;br /&gt;
  }&lt;br /&gt;
 }&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
もしくは {{ic|iifname}} ステートメントを特定のインターフェイスで使用して、他のインターフェイスについてはデフォルトルールを設定するという方法もあります。&lt;br /&gt;
&lt;br /&gt;
=== マスカレード ===&lt;br /&gt;
&lt;br /&gt;
nftables には特殊なキーワード {{ic|masquerade}} が存在し、送信元アドレスが自動的に出力インターフェイスのアドレスに設定されます ([http://wiki.nftables.org/wiki-nftables/index.php/Performing_Network_Address_Translation_%28NAT%29#Masquerading ソース])。ルーターのインターフェイスが多数の ISP に接続されているときなど、インターフェイスの IP アドレスが一定でない場合に有用です。通常は、インターフェイスの IP アドレスが変わるたびにネットワークアドレス変換 (NAT) のルールを更新する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{ic|masquerade}} を使用するには:&lt;br /&gt;
&lt;br /&gt;
* カーネルのバージョンが 3.18 以上である必要があります。&lt;br /&gt;
* カーネルコンフィグで以下のマスカレード設定が有効になっている必要があります。&lt;br /&gt;
&lt;br /&gt;
 CONFIG_NFT_MASQ=m&lt;br /&gt;
&lt;br /&gt;
* {{ic|masquerade}} キーワードは {{ic|nat}} タイプのチェインでのみ使うことができ、{{ic|inet}} ファミリーのテーブルでは利用できません。{{ic|ip}} ファミリーや {{ic|ip6}} ファミリーのテーブルを使ってください。&lt;br /&gt;
* マスカレードは一種のソース NAT であり、出力パスでのみ機能します。&lt;br /&gt;
&lt;br /&gt;
2つのインターフェイスが存在し {{ic|nsp3s0}} が LAN に接続され、{{ic|enp2s0}} がインターネットに接続されているマシンでの設定例:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;table ip nat {&lt;br /&gt;
  chain prerouting {&lt;br /&gt;
    type nat hook prerouting priority 0;&lt;br /&gt;
  }&lt;br /&gt;
  chain postrouting {&lt;br /&gt;
    type nat hook postrouting priority 0;&lt;br /&gt;
    oifname &amp;quot;enp0s2&amp;quot; masquerade&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Syslog にログを出力する==&lt;br /&gt;
&lt;br /&gt;
Linux カーネル 3.17 未満を使っている場合、ログ出力を有効にするには {{ic|xt_LOG}} を modprobe する必要があります。&lt;br /&gt;
&lt;br /&gt;
==参照==&lt;br /&gt;
* [https://wiki.nftables.org/ netfilter nftables wiki]&lt;br /&gt;
* [https://lwn.net/Articles/324251/ nftables の最初のリリース]&lt;br /&gt;
* [https://home.regit.org/netfilter-en/nftables-quick-howto/ nftables クイックハウツー]&lt;br /&gt;
* [https://lwn.net/Articles/564095/ nftables の帰還]&lt;br /&gt;
* [http://developers.redhat.com/blog/2016/10/28/what-comes-after-iptables-its-successor-of-course-nftables/ What comes after ‘iptables’? It’s successor, of course: `nftables`]&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Certbot&amp;diff=6799</id>
		<title>Certbot</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Certbot&amp;diff=6799"/>
		<updated>2016-12-23T13:35:14Z</updated>

		<summary type="html">&lt;p&gt;Fragment: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ネットワーク]]&lt;br /&gt;
[[Category:セキュリティ]]&lt;br /&gt;
[[en:Let’s Encrypt]]&lt;br /&gt;
[https://letsencrypt.org/ Let’s Encrypt] はフリーかつ自動化されたオープンな認証局です。[[Wikipedia:ja:Automated Certificate Management Environment|ACME]] プロトコルを利用しています。&lt;br /&gt;
&lt;br /&gt;
公式クライアントは &#039;&#039;&#039;Certbot&#039;&#039;&#039; という名前で、コマンドラインから有効な X.509 証明書を取得できます。また、手動で CSR 作成を行うミニマルなクライアントを {{AUR|acme-tiny}} でインストールすることができます。スクリプトで使用するのに適したクライアントとして {{AUR|simp_le-git}} や {{AUR|letsencrypt-cli}} も存在します。&lt;br /&gt;
&lt;br /&gt;
{{Note|以前 &#039;&#039;Let’s Encrypt クライアント&#039;&#039;と呼ばれていた公式クライアントは、現在 &#039;&#039;Certbot&#039;&#039; と呼ばれています。}}&lt;br /&gt;
&lt;br /&gt;
== Certbot ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Certbot&#039;&#039; は公式のリファレンスクライアントです。Python で書かれており、証明書を取得するためのコマンドラインツールを提供します。&lt;br /&gt;
&lt;br /&gt;
=== インストール ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|certbot}} パッケージを[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
公式クライアントを用いて発行された証明書はプラグインを使ってウェブサーバーに自動的に設定・インストールできます:&lt;br /&gt;
* [[Nginx]] 用の実験的なプラグインは {{Pkg|certbot-nginx}} パッケージに入っています。&lt;br /&gt;
* {{Pkg|certbot-apache}} パッケージも存在していますが、[[Apache HTTP Server]] を使っている場合の自動インストールは現在 Debian の派生ディストリビューションでしかサポートされていません。&lt;br /&gt;
&lt;br /&gt;
=== 設定 ===&lt;br /&gt;
&lt;br /&gt;
証明を作成・インストールする方法は [https://certbot.eff.org/docs/ Certbot のドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== 手動 ====&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法では、一時的にウェブサーバーを停止する必要があります。[[#Webroot]] の方法ではウェブサーバーを実行しながらでも認証が行えます。}}&lt;br /&gt;
{{Note|この方法では、自動的に証明書を更新することはできません。自動更新を行いたい場合には、[[#Webroot]]メソッドを使用してください。}}&lt;br /&gt;
&lt;br /&gt;
ウェブサーバーのプラグインが存在しない場合、次のコマンドを使って下さい:&lt;br /&gt;
 # certbot certonly --manual&lt;br /&gt;
	&lt;br /&gt;
DNSのTXTレコードを利用した認証を行う場合、次のコマンドを使って下さい:&lt;br /&gt;
 # certbot certonly --manual --preferred-challenges dns&lt;br /&gt;
&lt;br /&gt;
上記のコマンドで自動的にドメインが認証されて秘密鍵と証明書のペアが作成されます。秘密鍵と証明書は {{ic|/etc/letsencrypt/live/&#039;&#039;your.domain&#039;&#039;/}} に保存されます。&lt;br /&gt;
&lt;br /&gt;
上記のディレクトリに入っている秘密鍵と証明書を使用するように手動でウェブサーバーを設定します。&lt;br /&gt;
&lt;br /&gt;
{{Note|このコマンドを複数回実行すると、{{ic|/etc/letsencrypt/live/&#039;&#039;your.domain&#039;&#039;/}}に複数のファイルが作成されます。そのディレクトリにあるファイル名かウェブサーバーの設定を書き換える必要があることに注意してください。}}&lt;br /&gt;
&lt;br /&gt;
==== Webroot ====&lt;br /&gt;
 &lt;br /&gt;
webroot の方法では、{{ic|yourdomain.tld/.well-known/acme-challenge/}} でチャレンジ/レスポンス認証が行われます。ウェブサーバーを止めることなく証明書を取得・更新できます:&lt;br /&gt;
&lt;br /&gt;
 # certbot certonly --email &#039;&#039;email@example.com&#039;&#039; --webroot -w &#039;&#039;/path/to/html/&#039;&#039; -d &#039;&#039;your.domain&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
サーバーの設定で {{ic|/etc/letsencrypt/live/&#039;&#039;your.domain&#039;&#039;/}} の証明書を使うようにしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|Apacheまたはnginxの場合、{{ic|--webbroot}}ではなく{{ic|--apache}}または{{ic|--nginx}}をそれぞれ使用します。 ポート443の代わりにポート80を使用して検証する必要がある場合は、{{ic|--webroot}}を使用します。}} &lt;br /&gt;
&lt;br /&gt;
===== マルチドメイン =====&lt;br /&gt;
&lt;br /&gt;
複数のドメインあるいはサブドメインを使用する場合、全てのドメインに対して webroot を指定する必要があります。別の webroot を指定しないと、既存の webroot が使われます。&lt;br /&gt;
&lt;br /&gt;
{{ic|/.well-known/acme-challenge/}} への http リクエストを全て一つのフォルダ (例: {{ic|/var/lib/letsencrypt}}) にまとめることで、マルチドメインの管理がとても楽になります。nginx ならば、以下のようなファイルを作成:&lt;br /&gt;
{{hc|/etc/nginx/letsencrypt.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
location ^~ /.well-known/acme-challenge {&lt;br /&gt;
    alias /var/lib/letsencrypt/.well-known/acme-challenge;&lt;br /&gt;
    default_type &amp;quot;text/plain&amp;quot;;&lt;br /&gt;
    try_files $uri =404;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
そして証明書を作成したいサイトの server ブロックの中に以下のように記述します:&lt;br /&gt;
{{hc|/etc/nginx/servers/example.com.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    include letsencrypt.conf;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Apache の場合、{{ic|httpd-acme.conf}} ファイルを作成してください:&lt;br /&gt;
{{hc|/etc/httpd/conf/extra/httpd-acme.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Alias /.well-known/acme-challenge/ &amp;quot;/var/lib/letsencrypt/.well-known/acme-challenge/&amp;quot;&lt;br /&gt;
&amp;lt;Directory &amp;quot;/var/lib/letsencrypt/&amp;quot;&amp;gt;&lt;br /&gt;
    AllowOverride None&lt;br /&gt;
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec&lt;br /&gt;
    Require method GET POST OPTIONS&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
そして {{ic|httpd.conf}} で上記ファイルをインクルードします:&lt;br /&gt;
{{hc|/etc/httpd/conf/httpd.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Include conf/extra/httpd-acme.conf&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
letsencrypt クライアントのパスから設定したパスに書き込めるように、また、ウェブサーバーから読み込めるようにする必要があります。次のコマンドを実行してください: {{ic|# chgrp http /var/lib/letsencrypt &amp;amp;&amp;amp; chmod g+s /var/lib/letsencrypt}}。&lt;br /&gt;
&lt;br /&gt;
===== 自動更新 =====&lt;br /&gt;
&lt;br /&gt;
{{ic|certbot certonly}} を実行するとき、Certbot はドメインと webroot ディレクトリを {{ic|/etc/letsencrypt/renewal}} に記録します。次回からは {{ic|certbot renew}} を実行することで証明書を自動更新することができます。&lt;br /&gt;
&lt;br /&gt;
====== サービス ======&lt;br /&gt;
以下の {{ic|.service}} ファイルを作成することで完全に自動化することが可能です:&lt;br /&gt;
&lt;br /&gt;
{{hc|1=/etc/systemd/system/certbot.service|&lt;br /&gt;
2=[Unit]&lt;br /&gt;
Description=Let&#039;s Encrypt renewal&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/usr/bin/certbot renew --quiet --agree-tos}}&lt;br /&gt;
&lt;br /&gt;
====== Standalone サービス ======&lt;br /&gt;
Standalone プラグインを使用する場合は更新リクエストを実行する前にウェブサーバーを停止させて、更新が完了してからウェブサーバーを再起動するようにします。Certbot のフックを使ってください。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nginx&#039;&#039;&#039;&lt;br /&gt;
{{hc|1=/etc/systemd/system/certbot.service|&lt;br /&gt;
2=[Unit]&lt;br /&gt;
Description=Let&#039;s Encrypt renewal&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/usr/bin/certbot renew --pre-hook &amp;quot;/usr/bin/systemctl stop nginx.service&amp;quot; --post-hook &amp;quot;/usr/bin/systemctl start nginx.service&amp;quot; --quiet --agree-tos}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Apache&#039;&#039;&#039;&lt;br /&gt;
{{hc|1=/etc/systemd/system/certbot.service|&lt;br /&gt;
2=[Unit]&lt;br /&gt;
Description=Let&#039;s Encrypt renewal&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/usr/bin/certbot renew --pre-hook &amp;quot;/usr/bin/systemctl stop httpd.service&amp;quot; --post-hook &amp;quot;/usr/bin/systemctl start httpd.service&amp;quot; --quiet --agree-tos}}&lt;br /&gt;
&lt;br /&gt;
====== 自動更新タイマー ======&lt;br /&gt;
&lt;br /&gt;
[[systemd/タイマー|タイマー]]を追加する前に、サービスが正しく動作すること、何も入力が要求されないことを確認してください。&lt;br /&gt;
&lt;br /&gt;
それから、タイマーを追加することで証明書を更新できます (更新の必要がない証明書は自動的にスキップされます)。&lt;br /&gt;
&lt;br /&gt;
{{hc|1=/etc/systemd/system/certbot.timer|&lt;br /&gt;
2=[Unit]&lt;br /&gt;
Description=Daily renewal of Let&#039;s Encrypt&#039;s certificates&lt;br /&gt;
&lt;br /&gt;
[Timer]&lt;br /&gt;
OnCalendar=daily&lt;br /&gt;
RandomizedDelaySec=1day&lt;br /&gt;
Persistent=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=timers.target}}&lt;br /&gt;
&lt;br /&gt;
{{ic|certbot.timer}} を[[起動]]・[[有効化]]してください。&lt;br /&gt;
&lt;br /&gt;
証明書を更新するたびにウェブサーバーを再起動させると良いでしょう。{{ic|certbot.service}} ファイルに以下のどちらかの行を追加してください:&lt;br /&gt;
&lt;br /&gt;
* Apache: {{ic|1=ExecStartPost=/bin/systemctl reload httpd.service}}&lt;br /&gt;
* nginx: {{ic|1=ExecStartPost=/bin/systemctl reload nginx.service}}&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://letsencrypt.org/docs/client-options/ ACME クライアントの一覧]&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Certbot&amp;diff=6798</id>
		<title>Certbot</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Certbot&amp;diff=6798"/>
		<updated>2016-12-23T13:21:42Z</updated>

		<summary type="html">&lt;p&gt;Fragment: 修正&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ネットワーク]]&lt;br /&gt;
[[Category:セキュリティ]]&lt;br /&gt;
[[en:Let’s Encrypt]]&lt;br /&gt;
[https://letsencrypt.org/ Let’s Encrypt] はフリーかつ自動化されたオープンな認証局です。[[Wikipedia:ja:Automated Certificate Management Environment|ACME]] プロトコルを利用しています。&lt;br /&gt;
&lt;br /&gt;
公式クライアントは &#039;&#039;&#039;Certbot&#039;&#039;&#039; という名前で、コマンドラインから有効な X.509 証明書を取得できます。また、手動で CSR 作成を行うミニマルなクライアントを {{AUR|acme-tiny}} でインストールすることができます。スクリプトで使用するのに適したクライアントとして {{AUR|simp_le-git}} や {{AUR|letsencrypt-cli}} も存在します。&lt;br /&gt;
&lt;br /&gt;
{{Note|以前 &#039;&#039;Let’s Encrypt クライアント&#039;&#039;と呼ばれていた公式クライアントは、現在 &#039;&#039;Certbot&#039;&#039; と呼ばれています。}}&lt;br /&gt;
&lt;br /&gt;
== Certbot ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Certbot&#039;&#039; は公式のリファレンスクライアントです。Python で書かれており、証明書を取得するためのコマンドラインツールを提供します。&lt;br /&gt;
&lt;br /&gt;
=== インストール ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|certbot}} パッケージを[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
公式クライアントを用いて発行された証明書はプラグインを使ってウェブサーバーに自動的に設定・インストールできます:&lt;br /&gt;
* [[Nginx]] 用の実験的なプラグインは {{Pkg|certbot-nginx}} パッケージに入っています。&lt;br /&gt;
* {{Pkg|certbot-apache}} パッケージも存在していますが、[[Apache HTTP Server]] を使っている場合の自動インストールは現在 Debian の派生ディストリビューションでしかサポートされていません。&lt;br /&gt;
&lt;br /&gt;
=== 設定 ===&lt;br /&gt;
&lt;br /&gt;
証明を作成・インストールする方法は [https://certbot.eff.org/docs/ Certbot のドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== 手動 ====&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法では、一時的にウェブサーバーを停止する必要があります。[[#Webroot]] の方法ではウェブサーバーを実行しながらでも認証が行えます。}}&lt;br /&gt;
{{Note|With this method, you will not be able to automatically renew certificates. If you are interested in auto-renewal you may want to use the [[#Webroot]] method.}}&lt;br /&gt;
&lt;br /&gt;
ウェブサーバーのプラグインが存在しない場合、次のコマンドを使って下さい:&lt;br /&gt;
 # certbot certonly --manual&lt;br /&gt;
	&lt;br /&gt;
When preferring to use DNS challenge (TXT record) use:&lt;br /&gt;
 # certbot certonly --manual --preferred-challenges dns&lt;br /&gt;
&lt;br /&gt;
上記のコマンドで自動的にドメインが認証されて秘密鍵と証明書のペアが作成されます。秘密鍵と証明書は {{ic|/etc/letsencrypt/live/&#039;&#039;your.domain&#039;&#039;/}} に保存されます。&lt;br /&gt;
&lt;br /&gt;
上記のディレクトリに入っている秘密鍵と証明書を使用するように手動でウェブサーバーを設定します。&lt;br /&gt;
&lt;br /&gt;
{{Note|Running this command multiple times will create multiple sets of files with a trailing number in {{ic|/etc/letsencrypt/live/&#039;&#039;your.domain&#039;&#039;/}} so take care to rename them in that directory or in the webserver config file.}}&lt;br /&gt;
&lt;br /&gt;
==== Webroot ====&lt;br /&gt;
 &lt;br /&gt;
webroot の方法では、{{ic|yourdomain.tld/.well-known/acme-challenge/}} でチャレンジ/レスポンス認証が行われます。ウェブサーバーを止めることなく証明書を取得・更新できます:&lt;br /&gt;
&lt;br /&gt;
 # certbot certonly --email &#039;&#039;email@example.com&#039;&#039; --webroot -w &#039;&#039;/path/to/html/&#039;&#039; -d &#039;&#039;your.domain&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
サーバーの設定で {{ic|/etc/letsencrypt/live/&#039;&#039;your.domain&#039;&#039;/}} の証明書を使うようにしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|For apache or nginx, use --apache or --nginx respectively instead of --webroot.  If you require the verification through port 80 instead of port 443, use --webroot.}} &lt;br /&gt;
&lt;br /&gt;
===== マルチドメイン =====&lt;br /&gt;
&lt;br /&gt;
複数のドメインあるいはサブドメインを使用する場合、全てのドメインに対して webroot を指定する必要があります。別の webroot を指定しないと、既存の webroot が使われます。&lt;br /&gt;
&lt;br /&gt;
{{ic|/.well-known/acme-challenge/}} への http リクエストを全て一つのフォルダ (例: {{ic|/var/lib/letsencrypt}}) にまとめることで、マルチドメインの管理がとても楽になります。nginx ならば、以下のようなファイルを作成:&lt;br /&gt;
{{hc|/etc/nginx/letsencrypt.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
location ^~ /.well-known/acme-challenge {&lt;br /&gt;
    alias /var/lib/letsencrypt/.well-known/acme-challenge;&lt;br /&gt;
    default_type &amp;quot;text/plain&amp;quot;;&lt;br /&gt;
    try_files $uri =404;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
そして証明書を作成したいサイトの server ブロックの中に以下のように記述します:&lt;br /&gt;
{{hc|/etc/nginx/servers/example.com.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    include letsencrypt.conf;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Apache の場合、{{ic|httpd-acme.conf}} ファイルを作成してください:&lt;br /&gt;
{{hc|/etc/httpd/conf/extra/httpd-acme.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Alias /.well-known/acme-challenge/ &amp;quot;/var/lib/letsencrypt/.well-known/acme-challenge/&amp;quot;&lt;br /&gt;
&amp;lt;Directory &amp;quot;/var/lib/letsencrypt/&amp;quot;&amp;gt;&lt;br /&gt;
    AllowOverride None&lt;br /&gt;
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec&lt;br /&gt;
    Require method GET POST OPTIONS&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
そして {{ic|httpd.conf}} で上記ファイルをインクルードします:&lt;br /&gt;
{{hc|/etc/httpd/conf/httpd.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Include conf/extra/httpd-acme.conf&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
letsencrypt クライアントのパスから設定したパスに書き込めるように、また、ウェブサーバーから読み込めるようにする必要があります。次のコマンドを実行してください: {{ic|# chgrp http /var/lib/letsencrypt &amp;amp;&amp;amp; chmod g+s /var/lib/letsencrypt}}。&lt;br /&gt;
&lt;br /&gt;
===== 自動更新 =====&lt;br /&gt;
&lt;br /&gt;
{{ic|certbot certonly}} を実行するとき、Certbot はドメインと webroot ディレクトリを {{ic|/etc/letsencrypt/renewal}} に記録します。次回からは {{ic|certbot renew}} を実行することで証明書を自動更新することができます。&lt;br /&gt;
&lt;br /&gt;
====== サービス ======&lt;br /&gt;
以下の {{ic|.service}} ファイルを作成することで完全に自動化することが可能です:&lt;br /&gt;
&lt;br /&gt;
{{hc|1=/etc/systemd/system/certbot.service|&lt;br /&gt;
2=[Unit]&lt;br /&gt;
Description=Let&#039;s Encrypt renewal&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/usr/bin/certbot renew --quiet --agree-tos}}&lt;br /&gt;
&lt;br /&gt;
====== Standalone サービス ======&lt;br /&gt;
Standalone プラグインを使用する場合は更新リクエストを実行する前にウェブサーバーを停止させて、更新が完了してからウェブサーバーを再起動するようにします。Certbot のフックを使ってください。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nginx&#039;&#039;&#039;&lt;br /&gt;
{{hc|1=/etc/systemd/system/certbot.service|&lt;br /&gt;
2=[Unit]&lt;br /&gt;
Description=Let&#039;s Encrypt renewal&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/usr/bin/certbot renew --pre-hook &amp;quot;/usr/bin/systemctl stop nginx.service&amp;quot; --post-hook &amp;quot;/usr/bin/systemctl start nginx.service&amp;quot; --quiet --agree-tos}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Apache&#039;&#039;&#039;&lt;br /&gt;
{{hc|1=/etc/systemd/system/certbot.service|&lt;br /&gt;
2=[Unit]&lt;br /&gt;
Description=Let&#039;s Encrypt renewal&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/usr/bin/certbot renew --pre-hook &amp;quot;/usr/bin/systemctl stop httpd.service&amp;quot; --post-hook &amp;quot;/usr/bin/systemctl start httpd.service&amp;quot; --quiet --agree-tos}}&lt;br /&gt;
&lt;br /&gt;
====== 自動更新タイマー ======&lt;br /&gt;
&lt;br /&gt;
[[systemd/タイマー|タイマー]]を追加する前に、サービスが正しく動作すること、何も入力が要求されないことを確認してください。&lt;br /&gt;
&lt;br /&gt;
それから、タイマーを追加することで証明書を更新できます (更新の必要がない証明書は自動的にスキップされます)。&lt;br /&gt;
&lt;br /&gt;
{{hc|1=/etc/systemd/system/certbot.timer|&lt;br /&gt;
2=[Unit]&lt;br /&gt;
Description=Daily renewal of Let&#039;s Encrypt&#039;s certificates&lt;br /&gt;
&lt;br /&gt;
[Timer]&lt;br /&gt;
OnCalendar=daily&lt;br /&gt;
RandomizedDelaySec=1day&lt;br /&gt;
Persistent=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=timers.target}}&lt;br /&gt;
&lt;br /&gt;
{{ic|certbot.timer}} を[[起動]]・[[有効化]]してください。&lt;br /&gt;
&lt;br /&gt;
証明書を更新するたびにウェブサーバーを再起動させると良いでしょう。{{ic|certbot.service}} ファイルに以下のどちらかの行を追加してください:&lt;br /&gt;
&lt;br /&gt;
* Apache: {{ic|1=ExecStartPost=/bin/systemctl reload httpd.service}}&lt;br /&gt;
* nginx: {{ic|1=ExecStartPost=/bin/systemctl reload nginx.service}}&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://letsencrypt.org/docs/client-options/ ACME クライアントの一覧]&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Certbot&amp;diff=6797</id>
		<title>Certbot</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Certbot&amp;diff=6797"/>
		<updated>2016-12-23T13:20:03Z</updated>

		<summary type="html">&lt;p&gt;Fragment: 同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ネットワーク]]&lt;br /&gt;
[[Category:セキュリティ]]&lt;br /&gt;
[[en:Let’s Encrypt]]&lt;br /&gt;
[https://letsencrypt.org/ Let’s Encrypt] はフリーかつ自動化されたオープンな認証局です。[[Wikipedia:ja:Automated Certificate Management Environment|ACME]] プロトコルを利用しています。&lt;br /&gt;
&lt;br /&gt;
公式クライアントは &#039;&#039;&#039;Certbot&#039;&#039;&#039; という名前で、コマンドラインから有効な X.509 証明書を取得できます。また、手動で CSR 作成を行うミニマルなクライアントを {{AUR|acme-tiny}} でインストールすることができます。スクリプトで使用するのに適したクライアントとして {{AUR|simp_le-git}} や {{AUR|letsencrypt-cli}} も存在します。&lt;br /&gt;
&lt;br /&gt;
{{Note|以前 &#039;&#039;Let’s Encrypt クライアント&#039;&#039;と呼ばれていた公式クライアントは、現在 &#039;&#039;Certbot&#039;&#039; と呼ばれています。}}&lt;br /&gt;
&lt;br /&gt;
== Certbot ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Certbot&#039;&#039; は公式のリファレンスクライアントです。Python で書かれており、証明書を取得するためのコマンドラインツールを提供します。&lt;br /&gt;
&lt;br /&gt;
=== インストール ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|certbot}} パッケージを[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
公式クライアントを用いて発行された証明書はプラグインを使ってウェブサーバーに自動的に設定・インストールできます:&lt;br /&gt;
* [[Nginx]] 用の実験的なプラグインは {{Pkg|certbot-nginx}} パッケージに入っています。&lt;br /&gt;
* {{Pkg|certbot-apache}} パッケージも存在していますが、[[Apache HTTP Server]] を使っている場合の自動インストールは現在 Debian の派生ディストリビューションでしかサポートされていません。&lt;br /&gt;
&lt;br /&gt;
=== 設定 ===&lt;br /&gt;
&lt;br /&gt;
証明を作成・インストールする方法は [https://certbot.eff.org/docs/ Certbot のドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== 手動 ====&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法では、一時的にウェブサーバーを停止する必要があります。[[#Webroot]] の方法ではウェブサーバーを実行しながらでも認証が行えます。}}&lt;br /&gt;
{{Note|With this method, you will not be able to automatically renew certificates. If you are interested in auto-renewal you may want to use the [[#Webroot]] method.}}&lt;br /&gt;
&lt;br /&gt;
ウェブサーバーのプラグインが存在しない場合、次のコマンドを使って下さい:&lt;br /&gt;
 # certbot certonly --manual&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
When preferring to use DNS challenge (TXT record) use:&lt;br /&gt;
# certbot certonly --manual --preferred-challenges dns&lt;br /&gt;
&lt;br /&gt;
上記のコマンドで自動的にドメインが認証されて秘密鍵と証明書のペアが作成されます。秘密鍵と証明書は {{ic|/etc/letsencrypt/live/&#039;&#039;your.domain&#039;&#039;/}} に保存されます。&lt;br /&gt;
&lt;br /&gt;
上記のディレクトリに入っている秘密鍵と証明書を使用するように手動でウェブサーバーを設定します。&lt;br /&gt;
&lt;br /&gt;
{{Note|Running this command multiple times will create multiple sets of files with a trailing number in {{ic|/etc/letsencrypt/live/&#039;&#039;your.domain&#039;&#039;/}} so take care to rename them in that directory or in the webserver config file.}}&lt;br /&gt;
&lt;br /&gt;
==== Webroot ====&lt;br /&gt;
 &lt;br /&gt;
webroot の方法では、{{ic|yourdomain.tld/.well-known/acme-challenge/}} でチャレンジ/レスポンス認証が行われます。ウェブサーバーを止めることなく証明書を取得・更新できます:&lt;br /&gt;
&lt;br /&gt;
 # certbot certonly --email &#039;&#039;email@example.com&#039;&#039; --webroot -w &#039;&#039;/path/to/html/&#039;&#039; -d &#039;&#039;your.domain&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
サーバーの設定で {{ic|/etc/letsencrypt/live/&#039;&#039;your.domain&#039;&#039;/}} の証明書を使うようにしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|For apache or nginx, use --apache or --nginx respectively instead of --webroot.  If you require the verification through port 80 instead of port 443, use --webroot.}} &lt;br /&gt;
&lt;br /&gt;
===== マルチドメイン =====&lt;br /&gt;
&lt;br /&gt;
複数のドメインあるいはサブドメインを使用する場合、全てのドメインに対して webroot を指定する必要があります。別の webroot を指定しないと、既存の webroot が使われます。&lt;br /&gt;
&lt;br /&gt;
{{ic|/.well-known/acme-challenge/}} への http リクエストを全て一つのフォルダ (例: {{ic|/var/lib/letsencrypt}}) にまとめることで、マルチドメインの管理がとても楽になります。nginx ならば、以下のようなファイルを作成:&lt;br /&gt;
{{hc|/etc/nginx/letsencrypt.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
location ^~ /.well-known/acme-challenge {&lt;br /&gt;
    alias /var/lib/letsencrypt/.well-known/acme-challenge;&lt;br /&gt;
    default_type &amp;quot;text/plain&amp;quot;;&lt;br /&gt;
    try_files $uri =404;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
そして証明書を作成したいサイトの server ブロックの中に以下のように記述します:&lt;br /&gt;
{{hc|/etc/nginx/servers/example.com.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    include letsencrypt.conf;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Apache の場合、{{ic|httpd-acme.conf}} ファイルを作成してください:&lt;br /&gt;
{{hc|/etc/httpd/conf/extra/httpd-acme.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Alias /.well-known/acme-challenge/ &amp;quot;/var/lib/letsencrypt/.well-known/acme-challenge/&amp;quot;&lt;br /&gt;
&amp;lt;Directory &amp;quot;/var/lib/letsencrypt/&amp;quot;&amp;gt;&lt;br /&gt;
    AllowOverride None&lt;br /&gt;
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec&lt;br /&gt;
    Require method GET POST OPTIONS&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
そして {{ic|httpd.conf}} で上記ファイルをインクルードします:&lt;br /&gt;
{{hc|/etc/httpd/conf/httpd.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Include conf/extra/httpd-acme.conf&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
letsencrypt クライアントのパスから設定したパスに書き込めるように、また、ウェブサーバーから読み込めるようにする必要があります。次のコマンドを実行してください: {{ic|# chgrp http /var/lib/letsencrypt &amp;amp;&amp;amp; chmod g+s /var/lib/letsencrypt}}。&lt;br /&gt;
&lt;br /&gt;
===== 自動更新 =====&lt;br /&gt;
&lt;br /&gt;
{{ic|certbot certonly}} を実行するとき、Certbot はドメインと webroot ディレクトリを {{ic|/etc/letsencrypt/renewal}} に記録します。次回からは {{ic|certbot renew}} を実行することで証明書を自動更新することができます。&lt;br /&gt;
&lt;br /&gt;
====== サービス ======&lt;br /&gt;
以下の {{ic|.service}} ファイルを作成することで完全に自動化することが可能です:&lt;br /&gt;
&lt;br /&gt;
{{hc|1=/etc/systemd/system/certbot.service|&lt;br /&gt;
2=[Unit]&lt;br /&gt;
Description=Let&#039;s Encrypt renewal&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/usr/bin/certbot renew --quiet --agree-tos}}&lt;br /&gt;
&lt;br /&gt;
====== Standalone サービス ======&lt;br /&gt;
Standalone プラグインを使用する場合は更新リクエストを実行する前にウェブサーバーを停止させて、更新が完了してからウェブサーバーを再起動するようにします。Certbot のフックを使ってください。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nginx&#039;&#039;&#039;&lt;br /&gt;
{{hc|1=/etc/systemd/system/certbot.service|&lt;br /&gt;
2=[Unit]&lt;br /&gt;
Description=Let&#039;s Encrypt renewal&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/usr/bin/certbot renew --pre-hook &amp;quot;/usr/bin/systemctl stop nginx.service&amp;quot; --post-hook &amp;quot;/usr/bin/systemctl start nginx.service&amp;quot; --quiet --agree-tos}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Apache&#039;&#039;&#039;&lt;br /&gt;
{{hc|1=/etc/systemd/system/certbot.service|&lt;br /&gt;
2=[Unit]&lt;br /&gt;
Description=Let&#039;s Encrypt renewal&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/usr/bin/certbot renew --pre-hook &amp;quot;/usr/bin/systemctl stop httpd.service&amp;quot; --post-hook &amp;quot;/usr/bin/systemctl start httpd.service&amp;quot; --quiet --agree-tos}}&lt;br /&gt;
&lt;br /&gt;
====== 自動更新タイマー ======&lt;br /&gt;
&lt;br /&gt;
[[systemd/タイマー|タイマー]]を追加する前に、サービスが正しく動作すること、何も入力が要求されないことを確認してください。&lt;br /&gt;
&lt;br /&gt;
それから、タイマーを追加することで証明書を更新できます (更新の必要がない証明書は自動的にスキップされます)。&lt;br /&gt;
&lt;br /&gt;
{{hc|1=/etc/systemd/system/certbot.timer|&lt;br /&gt;
2=[Unit]&lt;br /&gt;
Description=Daily renewal of Let&#039;s Encrypt&#039;s certificates&lt;br /&gt;
&lt;br /&gt;
[Timer]&lt;br /&gt;
OnCalendar=daily&lt;br /&gt;
RandomizedDelaySec=1day&lt;br /&gt;
Persistent=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=timers.target}}&lt;br /&gt;
&lt;br /&gt;
{{ic|certbot.timer}} を[[起動]]・[[有効化]]してください。&lt;br /&gt;
&lt;br /&gt;
証明書を更新するたびにウェブサーバーを再起動させると良いでしょう。{{ic|certbot.service}} ファイルに以下のどちらかの行を追加してください:&lt;br /&gt;
&lt;br /&gt;
* Apache: {{ic|1=ExecStartPost=/bin/systemctl reload httpd.service}}&lt;br /&gt;
* nginx: {{ic|1=ExecStartPost=/bin/systemctl reload nginx.service}}&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://letsencrypt.org/docs/client-options/ ACME クライアントの一覧]&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Arduino&amp;diff=6747</id>
		<title>Arduino</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Arduino&amp;diff=6747"/>
		<updated>2016-12-16T02:48:38Z</updated>

		<summary type="html">&lt;p&gt;Fragment: arduinoパッケージがAURからPkgへ&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:開発]]&lt;br /&gt;
[[Category:計算と科学]]&lt;br /&gt;
[[en:Arduino]]&lt;br /&gt;
Arduino は柔軟で手軽なハードウェアとソフトウェアによる、オープンソースの電子工作プロトタイププラットフォームです。芸術家やデザイナー、ホビイスト、その他インタラクティブな機器や環境を作成したい全ての人を対象としています。詳細は [http://www.arduino.cc/ Arduino HomePage] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|arduino}} パッケージをインストールしてください。オフラインドキュメントは {{Pkg|arduino-docs}} パッケージでインストールできます。&lt;br /&gt;
* ユーザーを {{ic|uucp}} と {{ic|lock}} [[ユーザーとグループ|グループ]]に追加してください (詳しくは次のセクションを参照: [[#シリアル通信]])。&lt;br /&gt;
* cdc_acm モジュールをロードする必要があります。&lt;br /&gt;
 # modprobe cdc_acm&lt;br /&gt;
&lt;br /&gt;
* PKGBUILD の arch=(&#039;i686&#039; &#039;x86_64&#039;) 行に &#039;armv6h&#039; を追加して arch=(&#039;i686&#039; &#039;x86_64&#039; &#039;armv6h&#039;) とすることで Raspberry Pi 上でもビルドできます。&lt;br /&gt;
&lt;br /&gt;
=== AVR ボード ===&lt;br /&gt;
Arduino Uno などの AVR 基盤を使用する場合、任意で {{Pkg|arduino-avr-core}} をインストールすることで古い avr-core の代わりに Arch Linux の上流の avr-gcc を使うことができます。古い arduino-core を使いたい場合 [https://www.arduino.cc/en/Guide/Cores ボードマネージャでインストール] する必要があります。&amp;quot;Tools&amp;gt;Board&amp;quot; メニューからコアをいつでも切り替えられます。&lt;br /&gt;
&lt;br /&gt;
=== Arduino Due / Yun ===&lt;br /&gt;
&lt;br /&gt;
[http://arduino.cc/en/Main/arduinoBoardDue Arduino Due] と [http://arduino.cc/en/Main/ArduinoBoardYun Arduino Yun] は Arduino IDE バージョン 1.5 以上を必要とします。&lt;br /&gt;
&lt;br /&gt;
=== Pinoccio Scout ===&lt;br /&gt;
&lt;br /&gt;
[https://pinocc.io/ Pinoccio Scouts] も Arduino IDE を使ってプログラムすることが可能です。手順は [https://pinocc.io/solo こちら] に記載されています。もしくは、[[AUR]] から {{AUR|arduino-pinoccio}} をインストールすることもできます。&lt;br /&gt;
&lt;br /&gt;
=== Intel Galileo ===&lt;br /&gt;
&lt;br /&gt;
Intel Galileo ボードを Arduino IDE で使用したい場合、&amp;quot;Tools-&amp;gt;Board-&amp;gt;Boards Manager&amp;quot; から Galileo ツールのパッケージをダウンロードしてください。[https://github.com/arduino/Arduino/issues/5523 こちらの github の投稿] に従ってフィックスを適用できます。&lt;br /&gt;
&lt;br /&gt;
=== Arm7 デバイス ===&lt;br /&gt;
&lt;br /&gt;
[http://blog.tklee.org/2014/10/arduino-ide-158-on-banana-pi.html こちら] に対処方法が載っています。&lt;br /&gt;
&lt;br /&gt;
=== RedBear Duo ===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|perl-archive-zip}} をインストールしないと crc32 に関するエラーが表示されます。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
=== シリアル通信 ===&lt;br /&gt;
&lt;br /&gt;
arduino ボードはシリアル接続や USB シリアル接続によってコンピュータと通信します。そのためシリアルデバイスファイルへの読み書きアクセス権がユーザーに必要となります。[[Udev]] は {{ic|uucp}} グループによって所有されている {{ic|/dev/tts/}} にファイルを作成するためユーザーを {{ic|uucp}} グループに追加することで必要な読み書き権限が与えられます。デフォルトの Java IDE を使用する場合は、ユーザーを lock グループに追加して {{ic|/var/lock/lockdev}} にアクセスできるようにしてください。&lt;br /&gt;
&lt;br /&gt;
 # gpasswd -a $USER uucp&lt;br /&gt;
 # gpasswd -a $USER lock&lt;br /&gt;
{{Note|変更を適用するには、一度ログアウトしてから再度ログインする必要があります。}}&lt;br /&gt;
&lt;br /&gt;
Arduino にアップロードを行う前に、Tools メニューからシリアルポート、ボード、プロセッサを適切に設定してください。&lt;br /&gt;
&lt;br /&gt;
== stty ==&lt;br /&gt;
&lt;br /&gt;
準備:&lt;br /&gt;
 # stty -F /dev/ttyACM0 cs8 9600 ignbrk -brkint -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts&lt;br /&gt;
&lt;br /&gt;
コマンドの後に改行せずにターミナルからコマンドを送信:&lt;br /&gt;
 # echo -n &amp;quot;Hello World&amp;quot; &amp;gt; /dev/ttyACM0&lt;br /&gt;
{{Note| As autoreset on serial connection is activated by default on most boards, you need to disable this feature if you want to communicate directly with your board with the last command instead of a terminal emulator (arduino IDE, screen, picocom...). If you have a Leonardo board, you are not concerned by this, because it does not autoreset. If you have a Uno board, connect a 10 µF capacitor between the RESET and GND pins. If you have another board, connect a 120 ohms resistor between the RESET and 5V pins. See http://playground.arduino.cc/Main/DisablingAutoResetOnSerialConnection for more details.}}&lt;br /&gt;
&lt;br /&gt;
Arduino からの出力を読み込み:&lt;br /&gt;
 $ cat /dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
== 他の IDE ==&lt;br /&gt;
&lt;br /&gt;
=== ArduIDE ===&lt;br /&gt;
&lt;br /&gt;
ArduIDE は Arduino 用の Qt ベース IDE です。[[AUR]] の {{AUR|arduide-git}} からインストールできます。&lt;br /&gt;
&lt;br /&gt;
ターミナルから作業したい場合、複数の選択肢が存在します。&lt;br /&gt;
&lt;br /&gt;
=== Arduino-CMake ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/queezythegreat/arduino-cmake arduino-cmake] と [http://www.cmake.org/cmake/resources/software.html CMake] を使うことで複数のビルド環境でコマンドラインから Arduino のファームウェアをビルドすることができます。CMake があなたのニーズに合わせたビルド環境を生成し、お好きなツールを使用できます。シンプルな Makefile から Eclipse, Visual Studio, XCode などのプロジェクトまであらゆるビルド環境を準備可能です。&lt;br /&gt;
&lt;br /&gt;
必要なパッケージ: {{Pkg|cmake}}, {{Pkg|arduino}}, {{Pkg|avr-gcc}}, {{Pkg|avr-binutils}}, {{Pkg|avr-libc}}, {{Pkg|avrdude}}。&lt;br /&gt;
&lt;br /&gt;
=== gnoduino ===&lt;br /&gt;
&lt;br /&gt;
{{AUR|gnoduino}} はオリジナルの Arduino IDE を GNOME 用にした実装で [[AUR]] からインストールできます。オリジナルの Arduino IDE ソフトウェアは Java で書かれています。gnoduino は Python で実装されており、GNOME を対象にしています。ただし xfce4 など他の WM でも動作します。軽量であることを謳っていますが、オリジナルの Arduino IDE と互換性は維持しています。ソースエディタは gtksourceview をベースとしています。&lt;br /&gt;
&lt;br /&gt;
=== Ino ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/amperka/ino Ino] は arduino ハードウェアを使うためのコマンドラインツールキットです。{{AUR|ino}} は [[AUR]] からインストールできます。&lt;br /&gt;
&lt;br /&gt;
{{ic|Ino}} は {{ic|/etc/avrdude/avrdude.conf}} にある {{ic|avrdude.conf}} ファイルを確認しますが、({{pkg|avrdude}} のインストール時に) [[pacman]] はこのファイルを {{ic|/etc/avrdude.conf}} に配置します。{{ic|Ino}} が何かエラーを表示するときは {{ic|/etc/avrdude}} ディレクトリを作成してシンボリックリンクを作ってください:&lt;br /&gt;
 # ln -s /etc/avrdude.conf /etc/avrdude/avrdude.conf&lt;br /&gt;
&lt;br /&gt;
=== Makefile ===&lt;br /&gt;
&lt;br /&gt;
{{Note|Update 2015-03-23. Due to recent changes in Arduino ≥v1.5, many old Makefiles do not work without some modification. A simple Makefile for Arduino version 1.5+ can be found [https://github.com/tomswartz07/arduino-makefile on GitHub].}}&lt;br /&gt;
&lt;br /&gt;
Arduino IDE を使用する代わりに他のエディタと Makefile を使用することができます。&lt;br /&gt;
&lt;br /&gt;
Arduino をプログラムするためのディレクトリをセットアップして、ディレクトリに Makefile をコピーしてください。Makefile のコピーは {{ic|/usr/share/arduino/hardware/cores/arduino/Makefile}} から取得できます。&lt;br /&gt;
&lt;br /&gt;
設定にあわせて多少修正が必要です。Makefile には豊富に説明が付いています。以下は編集が必要な行の一例です:&lt;br /&gt;
&lt;br /&gt;
 PORT = usually /dev/ttyUSBx, where x is the usb serial port your arduino is plugged into&lt;br /&gt;
 TARGET = your sketch&#039;s name&lt;br /&gt;
 ARDUINO = /usr/share/arduino/lib/targets/arduino&lt;br /&gt;
&lt;br /&gt;
スケッチでコールするライブラリにあわせて、ライブラリの一部をコンパイルする必要があります。SRC と CXXSRC を編集して必要なライブラリを記述してください。&lt;br /&gt;
&lt;br /&gt;
編集したら {{ic|make &amp;amp;&amp;amp; make upload}} でボードからスケッチを実行できるようになります。&lt;br /&gt;
&lt;br /&gt;
=== Arduino-mk ===&lt;br /&gt;
&lt;br /&gt;
{{AUR|arduino-mk}} は Makefile を使用するもうひとつのアプローチです。Arduino.mk を include するローカルな Makefile を作成することができます。使い方は [https://github.com/sudar/Arduino-Makefile プロジェクトページ] を見てください。&lt;br /&gt;
&lt;br /&gt;
Arduino 1.5 の場合、以下のローカル Makefile を試してください (Arduino 1.5 のライブラリディレクトリの構造は少し変わっています):&lt;br /&gt;
&lt;br /&gt;
 ARDUINO_DIR = /usr/share/arduino&lt;br /&gt;
 ARDMK_DIR = /usr/share/arduino&lt;br /&gt;
 AVR_TOOLS_DIR = /usr&lt;br /&gt;
 ARDUINO_CORE_PATH = /usr/share/arduino/hardware/arduino/avr/cores/arduino&lt;br /&gt;
 BOARDS_TXT = /usr/share/arduino/hardware/arduino/avr/boards.txt&lt;br /&gt;
 ARDUINO_VAR_PATH = /usr/share/arduino/hardware/arduino/avr/variants&lt;br /&gt;
 BOOTLOADER_PARENT = /usr/share/arduino/hardware/arduino/avr/bootloaders&lt;br /&gt;
 &lt;br /&gt;
 BOARD_TAG    = uno&lt;br /&gt;
 ARDUINO_LIBS =&lt;br /&gt;
 &lt;br /&gt;
 include /usr/share/arduino/Arduino.mk&lt;br /&gt;
&lt;br /&gt;
場合によっては {{pkg|avr-libc}} や {{pkg|avrdude}} のインストールが必要です。&lt;br /&gt;
&lt;br /&gt;
=== Scons ===&lt;br /&gt;
&lt;br /&gt;
[http://www.scons.org/ scons] と [https://github.com/suapapa/arscons arscons] を組み合わせて使うことでコマンドラインから簡単に Arduino プロジェクトをコンパイル・アップロードすることができます。Scons は python で作成されておりシリアルインターフェイスを使うのに python-pyserial が必要です。{{pkg|python-pyserial}} と {{pkg|scons}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
パッケージをインストールすると必要な依存パッケージも一緒にインストールされます。上記のように Arduino 本体も必要なのでインストールしてください。プロジェクトディレクトリを作成したら (例: test)、新しいディレクトリに arduino のプロジェクトファイルを作成します。ディレクトリと同じ名前を付けて拡張子に .ino を追加してください (例: test.ino)。arscons から [https://github.com/suapapa/arscons/blob/master/SConstruct SConstruct] スクリプトを取得してディレクトリに配置します。スクリプトの中身を確認して、必要であれば編集してください。中身は python スクリプトです。プロジェクトを編集したら、以下を実行:&lt;br /&gt;
&lt;br /&gt;
 $ scons                # This will build the project&lt;br /&gt;
 $ scons upload         # This will upload the project to your Arduino&lt;br /&gt;
&lt;br /&gt;
=== PlatformIO ===&lt;br /&gt;
&lt;br /&gt;
[http://docs.platformio.ikravets.com/en/latest/quickstart.html PlatformIO] は複数のハードウェアプラットフォームのスケッチをビルド・アップロードすることができる python ツールです。現在、Arduino/AVR ベースの基盤、TI MSP430 や TI TM4C12x ボードに対応しています。近い将来、ライブラリ機能も追加して GitHub から直接ライブラリを検索できるようにすることを開発者は予定しています。&lt;br /&gt;
&lt;br /&gt;
==== インストール ====&lt;br /&gt;
&lt;br /&gt;
{{AUR|platformio}} または {{AUR|platformio-git}} パッケージをインストールしてください。&lt;br /&gt;
&lt;br /&gt;
==== 使用方法 ====&lt;br /&gt;
 &lt;br /&gt;
 $ platformio platforms install atmelavr&lt;br /&gt;
 $ platformio init&lt;br /&gt;
 $ vim platformio.ini&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 # Atmel AVR based board + Arduino Wiring Framework&lt;br /&gt;
 #&lt;br /&gt;
 [env:ArduinoMega2560]&lt;br /&gt;
 platform = atmelavr&lt;br /&gt;
 framework = arduino&lt;br /&gt;
 board = megaatmega2560   &lt;br /&gt;
 upload_port = /dev/ttyACM0 &lt;br /&gt;
 targets = upload&lt;br /&gt;
&lt;br /&gt;
 $ platformio run&lt;br /&gt;
&lt;br /&gt;
===Emacs===&lt;br /&gt;
&lt;br /&gt;
[[Emacs]] を IDE として設定することができます。&lt;br /&gt;
&lt;br /&gt;
[[AUR]] から {{aur|emacs-arduino-mode-git}} パッケージをインストールして emacs で {{ic|arduino-mode}} を有効にしてください。&lt;br /&gt;
&lt;br /&gt;
init スクリプトに追加:&lt;br /&gt;
{{hc|~/.emacs|&lt;br /&gt;
;; arduino-mode&lt;br /&gt;
(require &#039;cl)&lt;br /&gt;
(autoload &#039;arduino-mode &amp;quot;arduino-mode&amp;quot; &amp;quot;Arduino editing mode.&amp;quot; t)&lt;br /&gt;
(add-to-list &#039;auto-mode-alist &#039;(&amp;quot;\.ino$&amp;quot; . arduino-mode))}}&lt;br /&gt;
&lt;br /&gt;
{{ic|Arduino-mk}} (上を参照) と {{ic|M-x compile}} {{ic|make upload}} を使うことでスケッチをコンパイル・アップロードできます。&lt;br /&gt;
&lt;br /&gt;
参照: [http://www.emacswiki.org/emacs/ArduinoSupport]。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== Version 1.6 ===&lt;br /&gt;
&lt;br /&gt;
2014年10月5日現在、サードパーティ製のツールの多くは Arduino 1.0 ({{AUR|arduino10}}) でしか動作しません。一部のツールだけが Arduino バージョン 1.6 ({{Pkg|arduino}}) 以降でも動作します。ツールが動作しない場合はバージョンを確認してください。&lt;br /&gt;
&lt;br /&gt;
=== Arduino デバイスの永続的な命名 ===&lt;br /&gt;
&lt;br /&gt;
複数の arduino を使っている場合、接続した順番で {{ic|/dev/ttyUSB[0-9]}} という名前がデバイスに付けられているのに気づくかもしれません。IDE では大した問題ではありませんが、バックグラウンドで arduino プロジェクトと通信するようなソフトウェアをプログラムする場合、鬱陶しく感じられるでしょう。以下の udev ルールを使うことで arduino に固定のシンボリックリンクを割り当てることができます:&lt;br /&gt;
{{hc|/etc/udev/rules.d/52-arduino.rules|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
SUBSYSTEMS==&amp;quot;usb&amp;quot;, KERNEL==&amp;quot;ttyUSB[0-9]*&amp;quot;, ATTRS{idVendor}==&amp;quot;0403&amp;quot;, ATTRS{idProduct}==&amp;quot;6001&amp;quot;, SYMLINK+=&amp;quot;sensors/ftdi_%s{serial}&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
これで arduino に {{ic|/dev/sensors/ftdi_A700dzaF}} のような名前でアクセスできるようになります。もっと意味のある名前をデバイスに付けたい場合:&lt;br /&gt;
{{hc|/etc/udev/rules.d/52-arduino.rules|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
SUBSYSTEMS==&amp;quot;usb&amp;quot;, KERNEL==&amp;quot;ttyUSB[0-9]*&amp;quot;, ATTRS{idVendor}==&amp;quot;0403&amp;quot;, ATTRS{idProduct}==&amp;quot;6001&amp;quot;, ATTRS{serial}==&amp;quot;A700dzaF&amp;quot;, SYMLINK+=&amp;quot;arduino/nano&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
上記で指定したシリアル番号のデバイスのシンボリックリンクが {{ic|/dev/arduino/nano}} に作成されます。変更を適用するのに arduino を切断して再接続したり次のコマンドを実行する必要はありません: {{ic|udevadm trigger}}。&lt;br /&gt;
&lt;br /&gt;
一般的な {{ic|idVendor}}/{{ic|idProduct}} の組み合わせはディストリビューションパッケージの {{ic|hardware/arduino/avr/boards.txt}} で確認できます。中には Arduino プラットフォーム以外のデバイスも含まれています ([[wikipedia:FTDI|FTDI]])。{{ic|serial}} 属性を使うことでデバイスを区別することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== シリアルポートを開くときのエラー ===&lt;br /&gt;
&lt;br /&gt;
IDE を起動したときシリアルポートが確認できても、アップロード時に TX/RX の LED が点灯しないことがあります。シリアルモニターで変更したボーレートが間違っている可能性があります。{{ic|~/.arduino/preferences.txt}} を編集して serial.debug_rate を 115200 などの値にしてください。&lt;br /&gt;
&lt;br /&gt;
=== Missing twi.o ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/arduino/lib/targets/libraries/Wire/utility/twi.o}} ファイルが存在しない場合、arduino はファイルを作成しようとします。通常ユーザーでは書き込み権限がないためファイルは作成されません。root で arduino を実行すればファイルが作成できます。ファイルの作成後は、arduino を通常ユーザーで実行できます。&lt;br /&gt;
&lt;br /&gt;
=== Uno/Mega2560 を使用する ===&lt;br /&gt;
&lt;br /&gt;
Arduino Uno と Mega2560 にはオンボード USB インターフェイス (Atmel 8U2) が存在しシリアルデータを受け取ります。そのため、デバイスを接続したときに cdc-acm カーネルモジュールによって作成される {{ic|/dev/ttyACM0}} からアクセスすることが可能です。&lt;br /&gt;
&lt;br /&gt;
シリアル接続をするには 8U2 ファームウェアのアップデートが必要な場合があります。詳しくは [http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1286350399] の #11 を確認してください。現在書き込むことができない Arduino の掲示板では、Uno を DFU にする方法が書かれている画像を見つけることができます。アカウントがなくて画像を閲覧できない場合、[http://www.scribd.com/doc/45913857/Arduino-UNO] を見てください。&lt;br /&gt;
&lt;br /&gt;
Uno をループバックモードにして115200ボーで Arduino のシリアルモニターに文字列を打ち込むことで機能のテストができます。文字列が返ってくるはずです。ループバックにするには、デジタル側でピン 0 -&amp;gt; 1 をショートさせてリセットボタンを押すか、入力する際に GND -&amp;gt; RESET ピンをショートさせてください。&lt;br /&gt;
&lt;br /&gt;
=== コンパイルエラー ===&lt;br /&gt;
以下のメッセージが表示される場合 (verbose モード):&lt;br /&gt;
 /usr/share/arduino/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../avr/bin/ld: cannot find -lm&lt;br /&gt;
&lt;br /&gt;
次のフィックスを試みてください [https://bbs.archlinux.org/viewtopic.php?pid=1343402#p1343402]:&lt;br /&gt;
* {{Pkg|avr-gcc}} パッケージをインストール&lt;br /&gt;
* 初めから入っている avr-gcc コンパイラを上でインストールしたパッケージのコンパイラで置き換える:&lt;br /&gt;
 # cd /usr/share/arduino/hardware/tools/avr/bin&lt;br /&gt;
 # mv ./avr-gcc ./avr-gcc-backup&lt;br /&gt;
 # ln -s /usr/bin/avr-gcc ./&lt;br /&gt;
&lt;br /&gt;
システムでインストールした avr ツールを使いたいときは、Arduino の Linux インストールページに書かれているように avr ディレクトリを削除します: &amp;quot;システムのコンパイラを使いたい場合、arduino の IDE をインストールしたフォルダにある {{ic|./hardware/tools/avr}} を削除してください&amp;quot;。&lt;br /&gt;
&lt;br /&gt;
Arduino.cc から適切な Linux バージョンをダウンロードして {{ic|/usr/share/arduino/hardware/tools/avr}} ディレクトリを標準のインストールアーカイブに含まれている avr ディレクトリで置き換えるという方法もあります。&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウマネージャでアプリケーションのサイズが変更できない、メニューがすぐ閉じる ===&lt;br /&gt;
[[Java#他のウィンドウマネージャになりすます]]を見てください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* https://bbs.archlinux.org/viewtopic.php?pid=295312&lt;br /&gt;
* https://bbs.archlinux.org/viewtopic.php?pid=981348&lt;br /&gt;
* http://answers.ros.org/question/9097/how-can-i-get-a-unique-device-path-for-my-arduinoftdi-device/&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Go&amp;diff=6503</id>
		<title>Go</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Go&amp;diff=6503"/>
		<updated>2016-11-27T09:44:39Z</updated>

		<summary type="html">&lt;p&gt;Fragment: /* 参照 */ 項目の追加&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:プログラミング言語]]&lt;br /&gt;
[[en:Go]]&lt;br /&gt;
[[ru:Go]]&lt;br /&gt;
[http://golang.org/ Go] は C 言語に由来する構文を持つ静的型付言語です。ガベージコレクションによるメモリ管理、型安全性、動的型付けの機能、可変長配列やキーバリューマップなどの型、膨大な標準ライブラリなどが追加されています。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
今日 Go のコンパイラは2つ存在しており、どちらも[[公式リポジトリ]]から[[インストール]]できます:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;go&#039;&#039;&#039;: {{pkg|go}} で[[インストール]]できるコンパイルツールへのインターフェース&lt;br /&gt;
** コンパイルが高速&lt;br /&gt;
** 公式のツールが使える(go get, go doc, etc.)&lt;br /&gt;
** クロスコンパイル&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;gccgo&#039;&#039;&#039;: {{pkg|gcc-go}} で[[インストール]]できるコンパイラコレクションに含まれている &#039;&#039;gcc&#039;&#039; のフロントエンド&lt;br /&gt;
** goroutine がフルフローになる&lt;br /&gt;
** バイナリのサイズが小さい(dynamic linking)&lt;br /&gt;
&lt;br /&gt;
=== インストールのテスト ===&lt;br /&gt;
&lt;br /&gt;
Go が正しくインストールされたかは以下のような小さなプログラムをビルドして確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|hello.go|&lt;br /&gt;
package main&lt;br /&gt;
&lt;br /&gt;
import &amp;quot;fmt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
func main() {&lt;br /&gt;
    fmt.Println(&amp;quot;Hello, Arch!&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
go ツールを使って実行:&lt;br /&gt;
{{hc|$ go run hello.go|&lt;br /&gt;
Hello, Arch!&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
標準の &#039;&#039;gc&#039;&#039; コンパイラでコンパイル ({{ic|1=go build -compiler=gc hello.go}} と同じ):&lt;br /&gt;
&lt;br /&gt;
 $ go build hello.go&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;gccgo&#039;&#039; でコンパイル ({{ic|1=go build -compiler=gccgo hello.go}} と同じ):&lt;br /&gt;
&lt;br /&gt;
 $ gccgo hello.go -o hello&lt;br /&gt;
&lt;br /&gt;
=== $GOPATH ===&lt;br /&gt;
&lt;br /&gt;
{{ic|import}} ステートメントなどで使用される、Go の依存パッケージは、{{ic|$GOPATH}} 変数、そして {{ic|$GOROOT}} (&#039;&#039;go&#039;&#039; のインストールディレクトリ、デフォルトでは {{ic|/usr/lib/go}}) で検索されます。基本の {{ic|$GOROOT}} からだけでなく、外部の依存パッケージを使う場合は、{{ic|~/.bash_profile}} (もしくはそれに類する設定ファイル) にワークスペースを指定する必要があります:&lt;br /&gt;
&lt;br /&gt;
 export GOPATH=~/go&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|go env}} を実行することで Go の変数を確認できます。}}&lt;br /&gt;
&lt;br /&gt;
ワークスペースを作成:&lt;br /&gt;
&lt;br /&gt;
 $ mkdir -p ~/go/{bin,src}&lt;br /&gt;
&lt;br /&gt;
プロジェクトのソースの保存には {{ic|src}} ディレクトリが、実行可能ファイルには {{ic|bin}} が使われます。&lt;br /&gt;
&lt;br /&gt;
また、{{ic|bin}} ディレクトリのパスを {{ic|$PATH}} [[環境変数]]に追加することで (Go 言語で書かれた) インストールしたプログラムを ({{ic|ls}} などと同じように) どこでも実行できるようになります:&lt;br /&gt;
&lt;br /&gt;
 export PATH=&amp;quot;$PATH:$GOPATH/bin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
必要な実行可能ファイルが実行できるように {{ic|$PATH}} に {{ic|bin}} ディレクトリも追加します。&lt;br /&gt;
&lt;br /&gt;
詳細は {{ic|go help gopath}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
=== 他のプラットフォームのクロスコンパイルを有効にする ===&lt;br /&gt;
&lt;br /&gt;
公式パッケージは Linux の amd64, i386, arm アーキテクチャしかサポートしていません。Darwin, FreeBSD, MS Windows などのクロスコンパイルをサポートするには、以下のようにしてください。&lt;br /&gt;
&lt;br /&gt;
{{ic|$GOROOT_BOOTSTRAP}}を{{ic|/usr/lib/go}}に設定すると{{ic|/usr/lib/go/src}}をビルドできません。以下のような警告が出力されます。&lt;br /&gt;
&lt;br /&gt;
 $ cd /usr/lib/go/src&lt;br /&gt;
 $ GOROOT_BOOTSTRAP=/usr/lib/go GOOS=darwin GOARCH=amd64 ./make.bash --no-clean &lt;br /&gt;
 ##### Building Go bootstrap tool.&lt;br /&gt;
 cmd/dist&lt;br /&gt;
 ERROR: $GOROOT_BOOTSTRAP must not be set to $GOROOT&lt;br /&gt;
 Set $GOROOT_BOOTSTRAP to a working Go tree &amp;gt;= Go 1.4.&lt;br /&gt;
&lt;br /&gt;
この問題を回避するには、https://golang.org/からGoのソースを入手してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|以下のコマンドは、{{ic|~/downloads/go}}にGoのダウンロードを解凍したものとします。}}&lt;br /&gt;
&lt;br /&gt;
ダウンロードしたGoをビルドしてください。&lt;br /&gt;
&lt;br /&gt;
 $ cd ~/downloads/go/src&lt;br /&gt;
 $ GOROOT_BOOTSTRAP=/usr/lib/go GOOS=linux GOARCH=amd64 ./make.bash --no-clean&lt;br /&gt;
&lt;br /&gt;
これでダウンロードしたGo as bootstrapを使用してGoをビルドできるようになりました。以下のコマンドでビルドします。&lt;br /&gt;
&lt;br /&gt;
 $ cd /usr/lib/go/src; for os in darwin freebsd windows; do for arch in amd64 386; do sudo GOROOT_BOOTSTRAP=&amp;quot;$HOME/downloads/go&amp;quot; GOOS=$os GOARCH=$arch ./make.bash --no-clean; done; done&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは Go パッケージをアップデートするたびに実行する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
詳細は {{Bug|30287}} を参照。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== Jetbrains Goプラグイン ===&lt;br /&gt;
もしJetbrainsのIDEを使用していてGoプラグインがGo SDK のパスを見つけられない場合、互換性のないパッケージを使用している可能性があります。{{ic|gcc-go}}パッケージを削除し、{{ic|go}}パッケージで置き換えてください。GOPATHが設定されている場合にはIDEは{{ic|/usr/lib/go}}でGo SDKを見つけられます。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [http://golang.org/ Go プログラミング言語のオフィシャルウェブサイト]&lt;br /&gt;
* [[Wikipedia:ja:Go (プログラミング言語)|Wikipedia の記事]]&lt;br /&gt;
* [https://gobyexample.com/ 簡単な説明が付いているサンプル]&lt;br /&gt;
* [http://tour.golang.org インタラクティブな Go トレーニングツアー]&lt;br /&gt;
* [https://github.com/golang/go/wiki/IDEsAndTextEditorPlugins Go の IDE とプラグイン]&lt;br /&gt;
* [https://docs.google.com/document/d/1OaatvGhEAq7VseQ9kkavxKNAfepWy2yhPUBs96FGV28/edit Go 1.5 Bootstrap Plan]&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Go&amp;diff=6502</id>
		<title>Go</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Go&amp;diff=6502"/>
		<updated>2016-11-27T09:41:05Z</updated>

		<summary type="html">&lt;p&gt;Fragment: /* 他のプラットフォームのクロスコンパイルを有効にする */ 翻訳&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:プログラミング言語]]&lt;br /&gt;
[[en:Go]]&lt;br /&gt;
[[ru:Go]]&lt;br /&gt;
[http://golang.org/ Go] は C 言語に由来する構文を持つ静的型付言語です。ガベージコレクションによるメモリ管理、型安全性、動的型付けの機能、可変長配列やキーバリューマップなどの型、膨大な標準ライブラリなどが追加されています。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
今日 Go のコンパイラは2つ存在しており、どちらも[[公式リポジトリ]]から[[インストール]]できます:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;go&#039;&#039;&#039;: {{pkg|go}} で[[インストール]]できるコンパイルツールへのインターフェース&lt;br /&gt;
** コンパイルが高速&lt;br /&gt;
** 公式のツールが使える(go get, go doc, etc.)&lt;br /&gt;
** クロスコンパイル&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;gccgo&#039;&#039;&#039;: {{pkg|gcc-go}} で[[インストール]]できるコンパイラコレクションに含まれている &#039;&#039;gcc&#039;&#039; のフロントエンド&lt;br /&gt;
** goroutine がフルフローになる&lt;br /&gt;
** バイナリのサイズが小さい(dynamic linking)&lt;br /&gt;
&lt;br /&gt;
=== インストールのテスト ===&lt;br /&gt;
&lt;br /&gt;
Go が正しくインストールされたかは以下のような小さなプログラムをビルドして確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|hello.go|&lt;br /&gt;
package main&lt;br /&gt;
&lt;br /&gt;
import &amp;quot;fmt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
func main() {&lt;br /&gt;
    fmt.Println(&amp;quot;Hello, Arch!&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
go ツールを使って実行:&lt;br /&gt;
{{hc|$ go run hello.go|&lt;br /&gt;
Hello, Arch!&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
標準の &#039;&#039;gc&#039;&#039; コンパイラでコンパイル ({{ic|1=go build -compiler=gc hello.go}} と同じ):&lt;br /&gt;
&lt;br /&gt;
 $ go build hello.go&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;gccgo&#039;&#039; でコンパイル ({{ic|1=go build -compiler=gccgo hello.go}} と同じ):&lt;br /&gt;
&lt;br /&gt;
 $ gccgo hello.go -o hello&lt;br /&gt;
&lt;br /&gt;
=== $GOPATH ===&lt;br /&gt;
&lt;br /&gt;
{{ic|import}} ステートメントなどで使用される、Go の依存パッケージは、{{ic|$GOPATH}} 変数、そして {{ic|$GOROOT}} (&#039;&#039;go&#039;&#039; のインストールディレクトリ、デフォルトでは {{ic|/usr/lib/go}}) で検索されます。基本の {{ic|$GOROOT}} からだけでなく、外部の依存パッケージを使う場合は、{{ic|~/.bash_profile}} (もしくはそれに類する設定ファイル) にワークスペースを指定する必要があります:&lt;br /&gt;
&lt;br /&gt;
 export GOPATH=~/go&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|go env}} を実行することで Go の変数を確認できます。}}&lt;br /&gt;
&lt;br /&gt;
ワークスペースを作成:&lt;br /&gt;
&lt;br /&gt;
 $ mkdir -p ~/go/{bin,src}&lt;br /&gt;
&lt;br /&gt;
プロジェクトのソースの保存には {{ic|src}} ディレクトリが、実行可能ファイルには {{ic|bin}} が使われます。&lt;br /&gt;
&lt;br /&gt;
また、{{ic|bin}} ディレクトリのパスを {{ic|$PATH}} [[環境変数]]に追加することで (Go 言語で書かれた) インストールしたプログラムを ({{ic|ls}} などと同じように) どこでも実行できるようになります:&lt;br /&gt;
&lt;br /&gt;
 export PATH=&amp;quot;$PATH:$GOPATH/bin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
必要な実行可能ファイルが実行できるように {{ic|$PATH}} に {{ic|bin}} ディレクトリも追加します。&lt;br /&gt;
&lt;br /&gt;
詳細は {{ic|go help gopath}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
=== 他のプラットフォームのクロスコンパイルを有効にする ===&lt;br /&gt;
&lt;br /&gt;
公式パッケージは Linux の amd64, i386, arm アーキテクチャしかサポートしていません。Darwin, FreeBSD, MS Windows などのクロスコンパイルをサポートするには、以下のようにしてください。&lt;br /&gt;
&lt;br /&gt;
{{ic|$GOROOT_BOOTSTRAP}}を{{ic|/usr/lib/go}}に設定すると{{ic|/usr/lib/go/src}}をビルドできません。以下のような警告が出力されます。&lt;br /&gt;
&lt;br /&gt;
 $ cd /usr/lib/go/src&lt;br /&gt;
 $ GOROOT_BOOTSTRAP=/usr/lib/go GOOS=darwin GOARCH=amd64 ./make.bash --no-clean &lt;br /&gt;
 ##### Building Go bootstrap tool.&lt;br /&gt;
 cmd/dist&lt;br /&gt;
 ERROR: $GOROOT_BOOTSTRAP must not be set to $GOROOT&lt;br /&gt;
 Set $GOROOT_BOOTSTRAP to a working Go tree &amp;gt;= Go 1.4.&lt;br /&gt;
&lt;br /&gt;
この問題を回避するには、https://golang.org/からGoのソースを入手してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|以下のコマンドは、{{ic|~/downloads/go}}にGoのダウンロードを解凍したものとします。}}&lt;br /&gt;
&lt;br /&gt;
ダウンロードしたGoをビルドしてください。&lt;br /&gt;
&lt;br /&gt;
 $ cd ~/downloads/go/src&lt;br /&gt;
 $ GOROOT_BOOTSTRAP=/usr/lib/go GOOS=linux GOARCH=amd64 ./make.bash --no-clean&lt;br /&gt;
&lt;br /&gt;
これでダウンロードしたGo as bootstrapを使用してGoをビルドできるようになりました。以下のコマンドでビルドします。&lt;br /&gt;
&lt;br /&gt;
 $ cd /usr/lib/go/src; for os in darwin freebsd windows; do for arch in amd64 386; do sudo GOROOT_BOOTSTRAP=&amp;quot;$HOME/downloads/go&amp;quot; GOOS=$os GOARCH=$arch ./make.bash --no-clean; done; done&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは Go パッケージをアップデートするたびに実行する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
詳細は {{Bug|30287}} を参照。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== Jetbrains Goプラグイン ===&lt;br /&gt;
もしJetbrainsのIDEを使用していてGoプラグインがGo SDK のパスを見つけられない場合、互換性のないパッケージを使用している可能性があります。{{ic|gcc-go}}パッケージを削除し、{{ic|go}}パッケージで置き換えてください。GOPATHが設定されている場合にはIDEは{{ic|/usr/lib/go}}でGo SDKを見つけられます。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [http://golang.org/ Go プログラミング言語のオフィシャルウェブサイト]&lt;br /&gt;
* [[Wikipedia:ja:Go (プログラミング言語)|Wikipedia の記事]]&lt;br /&gt;
* [https://gobyexample.com/ 簡単な説明が付いているサンプル]&lt;br /&gt;
* [http://tour.golang.org インタラクティブな Go トレーニングツアー]&lt;br /&gt;
* [https://github.com/golang/go/wiki/IDEsAndTextEditorPlugins Go の IDE とプラグイン]&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Go&amp;diff=6501</id>
		<title>Go</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Go&amp;diff=6501"/>
		<updated>2016-11-27T09:31:00Z</updated>

		<summary type="html">&lt;p&gt;Fragment: /* インストールのテスト */ 同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:プログラミング言語]]&lt;br /&gt;
[[en:Go]]&lt;br /&gt;
[[ru:Go]]&lt;br /&gt;
[http://golang.org/ Go] は C 言語に由来する構文を持つ静的型付言語です。ガベージコレクションによるメモリ管理、型安全性、動的型付けの機能、可変長配列やキーバリューマップなどの型、膨大な標準ライブラリなどが追加されています。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
今日 Go のコンパイラは2つ存在しており、どちらも[[公式リポジトリ]]から[[インストール]]できます:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;go&#039;&#039;&#039;: {{pkg|go}} で[[インストール]]できるコンパイルツールへのインターフェース&lt;br /&gt;
** コンパイルが高速&lt;br /&gt;
** 公式のツールが使える(go get, go doc, etc.)&lt;br /&gt;
** クロスコンパイル&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;gccgo&#039;&#039;&#039;: {{pkg|gcc-go}} で[[インストール]]できるコンパイラコレクションに含まれている &#039;&#039;gcc&#039;&#039; のフロントエンド&lt;br /&gt;
** goroutine がフルフローになる&lt;br /&gt;
** バイナリのサイズが小さい(dynamic linking)&lt;br /&gt;
&lt;br /&gt;
=== インストールのテスト ===&lt;br /&gt;
&lt;br /&gt;
Go が正しくインストールされたかは以下のような小さなプログラムをビルドして確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|hello.go|&lt;br /&gt;
package main&lt;br /&gt;
&lt;br /&gt;
import &amp;quot;fmt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
func main() {&lt;br /&gt;
    fmt.Println(&amp;quot;Hello, Arch!&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
go ツールを使って実行:&lt;br /&gt;
{{hc|$ go run hello.go|&lt;br /&gt;
Hello, Arch!&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
標準の &#039;&#039;gc&#039;&#039; コンパイラでコンパイル ({{ic|1=go build -compiler=gc hello.go}} と同じ):&lt;br /&gt;
&lt;br /&gt;
 $ go build hello.go&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;gccgo&#039;&#039; でコンパイル ({{ic|1=go build -compiler=gccgo hello.go}} と同じ):&lt;br /&gt;
&lt;br /&gt;
 $ gccgo hello.go -o hello&lt;br /&gt;
&lt;br /&gt;
=== $GOPATH ===&lt;br /&gt;
&lt;br /&gt;
{{ic|import}} ステートメントなどで使用される、Go の依存パッケージは、{{ic|$GOPATH}} 変数、そして {{ic|$GOROOT}} (&#039;&#039;go&#039;&#039; のインストールディレクトリ、デフォルトでは {{ic|/usr/lib/go}}) で検索されます。基本の {{ic|$GOROOT}} からだけでなく、外部の依存パッケージを使う場合は、{{ic|~/.bash_profile}} (もしくはそれに類する設定ファイル) にワークスペースを指定する必要があります:&lt;br /&gt;
&lt;br /&gt;
 export GOPATH=~/go&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|go env}} を実行することで Go の変数を確認できます。}}&lt;br /&gt;
&lt;br /&gt;
ワークスペースを作成:&lt;br /&gt;
&lt;br /&gt;
 $ mkdir -p ~/go/{bin,src}&lt;br /&gt;
&lt;br /&gt;
プロジェクトのソースの保存には {{ic|src}} ディレクトリが、実行可能ファイルには {{ic|bin}} が使われます。&lt;br /&gt;
&lt;br /&gt;
また、{{ic|bin}} ディレクトリのパスを {{ic|$PATH}} [[環境変数]]に追加することで (Go 言語で書かれた) インストールしたプログラムを ({{ic|ls}} などと同じように) どこでも実行できるようになります:&lt;br /&gt;
&lt;br /&gt;
 export PATH=&amp;quot;$PATH:$GOPATH/bin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
必要な実行可能ファイルが実行できるように {{ic|$PATH}} に {{ic|bin}} ディレクトリも追加します。&lt;br /&gt;
&lt;br /&gt;
詳細は {{ic|go help gopath}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
=== 他のプラットフォームのクロスコンパイルを有効にする ===&lt;br /&gt;
&lt;br /&gt;
公式パッケージは Linux の amd64, i386, arm アーキテクチャしかサポートしていません。Darwin, FreeBSD, MS Windows などのクロスコンパイルをサポートするには、以下のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
You can not build {{ic|/usr/lib/go/src}} of itself, ie if you set {{ic|$GOROOT_BOOTSTRAP}} to {{ic|/usr/lib/go}} you will get a warning like this.&lt;br /&gt;
&lt;br /&gt;
 $ cd /usr/lib/go/src&lt;br /&gt;
 $ GOROOT_BOOTSTRAP=/usr/lib/go GOOS=darwin GOARCH=amd64 ./make.bash --no-clean &lt;br /&gt;
 ##### Building Go bootstrap tool.&lt;br /&gt;
 cmd/dist&lt;br /&gt;
 ERROR: $GOROOT_BOOTSTRAP must not be set to $GOROOT&lt;br /&gt;
 Set $GOROOT_BOOTSTRAP to a working Go tree &amp;gt;= Go 1.4.&lt;br /&gt;
&lt;br /&gt;
To get around this, grab a source copy of Go from https://golang.org/.&lt;br /&gt;
&lt;br /&gt;
{{Note|Commands below will assume you extracted your download of Go to {{ic|~/downloads/go}}.}}&lt;br /&gt;
&lt;br /&gt;
Build your downloaded Go with your system GO.&lt;br /&gt;
&lt;br /&gt;
 $ cd ~/downloads/go/src&lt;br /&gt;
 $ GOROOT_BOOTSTRAP=/usr/lib/go GOOS=linux GOARCH=amd64 ./make.bash --no-clean&lt;br /&gt;
&lt;br /&gt;
You can now build your system Go using the downloaded Go as bootstrap with this command.&lt;br /&gt;
&lt;br /&gt;
 $ cd /usr/lib/go/src; for os in darwin freebsd windows; do for arch in amd64 386; do sudo GOROOT_BOOTSTRAP=&amp;quot;$HOME/downloads/go&amp;quot; GOOS=$os GOARCH=$arch ./make.bash --no-clean; done; done&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは Go パッケージをアップデートするたびに実行する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
詳細は {{Bug|30287}} を参照。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== Jetbrains Goプラグイン ===&lt;br /&gt;
もしJetbrainsのIDEを使用していてGoプラグインがGo SDK のパスを見つけられない場合、互換性のないパッケージを使用している可能性があります。{{ic|gcc-go}}パッケージを削除し、{{ic|go}}パッケージで置き換えてください。GOPATHが設定されている場合にはIDEは{{ic|/usr/lib/go}}でGo SDKを見つけられます。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [http://golang.org/ Go プログラミング言語のオフィシャルウェブサイト]&lt;br /&gt;
* [[Wikipedia:ja:Go (プログラミング言語)|Wikipedia の記事]]&lt;br /&gt;
* [https://gobyexample.com/ 簡単な説明が付いているサンプル]&lt;br /&gt;
* [http://tour.golang.org インタラクティブな Go トレーニングツアー]&lt;br /&gt;
* [https://github.com/golang/go/wiki/IDEsAndTextEditorPlugins Go の IDE とプラグイン]&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Go&amp;diff=6500</id>
		<title>Go</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Go&amp;diff=6500"/>
		<updated>2016-11-27T09:29:00Z</updated>

		<summary type="html">&lt;p&gt;Fragment: /* インストール */ 同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:プログラミング言語]]&lt;br /&gt;
[[en:Go]]&lt;br /&gt;
[[ru:Go]]&lt;br /&gt;
[http://golang.org/ Go] は C 言語に由来する構文を持つ静的型付言語です。ガベージコレクションによるメモリ管理、型安全性、動的型付けの機能、可変長配列やキーバリューマップなどの型、膨大な標準ライブラリなどが追加されています。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
今日 Go のコンパイラは2つ存在しており、どちらも[[公式リポジトリ]]から[[インストール]]できます:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;go&#039;&#039;&#039;: {{pkg|go}} で[[インストール]]できるコンパイルツールへのインターフェース&lt;br /&gt;
** コンパイルが高速&lt;br /&gt;
** 公式のツールが使える(go get, go doc, etc.)&lt;br /&gt;
** クロスコンパイル&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;gccgo&#039;&#039;&#039;: {{pkg|gcc-go}} で[[インストール]]できるコンパイラコレクションに含まれている &#039;&#039;gcc&#039;&#039; のフロントエンド&lt;br /&gt;
** goroutine がフルフローになる&lt;br /&gt;
** バイナリのサイズが小さい(dynamic linking)&lt;br /&gt;
&lt;br /&gt;
=== インストールのテスト ===&lt;br /&gt;
&lt;br /&gt;
Go が正しくインストールされたかは以下のような小さなプログラムをビルドして確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|hello.go|&lt;br /&gt;
package main&lt;br /&gt;
&lt;br /&gt;
import &amp;quot;fmt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
func main() {&lt;br /&gt;
    fmt.Println(&amp;quot;Hello, Arch!&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
go ツールを使って実行:&lt;br /&gt;
{{hc|$ go run hello.go|&lt;br /&gt;
Hello, Arch!&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
標準の &#039;&#039;gc&#039;&#039; コンパイラでコンパイル ({{ic|1=go build -compiler=gc test.go}} と同じ):&lt;br /&gt;
&lt;br /&gt;
 $ go build test.go&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;gccgo&#039;&#039; でコンパイル ({{ic|1=go build -compiler=gccgo test.go}} と同じ):&lt;br /&gt;
&lt;br /&gt;
 $ gccgo test.go -o test&lt;br /&gt;
&lt;br /&gt;
=== $GOPATH ===&lt;br /&gt;
&lt;br /&gt;
{{ic|import}} ステートメントなどで使用される、Go の依存パッケージは、{{ic|$GOPATH}} 変数、そして {{ic|$GOROOT}} (&#039;&#039;go&#039;&#039; のインストールディレクトリ、デフォルトでは {{ic|/usr/lib/go}}) で検索されます。基本の {{ic|$GOROOT}} からだけでなく、外部の依存パッケージを使う場合は、{{ic|~/.bash_profile}} (もしくはそれに類する設定ファイル) にワークスペースを指定する必要があります:&lt;br /&gt;
&lt;br /&gt;
 export GOPATH=~/go&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|go env}} を実行することで Go の変数を確認できます。}}&lt;br /&gt;
&lt;br /&gt;
ワークスペースを作成:&lt;br /&gt;
&lt;br /&gt;
 $ mkdir -p ~/go/{bin,src}&lt;br /&gt;
&lt;br /&gt;
プロジェクトのソースの保存には {{ic|src}} ディレクトリが、実行可能ファイルには {{ic|bin}} が使われます。&lt;br /&gt;
&lt;br /&gt;
また、{{ic|bin}} ディレクトリのパスを {{ic|$PATH}} [[環境変数]]に追加することで (Go 言語で書かれた) インストールしたプログラムを ({{ic|ls}} などと同じように) どこでも実行できるようになります:&lt;br /&gt;
&lt;br /&gt;
 export PATH=&amp;quot;$PATH:$GOPATH/bin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
必要な実行可能ファイルが実行できるように {{ic|$PATH}} に {{ic|bin}} ディレクトリも追加します。&lt;br /&gt;
&lt;br /&gt;
詳細は {{ic|go help gopath}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
=== 他のプラットフォームのクロスコンパイルを有効にする ===&lt;br /&gt;
&lt;br /&gt;
公式パッケージは Linux の amd64, i386, arm アーキテクチャしかサポートしていません。Darwin, FreeBSD, MS Windows などのクロスコンパイルをサポートするには、以下のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
You can not build {{ic|/usr/lib/go/src}} of itself, ie if you set {{ic|$GOROOT_BOOTSTRAP}} to {{ic|/usr/lib/go}} you will get a warning like this.&lt;br /&gt;
&lt;br /&gt;
 $ cd /usr/lib/go/src&lt;br /&gt;
 $ GOROOT_BOOTSTRAP=/usr/lib/go GOOS=darwin GOARCH=amd64 ./make.bash --no-clean &lt;br /&gt;
 ##### Building Go bootstrap tool.&lt;br /&gt;
 cmd/dist&lt;br /&gt;
 ERROR: $GOROOT_BOOTSTRAP must not be set to $GOROOT&lt;br /&gt;
 Set $GOROOT_BOOTSTRAP to a working Go tree &amp;gt;= Go 1.4.&lt;br /&gt;
&lt;br /&gt;
To get around this, grab a source copy of Go from https://golang.org/.&lt;br /&gt;
&lt;br /&gt;
{{Note|Commands below will assume you extracted your download of Go to {{ic|~/downloads/go}}.}}&lt;br /&gt;
&lt;br /&gt;
Build your downloaded Go with your system GO.&lt;br /&gt;
&lt;br /&gt;
 $ cd ~/downloads/go/src&lt;br /&gt;
 $ GOROOT_BOOTSTRAP=/usr/lib/go GOOS=linux GOARCH=amd64 ./make.bash --no-clean&lt;br /&gt;
&lt;br /&gt;
You can now build your system Go using the downloaded Go as bootstrap with this command.&lt;br /&gt;
&lt;br /&gt;
 $ cd /usr/lib/go/src; for os in darwin freebsd windows; do for arch in amd64 386; do sudo GOROOT_BOOTSTRAP=&amp;quot;$HOME/downloads/go&amp;quot; GOOS=$os GOARCH=$arch ./make.bash --no-clean; done; done&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは Go パッケージをアップデートするたびに実行する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
詳細は {{Bug|30287}} を参照。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== Jetbrains Goプラグイン ===&lt;br /&gt;
もしJetbrainsのIDEを使用していてGoプラグインがGo SDK のパスを見つけられない場合、互換性のないパッケージを使用している可能性があります。{{ic|gcc-go}}パッケージを削除し、{{ic|go}}パッケージで置き換えてください。GOPATHが設定されている場合にはIDEは{{ic|/usr/lib/go}}でGo SDKを見つけられます。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [http://golang.org/ Go プログラミング言語のオフィシャルウェブサイト]&lt;br /&gt;
* [[Wikipedia:ja:Go (プログラミング言語)|Wikipedia の記事]]&lt;br /&gt;
* [https://gobyexample.com/ 簡単な説明が付いているサンプル]&lt;br /&gt;
* [http://tour.golang.org インタラクティブな Go トレーニングツアー]&lt;br /&gt;
* [https://github.com/golang/go/wiki/IDEsAndTextEditorPlugins Go の IDE とプラグイン]&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Go&amp;diff=6499</id>
		<title>Go</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Go&amp;diff=6499"/>
		<updated>2016-11-27T09:11:22Z</updated>

		<summary type="html">&lt;p&gt;Fragment: /* Jetbrains Goプラグイン */ 翻訳進行&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:プログラミング言語]]&lt;br /&gt;
[[en:Go]]&lt;br /&gt;
[[ru:Go]]&lt;br /&gt;
[http://golang.org/ Go] は C 言語に由来する構文を持つ静的型付言語です。ガベージコレクションによるメモリ管理、型安全性、動的型付けの機能、可変長配列やキーバリューマップなどの型、膨大な標準ライブラリなどが追加されています。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
今日 Go のコンパイラは2つ存在しており、どちらも[[公式リポジトリ]]から[[インストール]]できます:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;gc&#039;&#039;&#039;: {{pkg|go}} で[[インストール]]できるコンパイラの公式セット 8g(x86), 6g(amd64), 5g(arm) の共通名称&lt;br /&gt;
** コンパイルが高速&lt;br /&gt;
* &#039;&#039;&#039;gccgo&#039;&#039;&#039;: {{pkg|gcc-go}} で[[インストール]]できるコンパイラコレクションに含まれている &#039;&#039;gcc&#039;&#039; のフロントエンド&lt;br /&gt;
** goroutines に制限がある&lt;br /&gt;
** バイナリのサイズが小さい&lt;br /&gt;
** 優れた最適化&lt;br /&gt;
&lt;br /&gt;
=== インストールのテスト ===&lt;br /&gt;
&lt;br /&gt;
Go が正しくインストールされたかは以下のような小さなプログラムをビルドして確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|hello.go|&lt;br /&gt;
package main&lt;br /&gt;
&lt;br /&gt;
import &amp;quot;fmt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
func main() {&lt;br /&gt;
    fmt.Println(&amp;quot;Hello, Arch!&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
go ツールを使って実行:&lt;br /&gt;
{{hc|$ go run hello.go|&lt;br /&gt;
Hello, Arch!&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
標準の &#039;&#039;gc&#039;&#039; コンパイラでコンパイル ({{ic|1=go build -compiler=gc test.go}} と同じ):&lt;br /&gt;
&lt;br /&gt;
 $ go build test.go&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;gccgo&#039;&#039; でコンパイル ({{ic|1=go build -compiler=gccgo test.go}} と同じ):&lt;br /&gt;
&lt;br /&gt;
 $ gccgo test.go -o test&lt;br /&gt;
&lt;br /&gt;
=== $GOPATH ===&lt;br /&gt;
&lt;br /&gt;
{{ic|import}} ステートメントなどで使用される、Go の依存パッケージは、{{ic|$GOPATH}} 変数、そして {{ic|$GOROOT}} (&#039;&#039;go&#039;&#039; のインストールディレクトリ、デフォルトでは {{ic|/usr/lib/go}}) で検索されます。基本の {{ic|$GOROOT}} からだけでなく、外部の依存パッケージを使う場合は、{{ic|~/.bash_profile}} (もしくはそれに類する設定ファイル) にワークスペースを指定する必要があります:&lt;br /&gt;
&lt;br /&gt;
 export GOPATH=~/go&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|go env}} を実行することで Go の変数を確認できます。}}&lt;br /&gt;
&lt;br /&gt;
ワークスペースを作成:&lt;br /&gt;
&lt;br /&gt;
 $ mkdir -p ~/go/{bin,src}&lt;br /&gt;
&lt;br /&gt;
プロジェクトのソースの保存には {{ic|src}} ディレクトリが、実行可能ファイルには {{ic|bin}} が使われます。&lt;br /&gt;
&lt;br /&gt;
また、{{ic|bin}} ディレクトリのパスを {{ic|$PATH}} [[環境変数]]に追加することで (Go 言語で書かれた) インストールしたプログラムを ({{ic|ls}} などと同じように) どこでも実行できるようになります:&lt;br /&gt;
&lt;br /&gt;
 export PATH=&amp;quot;$PATH:$GOPATH/bin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
必要な実行可能ファイルが実行できるように {{ic|$PATH}} に {{ic|bin}} ディレクトリも追加します。&lt;br /&gt;
&lt;br /&gt;
詳細は {{ic|go help gopath}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
=== 他のプラットフォームのクロスコンパイルを有効にする ===&lt;br /&gt;
&lt;br /&gt;
公式パッケージは Linux の amd64, i386, arm アーキテクチャしかサポートしていません。Darwin, FreeBSD, MS Windows などのクロスコンパイルをサポートするには、以下のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 $ cd /usr/lib/go/src; for os in darwin freebsd windows; do for arch in amd64 386; do sudo GOOS=$os GOARCH=$arch ./make.bash --no-clean; done; done&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは Go パッケージをアップデートするたびに実行する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
詳細は {{Bug|30287}} を参照。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== Jetbrains Goプラグイン ===&lt;br /&gt;
もしJetbrainsのIDEを使用していてGoプラグインがGo SDK のパスを見つけられない場合、互換性のないパッケージを使用している可能性があります。{{ic|gcc-go}}パッケージを削除し、{{ic|go}}パッケージで置き換えてください。GOPATHが設定されている場合にはIDEは{{ic|/usr/lib/go}}でGo SDKを見つけられます。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [http://golang.org/ Go プログラミング言語のオフィシャルウェブサイト]&lt;br /&gt;
* [[Wikipedia:ja:Go (プログラミング言語)|Wikipedia の記事]]&lt;br /&gt;
* [https://gobyexample.com/ 簡単な説明が付いているサンプル]&lt;br /&gt;
* [http://tour.golang.org インタラクティブな Go トレーニングツアー]&lt;br /&gt;
* [https://github.com/golang/go/wiki/IDEsAndTextEditorPlugins Go の IDE とプラグイン]&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Go&amp;diff=6498</id>
		<title>Go</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Go&amp;diff=6498"/>
		<updated>2016-11-27T09:09:57Z</updated>

		<summary type="html">&lt;p&gt;Fragment: /* Jetbrains Go Plugin */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:プログラミング言語]]&lt;br /&gt;
[[en:Go]]&lt;br /&gt;
[[ru:Go]]&lt;br /&gt;
[http://golang.org/ Go] は C 言語に由来する構文を持つ静的型付言語です。ガベージコレクションによるメモリ管理、型安全性、動的型付けの機能、可変長配列やキーバリューマップなどの型、膨大な標準ライブラリなどが追加されています。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
今日 Go のコンパイラは2つ存在しており、どちらも[[公式リポジトリ]]から[[インストール]]できます:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;gc&#039;&#039;&#039;: {{pkg|go}} で[[インストール]]できるコンパイラの公式セット 8g(x86), 6g(amd64), 5g(arm) の共通名称&lt;br /&gt;
** コンパイルが高速&lt;br /&gt;
* &#039;&#039;&#039;gccgo&#039;&#039;&#039;: {{pkg|gcc-go}} で[[インストール]]できるコンパイラコレクションに含まれている &#039;&#039;gcc&#039;&#039; のフロントエンド&lt;br /&gt;
** goroutines に制限がある&lt;br /&gt;
** バイナリのサイズが小さい&lt;br /&gt;
** 優れた最適化&lt;br /&gt;
&lt;br /&gt;
=== インストールのテスト ===&lt;br /&gt;
&lt;br /&gt;
Go が正しくインストールされたかは以下のような小さなプログラムをビルドして確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|hello.go|&lt;br /&gt;
package main&lt;br /&gt;
&lt;br /&gt;
import &amp;quot;fmt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
func main() {&lt;br /&gt;
    fmt.Println(&amp;quot;Hello, Arch!&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
go ツールを使って実行:&lt;br /&gt;
{{hc|$ go run hello.go|&lt;br /&gt;
Hello, Arch!&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
標準の &#039;&#039;gc&#039;&#039; コンパイラでコンパイル ({{ic|1=go build -compiler=gc test.go}} と同じ):&lt;br /&gt;
&lt;br /&gt;
 $ go build test.go&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;gccgo&#039;&#039; でコンパイル ({{ic|1=go build -compiler=gccgo test.go}} と同じ):&lt;br /&gt;
&lt;br /&gt;
 $ gccgo test.go -o test&lt;br /&gt;
&lt;br /&gt;
=== $GOPATH ===&lt;br /&gt;
&lt;br /&gt;
{{ic|import}} ステートメントなどで使用される、Go の依存パッケージは、{{ic|$GOPATH}} 変数、そして {{ic|$GOROOT}} (&#039;&#039;go&#039;&#039; のインストールディレクトリ、デフォルトでは {{ic|/usr/lib/go}}) で検索されます。基本の {{ic|$GOROOT}} からだけでなく、外部の依存パッケージを使う場合は、{{ic|~/.bash_profile}} (もしくはそれに類する設定ファイル) にワークスペースを指定する必要があります:&lt;br /&gt;
&lt;br /&gt;
 export GOPATH=~/go&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|go env}} を実行することで Go の変数を確認できます。}}&lt;br /&gt;
&lt;br /&gt;
ワークスペースを作成:&lt;br /&gt;
&lt;br /&gt;
 $ mkdir -p ~/go/{bin,src}&lt;br /&gt;
&lt;br /&gt;
プロジェクトのソースの保存には {{ic|src}} ディレクトリが、実行可能ファイルには {{ic|bin}} が使われます。&lt;br /&gt;
&lt;br /&gt;
また、{{ic|bin}} ディレクトリのパスを {{ic|$PATH}} [[環境変数]]に追加することで (Go 言語で書かれた) インストールしたプログラムを ({{ic|ls}} などと同じように) どこでも実行できるようになります:&lt;br /&gt;
&lt;br /&gt;
 export PATH=&amp;quot;$PATH:$GOPATH/bin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
必要な実行可能ファイルが実行できるように {{ic|$PATH}} に {{ic|bin}} ディレクトリも追加します。&lt;br /&gt;
&lt;br /&gt;
詳細は {{ic|go help gopath}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
=== 他のプラットフォームのクロスコンパイルを有効にする ===&lt;br /&gt;
&lt;br /&gt;
公式パッケージは Linux の amd64, i386, arm アーキテクチャしかサポートしていません。Darwin, FreeBSD, MS Windows などのクロスコンパイルをサポートするには、以下のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 $ cd /usr/lib/go/src; for os in darwin freebsd windows; do for arch in amd64 386; do sudo GOOS=$os GOARCH=$arch ./make.bash --no-clean; done; done&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは Go パッケージをアップデートするたびに実行する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
詳細は {{Bug|30287}} を参照。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== Jetbrains Goプラグイン ===&lt;br /&gt;
もしJetbrainsのIDEを使用していてGoプラグインがGo SDK のパスを見つけられない場合、互換性のないパッケージを使用している可能性があります。{{ic|gcc-go}}を削除し、{{ic|go}}で置き換えてください。GOPATHが設定されている場合にはIDEは{{ic|/usr/lib/go}}でGo SDKを見つけられます。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [http://golang.org/ Go プログラミング言語のオフィシャルウェブサイト]&lt;br /&gt;
* [[Wikipedia:ja:Go (プログラミング言語)|Wikipedia の記事]]&lt;br /&gt;
* [https://gobyexample.com/ 簡単な説明が付いているサンプル]&lt;br /&gt;
* [http://tour.golang.org インタラクティブな Go トレーニングツアー]&lt;br /&gt;
* [https://github.com/golang/go/wiki/IDEsAndTextEditorPlugins Go の IDE とプラグイン]&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Go&amp;diff=6497</id>
		<title>Go</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Go&amp;diff=6497"/>
		<updated>2016-11-27T09:02:24Z</updated>

		<summary type="html">&lt;p&gt;Fragment: 項目の追加&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:プログラミング言語]]&lt;br /&gt;
[[en:Go]]&lt;br /&gt;
[[ru:Go]]&lt;br /&gt;
[http://golang.org/ Go] は C 言語に由来する構文を持つ静的型付言語です。ガベージコレクションによるメモリ管理、型安全性、動的型付けの機能、可変長配列やキーバリューマップなどの型、膨大な標準ライブラリなどが追加されています。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
今日 Go のコンパイラは2つ存在しており、どちらも[[公式リポジトリ]]から[[インストール]]できます:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;gc&#039;&#039;&#039;: {{pkg|go}} で[[インストール]]できるコンパイラの公式セット 8g(x86), 6g(amd64), 5g(arm) の共通名称&lt;br /&gt;
** コンパイルが高速&lt;br /&gt;
* &#039;&#039;&#039;gccgo&#039;&#039;&#039;: {{pkg|gcc-go}} で[[インストール]]できるコンパイラコレクションに含まれている &#039;&#039;gcc&#039;&#039; のフロントエンド&lt;br /&gt;
** goroutines に制限がある&lt;br /&gt;
** バイナリのサイズが小さい&lt;br /&gt;
** 優れた最適化&lt;br /&gt;
&lt;br /&gt;
=== インストールのテスト ===&lt;br /&gt;
&lt;br /&gt;
Go が正しくインストールされたかは以下のような小さなプログラムをビルドして確認できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|hello.go|&lt;br /&gt;
package main&lt;br /&gt;
&lt;br /&gt;
import &amp;quot;fmt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
func main() {&lt;br /&gt;
    fmt.Println(&amp;quot;Hello, Arch!&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
go ツールを使って実行:&lt;br /&gt;
{{hc|$ go run hello.go|&lt;br /&gt;
Hello, Arch!&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
標準の &#039;&#039;gc&#039;&#039; コンパイラでコンパイル ({{ic|1=go build -compiler=gc test.go}} と同じ):&lt;br /&gt;
&lt;br /&gt;
 $ go build test.go&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;gccgo&#039;&#039; でコンパイル ({{ic|1=go build -compiler=gccgo test.go}} と同じ):&lt;br /&gt;
&lt;br /&gt;
 $ gccgo test.go -o test&lt;br /&gt;
&lt;br /&gt;
=== $GOPATH ===&lt;br /&gt;
&lt;br /&gt;
{{ic|import}} ステートメントなどで使用される、Go の依存パッケージは、{{ic|$GOPATH}} 変数、そして {{ic|$GOROOT}} (&#039;&#039;go&#039;&#039; のインストールディレクトリ、デフォルトでは {{ic|/usr/lib/go}}) で検索されます。基本の {{ic|$GOROOT}} からだけでなく、外部の依存パッケージを使う場合は、{{ic|~/.bash_profile}} (もしくはそれに類する設定ファイル) にワークスペースを指定する必要があります:&lt;br /&gt;
&lt;br /&gt;
 export GOPATH=~/go&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|go env}} を実行することで Go の変数を確認できます。}}&lt;br /&gt;
&lt;br /&gt;
ワークスペースを作成:&lt;br /&gt;
&lt;br /&gt;
 $ mkdir -p ~/go/{bin,src}&lt;br /&gt;
&lt;br /&gt;
プロジェクトのソースの保存には {{ic|src}} ディレクトリが、実行可能ファイルには {{ic|bin}} が使われます。&lt;br /&gt;
&lt;br /&gt;
また、{{ic|bin}} ディレクトリのパスを {{ic|$PATH}} [[環境変数]]に追加することで (Go 言語で書かれた) インストールしたプログラムを ({{ic|ls}} などと同じように) どこでも実行できるようになります:&lt;br /&gt;
&lt;br /&gt;
 export PATH=&amp;quot;$PATH:$GOPATH/bin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
必要な実行可能ファイルが実行できるように {{ic|$PATH}} に {{ic|bin}} ディレクトリも追加します。&lt;br /&gt;
&lt;br /&gt;
詳細は {{ic|go help gopath}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
=== 他のプラットフォームのクロスコンパイルを有効にする ===&lt;br /&gt;
&lt;br /&gt;
公式パッケージは Linux の amd64, i386, arm アーキテクチャしかサポートしていません。Darwin, FreeBSD, MS Windows などのクロスコンパイルをサポートするには、以下のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 $ cd /usr/lib/go/src; for os in darwin freebsd windows; do for arch in amd64 386; do sudo GOOS=$os GOARCH=$arch ./make.bash --no-clean; done; done&lt;br /&gt;
&lt;br /&gt;
{{Note|上記のコマンドは Go パッケージをアップデートするたびに実行する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
詳細は {{Bug|30287}} を参照。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== Jetbrains Go Plugin ===&lt;br /&gt;
If you are using a Jetbrains IDE and the Go plugin cannot find your Go SDK path, you might be using an incompatible package. Remove the {{ic|gcc-go}} package and replace it with {{ic|go}}. If your GOPATH is set, the IDE should now be able to find your Go SDK at {{ic|/usr/lib/go}}.&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [http://golang.org/ Go プログラミング言語のオフィシャルウェブサイト]&lt;br /&gt;
* [[Wikipedia:ja:Go (プログラミング言語)|Wikipedia の記事]]&lt;br /&gt;
* [https://gobyexample.com/ 簡単な説明が付いているサンプル]&lt;br /&gt;
* [http://tour.golang.org インタラクティブな Go トレーニングツアー]&lt;br /&gt;
* [https://github.com/golang/go/wiki/IDEsAndTextEditorPlugins Go の IDE とプラグイン]&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Ext4&amp;diff=6431</id>
		<title>Ext4</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Ext4&amp;diff=6431"/>
		<updated>2016-11-22T00:26:50Z</updated>

		<summary type="html">&lt;p&gt;Fragment: /* メタデータチェックサムを有効化する */ 翻訳&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ファイルシステム]]&lt;br /&gt;
[[cs:Ext4]]&lt;br /&gt;
[[de:Ext4]]&lt;br /&gt;
[[en:Ext4]]&lt;br /&gt;
[[es:Ext4]]&lt;br /&gt;
[[fr:Ext4]]&lt;br /&gt;
[[it:Ext4]]&lt;br /&gt;
[[ru:Ext4]]&lt;br /&gt;
[[tr:Ext4]]&lt;br /&gt;
[[zh-CN:Ext4]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|ファイルシステム}}&lt;br /&gt;
{{Related|Ext3}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
Ext4 は Linux で一番よく使われているファイルシステム、Ext3 の発展版です。多くの点で、Ext3 から Ext4 になって Ext2 から　Ext3 に進んだときよりも大きな改善がされています。Ext3 では Ext2 にジャーナリングを追加したのがほとんどでしたが、Ext4 ではファイルデータを保存するファイルシステムの重要なデータ構造にメスが入っています。その結果、改良された設計、優れたパフォーマンス、信頼性、機能性を備えたファイルシステムが誕生しました。&lt;br /&gt;
&lt;br /&gt;
ソース: [http://kernelnewbies.org/Ext4 Ext4 - Linux Kernel Newbies]&lt;br /&gt;
&lt;br /&gt;
== 新しく ext4 ファイルシステムを作成 ==&lt;br /&gt;
&lt;br /&gt;
パーティションをフォーマットするには次を実行:&lt;br /&gt;
&lt;br /&gt;
 # mkfs.ext4 /dev/&#039;&#039;partition&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Tip|オプションについては mkfs.ext4 の man ページを見て下さい。{{ic|/etc/mke2fs.conf}} を編集すればデフォルトのオプションを見たり設定できます。}}&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、{{Ic|mkfs.ext4}} はやや低めの比率の bytes-per-inode を使って、作成される inode の定量を計算します。容量が 750GB 以上のパーティションではこれだと inode 番号が大きくなりすぎて、ディスク容量の無駄になります。比率は {{Ic|-i}} オプションで直接設定することができます。1/6291456 なら 2TB のパーティションで 476928 の inode になります。&lt;br /&gt;
&lt;br /&gt;
==ext3 から ext4 に移行==&lt;br /&gt;
&lt;br /&gt;
===ext3 パーティションを変換せずに ext4 としてマウント===&lt;br /&gt;
&lt;br /&gt;
====理由====&lt;br /&gt;
&lt;br /&gt;
ext4 を完全に変換する案と ext3 をそのまま使用する案の折衷案として、既存の ext3 パーティションを ext4 としてマウントする方法があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;利点:&#039;&#039;&#039;&lt;br /&gt;
* 互換性 (ext3 としてファイルシステムをマウントできます) &amp;amp;ndash; ext4 のサポートがないオペレーティングシステムからもファイルシステムを読み込むことが可能です (例: Windows の ext3 ドライバー)&lt;br /&gt;
* パフォーマンスが向上 (ext4 パーティションに完全に変換するのよりは劣ります) &amp;amp;ndash; 詳しくは [http://kernelnewbies.org/Ext4 Ext4 - Linux Kernel Newbies] を見て下さい&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;欠点:&#039;&#039;&#039;&lt;br /&gt;
* ext4 の機能を全て活用することはできません (マルチブロックアロケーションや遅延アロケーションなどのディスクフォーマットに変更を与える機能は使えません)&lt;br /&gt;
&lt;br /&gt;
{{Note|ext4 が比較的新しいファイルシステムということ以外に (このこと自体をリスクと考えることもできます)、この方法を使用することで不利益になることは特にありません。}}&lt;br /&gt;
&lt;br /&gt;
====方法====&lt;br /&gt;
&lt;br /&gt;
# {{ic|/etc/fstab}} を編集して ext4 としてマウントしたいパーティションの &#039;type&#039; を ext3 から ext4 に変更してください。&lt;br /&gt;
# 変更したパーティションを再マウントします。&lt;br /&gt;
&lt;br /&gt;
===ext3 パーティションを ext4 に変換===&lt;br /&gt;
&lt;br /&gt;
====理由====&lt;br /&gt;
&lt;br /&gt;
ext4 の能力を活かすには、非可逆の変換をする必要があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;利点:&#039;&#039;&#039;&lt;br /&gt;
* パフォーマンスの向上と新機能 &amp;amp;ndash; 詳しくは [http://kernelnewbies.org/Ext4 Ext4 - Linux Kernel Newbies] を見て下さい&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;欠点:&#039;&#039;&#039;&lt;br /&gt;
* 一方通行 (ext4 パーティションを ext3 に&#039;ダウングレード&#039;することはできません)&lt;br /&gt;
&lt;br /&gt;
====方法====&lt;br /&gt;
&lt;br /&gt;
以下の手順は http://ext4.wiki.kernel.org/index.php/Ext4_Howto と https://bbs.archlinux.org/viewtopic.php?id=61602 から引用しています。&lt;br /&gt;
{{Warning|エクステントなどのオプションを有効にしないかぎり ext4 は ext3 と後方互換性があります。ただし、パーティションを完全に変換しない場合、ext4 を使用する利点は少なくなります。}}&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;[[バックアッププログラム|バックアップ]]&#039;&#039;&#039;を行なって下さい。ext4 に変換する ext3 パーティションに存在するデータを全てバックアップします。特に / (root) パーティションをバックアップする場合は、[http://clonezilla.org Clonezilla] が役に立ちます。&lt;br /&gt;
# {{ic|/etc/fstab}} を編集して ext4 に変換するパーティションの &#039;type&#039; を ext3 から ext4 に変換してください。&lt;br /&gt;
# (必要であれば) ライブメディアを起動します。{{Ic|e2fsprogs}} で変換を行う際はドライブがマウントされていない状態になっている必要があります。ドライブの root (/) パーティションを変換するときは、他のライブメディアから起動して変換するのが一番簡単です。&lt;br /&gt;
# パーティションがマウントされていないことを確認してください&lt;br /&gt;
# {{Ic|tune2fs -O extent,uninit_bg,dir_index /dev/sdxX}} を実行 ({{Ic|/dev/sdxX}} は変換するパーティションのパスに置き換えて下さい、例: {{Ic|/dev/sda1}})&lt;br /&gt;
# {{Ic|fsck -f /dev/sdxX}} を実行&lt;br /&gt;
# 推奨: パーティションをマウントして {{Ic|e4defrag -c -v /dev/sdxX}} を実行&lt;br /&gt;
# Arch Linux を再起動してください&lt;br /&gt;
&lt;br /&gt;
{{Note|The user &#039;&#039;&#039;MUST&#039;&#039;&#039; fsck the filesystem, or it will be unreadable! This fsck run is needed to return the filesystem to a consistent state. &#039;&#039;&#039;It WILL find checksum errors in the group descriptors&#039;&#039;&#039; -- this is expected. The &#039;-f&#039; parameter asks fsck to force checking even if the file system seems clean. The &#039;-p&#039; parameter asks fsck to &#039;automatically repair&#039; (otherwise, the user will be asked for input for each error).&lt;br /&gt;
You may need to run fsck -f rather than fsck -fp.}}&lt;br /&gt;
&lt;br /&gt;
{{Note|Even though the filesystem is now converted to ext4, all files that have been written before the conversion do not yet take advantage of the extent option of ext4, which will improve large file performance and reduce fragmentation and filesystem check time. In order to fully take advantage of ext4, all files would have to be rewritten on disk. Use e4defrag to take care of this problem.}}&lt;br /&gt;
{{Warning|1=root (/) パーティションを変換した場合、起動しようとした時にカーネルパニックが発生することがあります。カーネルパニックが起きる場合、&#039;fallback&#039; の initial ramdisk を使用して再起動して、&#039;default&#039; の initial ramdisk を再作成してください: {{Ic|mkinitcpio -p linux}}。}}&lt;br /&gt;
&lt;br /&gt;
== ファイルベースの暗号化を利用する == &lt;br /&gt;
&lt;br /&gt;
Linux 4.1以降、ext4はファイルベースの暗号化をサポートしています。暗号化用にマークされたディレクトリツリーでは、ファイルの内容、ファイル名、およびシンボリックリンクのターゲットはすべて暗号化されます。暗号化キーはカーネルキーリングに格納されます。機能の詳細、実装状態の概要、実用的な点、カーネル4.1でのテスト結果については、[http://blog.quarkslab.com/a-glimpse-of-ext4-filesystem-level-encryption.html Quarkslabのブログ]の項目も参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|CONFIG_EXT4_ENCRYPTION}}オプションが有効になっているカーネルを使用していて、{{Pkg|e2fsprogs}}パッケージが少なくともバージョン1.43以上であることを確認してください。&lt;br /&gt;
&lt;br /&gt;
次に、ファイルシステムが暗号化にサポートしているブロックサイズを使用していることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|# tune2fs -l /dev/&#039;&#039;device&#039;&#039; {{!}} grep &#039;Block size&#039;|&lt;br /&gt;
Block size:               4096&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|# getconf PAGE_SIZE|&lt;br /&gt;
4096&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これらの値が同じでない場合、ファイルシステムは暗号化をサポートしないので&#039;&#039;&#039;絶対にこれ以上先には進まないでください&#039;&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
次に、ファイルシステムの暗号化機能フラグを有効にします:&lt;br /&gt;
&lt;br /&gt;
 # tune2fs -O encrypt /dev/&#039;&#039;device&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Warning|暗号化機能フラグを有効にすると、4.1より古いカーネルはファイルシステムをマウントできなくなります。}}&lt;br /&gt;
&lt;br /&gt;
次に、暗号化するディレクトリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /encrypted&lt;br /&gt;
&lt;br /&gt;
暗号化は空のディレクトリにしか適用できないことに注意してください。暗号化設定(または「暗号化ポリシー」)は、新しいファイルとサブディレクトリによって継承されます。既存のファイルの暗号化はまだサポートされていません。&lt;br /&gt;
&lt;br /&gt;
今度は、新しい鍵を生成して鍵リングに追加します。キーリングをフラッシュする(再起動する)たびに、この手順を繰り返す必要があります:&lt;br /&gt;
&lt;br /&gt;
 # e4crypt add_key&lt;br /&gt;
 Enter passphrase (echo disabled): &lt;br /&gt;
 Added key with descriptor [f88747555a6115f5]&lt;br /&gt;
&lt;br /&gt;
{{Warning|パスフレーズを忘れた場合、ファイルを解読する方法はありません！パスフレーズを設定した後にパスフレーズを変更することはまだできません。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|パスフレーズに対する[[Wikipedia:Dictionary_attack|辞書攻撃]]を防ぐために、ランダムな [[Wikipedia:Salt_(cryptography)|ソルト]]が自動生成され、ext4ファイルシステムのスーパーブロックに保存されます。 パスフレーズ&#039;&#039;と&#039;&#039;ソルトの両方は、実際の暗号化キーを導出するために使用されます。暗号化を有効にした複数のext4ファイルシステムがマウントされている場合、{{ic|e4crypt add_key}}は実際にはファイルシステムごとに1つずつ複数のキーを追加します。どんなキーもどんなファイルシステムでも使うことができますが、どのファイルシステムでもそのファイルシステム自身のソルトを使っているキーだけを使うのが賢明でしょう。そうでない場合、ファイルシステムBがアンマウントされていると、ファイルシステムAのファイルを解読することができなくなります。あるいは、{{ic|-S}}オプションを{{ic|e4crypt add_key}}に使用して自分でソルトを指定することもできます。}}&lt;br /&gt;
&lt;br /&gt;
これであなたのキーの記述子が分かりました。 キーがセッションキーリングに含まれていることを確認します:&lt;br /&gt;
&lt;br /&gt;
 # keyctl show&lt;br /&gt;
 Session Keyring&lt;br /&gt;
 1021618178 --alswrv   1000  1000  keyring: _ses&lt;br /&gt;
  176349519 --alsw-v   1000  1000   \_ logon: ext4:f88747555a6115f5&lt;br /&gt;
&lt;br /&gt;
ほとんど完了しました。次に、ディレクトリに暗号化ポリシーを設定します(キーを割り当てます)。:&lt;br /&gt;
&lt;br /&gt;
 # e4crypt set_policy f88747555a6115f5 /encrypted&lt;br /&gt;
&lt;br /&gt;
以上です。キーリングにキーを追加せずにディレクトリにアクセスしようとすると、ファイル名とその内容は暗号化されたように見えます。&lt;br /&gt;
&lt;br /&gt;
==Tips and tricks==&lt;br /&gt;
===予約ブロックの削除===&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、ファイルシステムの 5% はフラグメントが起こらないように root ユーザーに予約されます。最近の大容量ディスクでは、パーティションを長期保存アーカイブとして使う場合、5%は必要以上に大きい値となります (詳しくは [http://www.redhat.com/archives/ext3-users/2009-January/msg00026.html このメール] を見て下さい)。パーティションが以下の条件を満たしているならば、ディスク容量を増やすために予約ブロックの割合を減らしても大抵は問題ありません:&lt;br /&gt;
&lt;br /&gt;
*パーティションがとても大きい (例えば 50GB 以上)&lt;br /&gt;
*長期保存用のアーカイブとして使っている、頻繁にファイルを作成したり削除することがない&lt;br /&gt;
&lt;br /&gt;
予約ブロックを削減するには tune2fs ユーティリティを使います。次のコマンドは {{ic|/dev/sdXY}} パーティションの予約ブロックの割合を 1.0% に設定します:&lt;br /&gt;
&lt;br /&gt;
 # tune2fs -m 1.0 /dev/sdXY&lt;br /&gt;
&lt;br /&gt;
findmnt(8) を使うことでデバイスの名前を確認できます:&lt;br /&gt;
&lt;br /&gt;
 $ findmnt &#039;&#039;/the/mount/point&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== E4rat ===&lt;br /&gt;
&lt;br /&gt;
[[E4rat]] は ext4 ファイルシステム用に作られたプリロードアプリケーションです。[[E4rat]] は起動時に開かれるファイルを記録して、アクセス時間が短縮されるようにパーティションにおけるファイルの配置を最適化します。そして起動時の初期段階でファイルを先読みします。[[E4rat]] は [[SSD]] を使っている場合は効果がありません。SSD のアクセス時間はハードディスクと比べると無視できるほどしかないためです。&lt;br /&gt;
&lt;br /&gt;
=== バリアとパフォーマンス ===&lt;br /&gt;
&lt;br /&gt;
カーネル 2.6.30 から、データの整合性を確保するのに役立つ変更によって ext4 のパフォーマンスは落ちています [http://www.phoronix.com/scan.php?page=article&amp;amp;item=ext4_then_now&amp;amp;num=1]。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;多くのファイルシステム (XFS, ext3, ext4, reiserfs) では、fsync やトランザクションコミットの際に書き込みバリアと呼ばれるものをディスクに送信します。書き込みバリアは書き込みの順序を守らせるための仕組みで (いくらか性能面への影響があります)、ディスクの書き込みキャッシュを安全に利用できるようにするためのものです。お使いのディスクにバッテリーが搭載されているような場合は、バリアを無効化することで性能を改善できる場合があります。&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;書き込みバリアの送信は、マウントオプションに {{Ic|1=barrier=0}} (ext3, ext4, reiserfs の場合) や {{ic|nobarrier}} (XFS) を設定することで無効化できます&#039;&#039; [http://manual.geeko.cpon.org/ja/cha.tuning.io.html]。&lt;br /&gt;
&lt;br /&gt;
{{Warning|バリアを無効化すると、電源が失われたときにキャッシュが正しく書き込まれるか保証がされなくなります。これによってファイルシステムの破壊やデータ損失が発生する場合があります。}}&lt;br /&gt;
&lt;br /&gt;
バリアをオフにしたいときは {{ic|/etc/fstab}} の変更したいファイルシステムに {{Ic|1=barrier=0}} オプションを追加してください。例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/fstab|2=&lt;br /&gt;
/dev/sda5    /    ext4    noatime,barrier=0    0    1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== メタデータチェックサムを有効化する ==&lt;br /&gt;
&lt;br /&gt;
新しいファイルシステムと既存のファイルシステムのメタデータチェックサムを有効にする場合は、いくつかのカーネルモジュールをロードする必要があります。&lt;br /&gt;
&lt;br /&gt;
CPUがSSE 4.2をサポートしている場合は、ハードウェアアクセラレーションされたCRC32Cアルゴリズムを有効にするために、{{Ic|crc32c_intel}}カーネルモジュールがロードされていることを確認してください。 そうでない場合には、{{Ic|crc32c_generic}}モジュールをロードする必要があります。&lt;br /&gt;
&lt;br /&gt;
また、対象がルートファイルシステムの場合は、{{Ic|/mkinitcpio.conf}}に{{Ic|crc32c_}}モジュールを追加する必要があります:&lt;br /&gt;
&lt;br /&gt;
    MODULES=&amp;quot;... crc32c_intel crc32c_generic&amp;quot;&lt;br /&gt;
&lt;br /&gt;
それが済んだら、initramfsを再生成します。 [[Mkinitcpio#Image creation and activation]]を参照してください。&lt;br /&gt;
&lt;br /&gt;
その後、次の2つのセクションで説明するように、メタデータチェックサムのサポートを有効にする準備が整いました。いずれの場合も、ファイルシステムをマウントしてはいけません。&lt;br /&gt;
&lt;br /&gt;
メタデータチェックサムの詳細については、次を参照&lt;br /&gt;
[https://ext4.wiki.kernel.org/index.php/Ext4_Metadata_Checksums ext4 wiki].&lt;br /&gt;
&lt;br /&gt;
=== 新しいファイルシステム ===&lt;br /&gt;
&lt;br /&gt;
新しいファイルシステム上でext4メタデータのチェックサムをサポートするには、{{Ic|e2fsprogs 1.43}}以上であることを確認してください。&lt;br /&gt;
&lt;br /&gt;
そうしたら以下のようにファイルシステムを作成します:&lt;br /&gt;
&lt;br /&gt;
 # mkfs.ext4 &#039;&#039;/dev/path/to/disk&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Ic|metadata_csum}}と{{Ic|64bit}}オプションはデフォルトで有効になります。&lt;br /&gt;
&lt;br /&gt;
ファイルシステムは通常の方法でマウントできます。&lt;br /&gt;
&lt;br /&gt;
=== 既存のファイルシステム ===&lt;br /&gt;
&lt;br /&gt;
既存のext4ファイルシステムでサポートを有効にするには、次のようにします。&lt;br /&gt;
&lt;br /&gt;
これは、パーティションをアンマウントして実行する必要があるため、{{Ic|/}}に対して有効化する場合には、USBライブディストリビューションで実行する必要があります。&lt;br /&gt;
&lt;br /&gt;
まず、以下を実行してパーティションをチェックし最適化する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # e2fsck -Df &#039;&#039;/dev/path/to/disk&#039;&#039;  &lt;br /&gt;
&lt;br /&gt;
その後、ファイルシステムを64bitに変換する必要があります:&lt;br /&gt;
&lt;br /&gt;
 # resize2fs -b &#039;&#039;/dev/path/to/disk&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
最後にチェックサムを追加できます&lt;br /&gt;
&lt;br /&gt;
 # tune2fs -O metadata_csum &#039;&#039;/dev/path/to/disk&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ファイルシステムは通常の方法でマウントできます。&lt;br /&gt;
&lt;br /&gt;
以下を実行して機能が有効になっているかどうかを確認できます:&lt;br /&gt;
&lt;br /&gt;
 # dumpe2fs &#039;&#039;/dev/path/to/disk&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== パフォーマンスへの影響 ===&lt;br /&gt;
&lt;br /&gt;
インテルのモジュールでは、[https://ext4.wiki.kernel.org/index.php/Ext4_Metadata_Checksums#Benchmarking このベンチマーク]に見られるように、一貫して一般的なものより10倍速、最大で20倍速いことに注意してください。.&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://ext4.wiki.kernel.org/ Official Ext4 wiki]&lt;br /&gt;
* [https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout Ext4 Disk Layout] described in its wiki&lt;br /&gt;
* [http://lwn.net/Articles/639427/ Ext4 Encryption] LWN article&lt;br /&gt;
* Kernel commits for ext4 encryption [https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=6162e4b0bedeb3dac2ba0a5e1b1f56db107d97ec] [https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=8663da2c0919896788321cd8a0016af08588c656]&lt;br /&gt;
* [http://e2fsprogs.sourceforge.net/e2fsprogs-release.html e2fsprogs Changelog]&lt;br /&gt;
* [https://ext4.wiki.kernel.org/index.php/Ext4_Metadata_Checksums Ext4 Metadata Checksums]&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Ext4&amp;diff=6430</id>
		<title>Ext4</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Ext4&amp;diff=6430"/>
		<updated>2016-11-22T00:08:35Z</updated>

		<summary type="html">&lt;p&gt;Fragment: 項目の編集・追加&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ファイルシステム]]&lt;br /&gt;
[[cs:Ext4]]&lt;br /&gt;
[[de:Ext4]]&lt;br /&gt;
[[en:Ext4]]&lt;br /&gt;
[[es:Ext4]]&lt;br /&gt;
[[fr:Ext4]]&lt;br /&gt;
[[it:Ext4]]&lt;br /&gt;
[[ru:Ext4]]&lt;br /&gt;
[[tr:Ext4]]&lt;br /&gt;
[[zh-CN:Ext4]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|ファイルシステム}}&lt;br /&gt;
{{Related|Ext3}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
Ext4 は Linux で一番よく使われているファイルシステム、Ext3 の発展版です。多くの点で、Ext3 から Ext4 になって Ext2 から　Ext3 に進んだときよりも大きな改善がされています。Ext3 では Ext2 にジャーナリングを追加したのがほとんどでしたが、Ext4 ではファイルデータを保存するファイルシステムの重要なデータ構造にメスが入っています。その結果、改良された設計、優れたパフォーマンス、信頼性、機能性を備えたファイルシステムが誕生しました。&lt;br /&gt;
&lt;br /&gt;
ソース: [http://kernelnewbies.org/Ext4 Ext4 - Linux Kernel Newbies]&lt;br /&gt;
&lt;br /&gt;
== 新しく ext4 ファイルシステムを作成 ==&lt;br /&gt;
&lt;br /&gt;
パーティションをフォーマットするには次を実行:&lt;br /&gt;
&lt;br /&gt;
 # mkfs.ext4 /dev/&#039;&#039;partition&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Tip|オプションについては mkfs.ext4 の man ページを見て下さい。{{ic|/etc/mke2fs.conf}} を編集すればデフォルトのオプションを見たり設定できます。}}&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、{{Ic|mkfs.ext4}} はやや低めの比率の bytes-per-inode を使って、作成される inode の定量を計算します。容量が 750GB 以上のパーティションではこれだと inode 番号が大きくなりすぎて、ディスク容量の無駄になります。比率は {{Ic|-i}} オプションで直接設定することができます。1/6291456 なら 2TB のパーティションで 476928 の inode になります。&lt;br /&gt;
&lt;br /&gt;
==ext3 から ext4 に移行==&lt;br /&gt;
&lt;br /&gt;
===ext3 パーティションを変換せずに ext4 としてマウント===&lt;br /&gt;
&lt;br /&gt;
====理由====&lt;br /&gt;
&lt;br /&gt;
ext4 を完全に変換する案と ext3 をそのまま使用する案の折衷案として、既存の ext3 パーティションを ext4 としてマウントする方法があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;利点:&#039;&#039;&#039;&lt;br /&gt;
* 互換性 (ext3 としてファイルシステムをマウントできます) &amp;amp;ndash; ext4 のサポートがないオペレーティングシステムからもファイルシステムを読み込むことが可能です (例: Windows の ext3 ドライバー)&lt;br /&gt;
* パフォーマンスが向上 (ext4 パーティションに完全に変換するのよりは劣ります) &amp;amp;ndash; 詳しくは [http://kernelnewbies.org/Ext4 Ext4 - Linux Kernel Newbies] を見て下さい&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;欠点:&#039;&#039;&#039;&lt;br /&gt;
* ext4 の機能を全て活用することはできません (マルチブロックアロケーションや遅延アロケーションなどのディスクフォーマットに変更を与える機能は使えません)&lt;br /&gt;
&lt;br /&gt;
{{Note|ext4 が比較的新しいファイルシステムということ以外に (このこと自体をリスクと考えることもできます)、この方法を使用することで不利益になることは特にありません。}}&lt;br /&gt;
&lt;br /&gt;
====方法====&lt;br /&gt;
&lt;br /&gt;
# {{ic|/etc/fstab}} を編集して ext4 としてマウントしたいパーティションの &#039;type&#039; を ext3 から ext4 に変更してください。&lt;br /&gt;
# 変更したパーティションを再マウントします。&lt;br /&gt;
&lt;br /&gt;
===ext3 パーティションを ext4 に変換===&lt;br /&gt;
&lt;br /&gt;
====理由====&lt;br /&gt;
&lt;br /&gt;
ext4 の能力を活かすには、非可逆の変換をする必要があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;利点:&#039;&#039;&#039;&lt;br /&gt;
* パフォーマンスの向上と新機能 &amp;amp;ndash; 詳しくは [http://kernelnewbies.org/Ext4 Ext4 - Linux Kernel Newbies] を見て下さい&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;欠点:&#039;&#039;&#039;&lt;br /&gt;
* 一方通行 (ext4 パーティションを ext3 に&#039;ダウングレード&#039;することはできません)&lt;br /&gt;
&lt;br /&gt;
====方法====&lt;br /&gt;
&lt;br /&gt;
以下の手順は http://ext4.wiki.kernel.org/index.php/Ext4_Howto と https://bbs.archlinux.org/viewtopic.php?id=61602 から引用しています。&lt;br /&gt;
{{Warning|エクステントなどのオプションを有効にしないかぎり ext4 は ext3 と後方互換性があります。ただし、パーティションを完全に変換しない場合、ext4 を使用する利点は少なくなります。}}&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;[[バックアッププログラム|バックアップ]]&#039;&#039;&#039;を行なって下さい。ext4 に変換する ext3 パーティションに存在するデータを全てバックアップします。特に / (root) パーティションをバックアップする場合は、[http://clonezilla.org Clonezilla] が役に立ちます。&lt;br /&gt;
# {{ic|/etc/fstab}} を編集して ext4 に変換するパーティションの &#039;type&#039; を ext3 から ext4 に変換してください。&lt;br /&gt;
# (必要であれば) ライブメディアを起動します。{{Ic|e2fsprogs}} で変換を行う際はドライブがマウントされていない状態になっている必要があります。ドライブの root (/) パーティションを変換するときは、他のライブメディアから起動して変換するのが一番簡単です。&lt;br /&gt;
# パーティションがマウントされていないことを確認してください&lt;br /&gt;
# {{Ic|tune2fs -O extent,uninit_bg,dir_index /dev/sdxX}} を実行 ({{Ic|/dev/sdxX}} は変換するパーティションのパスに置き換えて下さい、例: {{Ic|/dev/sda1}})&lt;br /&gt;
# {{Ic|fsck -f /dev/sdxX}} を実行&lt;br /&gt;
# 推奨: パーティションをマウントして {{Ic|e4defrag -c -v /dev/sdxX}} を実行&lt;br /&gt;
# Arch Linux を再起動してください&lt;br /&gt;
&lt;br /&gt;
{{Note|The user &#039;&#039;&#039;MUST&#039;&#039;&#039; fsck the filesystem, or it will be unreadable! This fsck run is needed to return the filesystem to a consistent state. &#039;&#039;&#039;It WILL find checksum errors in the group descriptors&#039;&#039;&#039; -- this is expected. The &#039;-f&#039; parameter asks fsck to force checking even if the file system seems clean. The &#039;-p&#039; parameter asks fsck to &#039;automatically repair&#039; (otherwise, the user will be asked for input for each error).&lt;br /&gt;
You may need to run fsck -f rather than fsck -fp.}}&lt;br /&gt;
&lt;br /&gt;
{{Note|Even though the filesystem is now converted to ext4, all files that have been written before the conversion do not yet take advantage of the extent option of ext4, which will improve large file performance and reduce fragmentation and filesystem check time. In order to fully take advantage of ext4, all files would have to be rewritten on disk. Use e4defrag to take care of this problem.}}&lt;br /&gt;
{{Warning|1=root (/) パーティションを変換した場合、起動しようとした時にカーネルパニックが発生することがあります。カーネルパニックが起きる場合、&#039;fallback&#039; の initial ramdisk を使用して再起動して、&#039;default&#039; の initial ramdisk を再作成してください: {{Ic|mkinitcpio -p linux}}。}}&lt;br /&gt;
&lt;br /&gt;
== ファイルベースの暗号化を利用する == &lt;br /&gt;
&lt;br /&gt;
Linux 4.1以降、ext4はファイルベースの暗号化をサポートしています。暗号化用にマークされたディレクトリツリーでは、ファイルの内容、ファイル名、およびシンボリックリンクのターゲットはすべて暗号化されます。暗号化キーはカーネルキーリングに格納されます。機能の詳細、実装状態の概要、実用的な点、カーネル4.1でのテスト結果については、[http://blog.quarkslab.com/a-glimpse-of-ext4-filesystem-level-encryption.html Quarkslabのブログ]の項目も参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|CONFIG_EXT4_ENCRYPTION}}オプションが有効になっているカーネルを使用していて、{{Pkg|e2fsprogs}}パッケージが少なくともバージョン1.43以上であることを確認してください。&lt;br /&gt;
&lt;br /&gt;
次に、ファイルシステムが暗号化にサポートしているブロックサイズを使用していることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|# tune2fs -l /dev/&#039;&#039;device&#039;&#039; {{!}} grep &#039;Block size&#039;|&lt;br /&gt;
Block size:               4096&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|# getconf PAGE_SIZE|&lt;br /&gt;
4096&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これらの値が同じでない場合、ファイルシステムは暗号化をサポートしないので&#039;&#039;&#039;絶対にこれ以上先には進まないでください&#039;&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
次に、ファイルシステムの暗号化機能フラグを有効にします:&lt;br /&gt;
&lt;br /&gt;
 # tune2fs -O encrypt /dev/&#039;&#039;device&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Warning|暗号化機能フラグを有効にすると、4.1より古いカーネルはファイルシステムをマウントできなくなります。}}&lt;br /&gt;
&lt;br /&gt;
次に、暗号化するディレクトリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /encrypted&lt;br /&gt;
&lt;br /&gt;
暗号化は空のディレクトリにしか適用できないことに注意してください。暗号化設定(または「暗号化ポリシー」)は、新しいファイルとサブディレクトリによって継承されます。既存のファイルの暗号化はまだサポートされていません。&lt;br /&gt;
&lt;br /&gt;
今度は、新しい鍵を生成して鍵リングに追加します。キーリングをフラッシュする(再起動する)たびに、この手順を繰り返す必要があります:&lt;br /&gt;
&lt;br /&gt;
 # e4crypt add_key&lt;br /&gt;
 Enter passphrase (echo disabled): &lt;br /&gt;
 Added key with descriptor [f88747555a6115f5]&lt;br /&gt;
&lt;br /&gt;
{{Warning|パスフレーズを忘れた場合、ファイルを解読する方法はありません！パスフレーズを設定した後にパスフレーズを変更することはまだできません。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|パスフレーズに対する[[Wikipedia:Dictionary_attack|辞書攻撃]]を防ぐために、ランダムな [[Wikipedia:Salt_(cryptography)|ソルト]]が自動生成され、ext4ファイルシステムのスーパーブロックに保存されます。 パスフレーズ&#039;&#039;と&#039;&#039;ソルトの両方は、実際の暗号化キーを導出するために使用されます。暗号化を有効にした複数のext4ファイルシステムがマウントされている場合、{{ic|e4crypt add_key}}は実際にはファイルシステムごとに1つずつ複数のキーを追加します。どんなキーもどんなファイルシステムでも使うことができますが、どのファイルシステムでもそのファイルシステム自身のソルトを使っているキーだけを使うのが賢明でしょう。そうでない場合、ファイルシステムBがアンマウントされていると、ファイルシステムAのファイルを解読することができなくなります。あるいは、{{ic|-S}}オプションを{{ic|e4crypt add_key}}に使用して自分でソルトを指定することもできます。}}&lt;br /&gt;
&lt;br /&gt;
これであなたのキーの記述子が分かりました。 キーがセッションキーリングに含まれていることを確認します:&lt;br /&gt;
&lt;br /&gt;
 # keyctl show&lt;br /&gt;
 Session Keyring&lt;br /&gt;
 1021618178 --alswrv   1000  1000  keyring: _ses&lt;br /&gt;
  176349519 --alsw-v   1000  1000   \_ logon: ext4:f88747555a6115f5&lt;br /&gt;
&lt;br /&gt;
ほとんど完了しました。次に、ディレクトリに暗号化ポリシーを設定します(キーを割り当てます)。:&lt;br /&gt;
&lt;br /&gt;
 # e4crypt set_policy f88747555a6115f5 /encrypted&lt;br /&gt;
&lt;br /&gt;
以上です。キーリングにキーを追加せずにディレクトリにアクセスしようとすると、ファイル名とその内容は暗号化されたように見えます。&lt;br /&gt;
&lt;br /&gt;
==Tips and tricks==&lt;br /&gt;
===予約ブロックの削除===&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、ファイルシステムの 5% はフラグメントが起こらないように root ユーザーに予約されます。最近の大容量ディスクでは、パーティションを長期保存アーカイブとして使う場合、5%は必要以上に大きい値となります (詳しくは [http://www.redhat.com/archives/ext3-users/2009-January/msg00026.html このメール] を見て下さい)。パーティションが以下の条件を満たしているならば、ディスク容量を増やすために予約ブロックの割合を減らしても大抵は問題ありません:&lt;br /&gt;
&lt;br /&gt;
*パーティションがとても大きい (例えば 50GB 以上)&lt;br /&gt;
*長期保存用のアーカイブとして使っている、頻繁にファイルを作成したり削除することがない&lt;br /&gt;
&lt;br /&gt;
予約ブロックを削減するには tune2fs ユーティリティを使います。次のコマンドは {{ic|/dev/sdXY}} パーティションの予約ブロックの割合を 1.0% に設定します:&lt;br /&gt;
&lt;br /&gt;
 # tune2fs -m 1.0 /dev/sdXY&lt;br /&gt;
&lt;br /&gt;
findmnt(8) を使うことでデバイスの名前を確認できます:&lt;br /&gt;
&lt;br /&gt;
 $ findmnt &#039;&#039;/the/mount/point&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== E4rat ===&lt;br /&gt;
&lt;br /&gt;
[[E4rat]] は ext4 ファイルシステム用に作られたプリロードアプリケーションです。[[E4rat]] は起動時に開かれるファイルを記録して、アクセス時間が短縮されるようにパーティションにおけるファイルの配置を最適化します。そして起動時の初期段階でファイルを先読みします。[[E4rat]] は [[SSD]] を使っている場合は効果がありません。SSD のアクセス時間はハードディスクと比べると無視できるほどしかないためです。&lt;br /&gt;
&lt;br /&gt;
=== バリアとパフォーマンス ===&lt;br /&gt;
&lt;br /&gt;
カーネル 2.6.30 から、データの整合性を確保するのに役立つ変更によって ext4 のパフォーマンスは落ちています [http://www.phoronix.com/scan.php?page=article&amp;amp;item=ext4_then_now&amp;amp;num=1]。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;多くのファイルシステム (XFS, ext3, ext4, reiserfs) では、fsync やトランザクションコミットの際に書き込みバリアと呼ばれるものをディスクに送信します。書き込みバリアは書き込みの順序を守らせるための仕組みで (いくらか性能面への影響があります)、ディスクの書き込みキャッシュを安全に利用できるようにするためのものです。お使いのディスクにバッテリーが搭載されているような場合は、バリアを無効化することで性能を改善できる場合があります。&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;書き込みバリアの送信は、マウントオプションに {{Ic|1=barrier=0}} (ext3, ext4, reiserfs の場合) や {{ic|nobarrier}} (XFS) を設定することで無効化できます&#039;&#039; [http://manual.geeko.cpon.org/ja/cha.tuning.io.html]。&lt;br /&gt;
&lt;br /&gt;
{{Warning|バリアを無効化すると、電源が失われたときにキャッシュが正しく書き込まれるか保証がされなくなります。これによってファイルシステムの破壊やデータ損失が発生する場合があります。}}&lt;br /&gt;
&lt;br /&gt;
バリアをオフにしたいときは {{ic|/etc/fstab}} の変更したいファイルシステムに {{Ic|1=barrier=0}} オプションを追加してください。例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/fstab|2=&lt;br /&gt;
/dev/sda5    /    ext4    noatime,barrier=0    0    1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== メタデータチェックサムを有効化する ==&lt;br /&gt;
&lt;br /&gt;
In both cases of enabling metadata checksums for new and existing filesystems, you will need to load some kernel modules.&lt;br /&gt;
&lt;br /&gt;
If your CPU supports SSE 4.2, make sure the {{Ic|crc32c_intel}} kernel module is loaded in order to enable the hardware accelerated CRC32C algorithm. If not you will need to load the {{Ic|crc32c_generic}} module.&lt;br /&gt;
&lt;br /&gt;
If this is the root file-system your {{Ic|crc32c_}} module might need to be added to {{Ic|/etc/mkinitcpio.conf}}:&lt;br /&gt;
&lt;br /&gt;
    MODULES=&amp;quot;... crc32c_intel crc32c_generic&amp;quot;&lt;br /&gt;
&lt;br /&gt;
And then regenerate the initramfs. See [[Mkinitcpio#Image creation and activation]].&lt;br /&gt;
&lt;br /&gt;
After this, you are ready to enable support for metadata checksums as described in the following two sections. In both cases the file system must not be mounted.&lt;br /&gt;
&lt;br /&gt;
More about metadata checksums can be read on the [https://ext4.wiki.kernel.org/index.php/Ext4_Metadata_Checksums ext4 wiki].&lt;br /&gt;
&lt;br /&gt;
=== New filesystem ===&lt;br /&gt;
&lt;br /&gt;
To enable support for ext4 metadata checksums on a new file system make sure that you have {{Ic|e2fsprogs 1.43}} or newer and simply do a:&lt;br /&gt;
&lt;br /&gt;
 # mkfs.ext4 &#039;&#039;/dev/path/to/disk&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The {{Ic |metadata_csum}} and {{Ic|64bit}} options will be enabled by default. &lt;br /&gt;
&lt;br /&gt;
The file-system can then be mounted as usual.&lt;br /&gt;
&lt;br /&gt;
=== Existing filesystem ===&lt;br /&gt;
&lt;br /&gt;
To enable support on an existing ext4 file system do the following.&lt;br /&gt;
&lt;br /&gt;
This needs to be done with the partition unmounted, so if you want to convert the root, you&#039;ll need to run off an USB live distro.&lt;br /&gt;
&lt;br /&gt;
First the partition needs to be checked and optimized using:&lt;br /&gt;
&lt;br /&gt;
 # e2fsck -Df &#039;&#039;/dev/path/to/disk&#039;&#039;  &lt;br /&gt;
&lt;br /&gt;
Then the file-system needs to be converted to 64bit:&lt;br /&gt;
&lt;br /&gt;
 # resize2fs -b &#039;&#039;/dev/path/to/disk&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Finally checksums can be added&lt;br /&gt;
&lt;br /&gt;
 # tune2fs -O metadata_csum &#039;&#039;/dev/path/to/disk&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The file-system can then be mounted as usual.&lt;br /&gt;
&lt;br /&gt;
You can check whether the features were successfully enabled by running:&lt;br /&gt;
&lt;br /&gt;
 # dumpe2fs &#039;&#039;/dev/path/to/disk&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Impact on performance ===&lt;br /&gt;
&lt;br /&gt;
Keep in mind that the intel module consistently performs 10x faster than the generic one, peaking at 20x faster as can be seen in [https://ext4.wiki.kernel.org/index.php/Ext4_Metadata_Checksums#Benchmarking this benchmark].&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://ext4.wiki.kernel.org/ Official Ext4 wiki]&lt;br /&gt;
* [https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout Ext4 Disk Layout] described in its wiki&lt;br /&gt;
* [http://lwn.net/Articles/639427/ Ext4 Encryption] LWN article&lt;br /&gt;
* Kernel commits for ext4 encryption [https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=6162e4b0bedeb3dac2ba0a5e1b1f56db107d97ec] [https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=8663da2c0919896788321cd8a0016af08588c656]&lt;br /&gt;
* [http://e2fsprogs.sourceforge.net/e2fsprogs-release.html e2fsprogs Changelog]&lt;br /&gt;
* [https://ext4.wiki.kernel.org/index.php/Ext4_Metadata_Checksums Ext4 Metadata Checksums]&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Ext4&amp;diff=6429</id>
		<title>Ext4</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Ext4&amp;diff=6429"/>
		<updated>2016-11-22T00:03:30Z</updated>

		<summary type="html">&lt;p&gt;Fragment: /* ファイルベースの暗号化を利用する */ 翻訳&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ファイルシステム]]&lt;br /&gt;
[[cs:Ext4]]&lt;br /&gt;
[[de:Ext4]]&lt;br /&gt;
[[en:Ext4]]&lt;br /&gt;
[[es:Ext4]]&lt;br /&gt;
[[fr:Ext4]]&lt;br /&gt;
[[it:Ext4]]&lt;br /&gt;
[[ru:Ext4]]&lt;br /&gt;
[[tr:Ext4]]&lt;br /&gt;
[[zh-CN:Ext4]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|ファイルシステム}}&lt;br /&gt;
{{Related|Ext3}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
Ext4 は Linux で一番よく使われているファイルシステム、Ext3 の発展版です。多くの点で、Ext3 から Ext4 になって Ext2 から　Ext3 に進んだときよりも大きな改善がされています。Ext3 では Ext2 にジャーナリングを追加したのがほとんどでしたが、Ext4 ではファイルデータを保存するファイルシステムの重要なデータ構造にメスが入っています。その結果、改良された設計、優れたパフォーマンス、信頼性、機能性を備えたファイルシステムが誕生しました。&lt;br /&gt;
&lt;br /&gt;
ソース: [http://kernelnewbies.org/Ext4 Ext4 - Linux Kernel Newbies]&lt;br /&gt;
&lt;br /&gt;
== 新しく ext4 ファイルシステムを作成 ==&lt;br /&gt;
&lt;br /&gt;
パーティションをフォーマットするには次を実行:&lt;br /&gt;
&lt;br /&gt;
 # mkfs.ext4 /dev/&#039;&#039;partition&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Tip|オプションについては mkfs.ext4 の man ページを見て下さい。{{ic|/etc/mke2fs.conf}} を編集すればデフォルトのオプションを見たり設定できます。}}&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、{{Ic|mkfs.ext4}} はやや低めの比率の bytes-per-inode を使って、作成される inode の定量を計算します。容量が 750GB 以上のパーティションではこれだと inode 番号が大きくなりすぎて、ディスク容量の無駄になります。比率は {{Ic|-i}} オプションで直接設定することができます。1/6291456 なら 2TB のパーティションで 476928 の inode になります。&lt;br /&gt;
&lt;br /&gt;
==ext3 から ext4 に移行==&lt;br /&gt;
&lt;br /&gt;
===ext3 パーティションを変換せずに ext4 としてマウント===&lt;br /&gt;
&lt;br /&gt;
====理由====&lt;br /&gt;
&lt;br /&gt;
ext4 を完全に変換する案と ext3 をそのまま使用する案の折衷案として、既存の ext3 パーティションを ext4 としてマウントする方法があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;利点:&#039;&#039;&#039;&lt;br /&gt;
* 互換性 (ext3 としてファイルシステムをマウントできます) &amp;amp;ndash; ext4 のサポートがないオペレーティングシステムからもファイルシステムを読み込むことが可能です (例: Windows の ext3 ドライバー)&lt;br /&gt;
* パフォーマンスが向上 (ext4 パーティションに完全に変換するのよりは劣ります) &amp;amp;ndash; 詳しくは [http://kernelnewbies.org/Ext4 Ext4 - Linux Kernel Newbies] を見て下さい&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;欠点:&#039;&#039;&#039;&lt;br /&gt;
* ext4 の機能を全て活用することはできません (マルチブロックアロケーションや遅延アロケーションなどのディスクフォーマットに変更を与える機能は使えません)&lt;br /&gt;
&lt;br /&gt;
{{Note|ext4 が比較的新しいファイルシステムということ以外に (このこと自体をリスクと考えることもできます)、この方法を使用することで不利益になることは特にありません。}}&lt;br /&gt;
&lt;br /&gt;
====方法====&lt;br /&gt;
&lt;br /&gt;
# {{ic|/etc/fstab}} を編集して ext4 としてマウントしたいパーティションの &#039;type&#039; を ext3 から ext4 に変更してください。&lt;br /&gt;
# 変更したパーティションを再マウントします。&lt;br /&gt;
&lt;br /&gt;
===ext3 パーティションを ext4 に変換===&lt;br /&gt;
&lt;br /&gt;
====理由====&lt;br /&gt;
&lt;br /&gt;
ext4 の能力を活かすには、非可逆の変換をする必要があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;利点:&#039;&#039;&#039;&lt;br /&gt;
* パフォーマンスの向上と新機能 &amp;amp;ndash; 詳しくは [http://kernelnewbies.org/Ext4 Ext4 - Linux Kernel Newbies] を見て下さい&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;欠点:&#039;&#039;&#039;&lt;br /&gt;
* 一方通行 (ext4 パーティションを ext3 に&#039;ダウングレード&#039;することはできません)&lt;br /&gt;
&lt;br /&gt;
====方法====&lt;br /&gt;
&lt;br /&gt;
以下の手順は http://ext4.wiki.kernel.org/index.php/Ext4_Howto と https://bbs.archlinux.org/viewtopic.php?id=61602 から引用しています。&lt;br /&gt;
{{Warning|エクステントなどのオプションを有効にしないかぎり ext4 は ext3 と後方互換性があります。ただし、パーティションを完全に変換しない場合、ext4 を使用する利点は少なくなります。}}&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;[[バックアッププログラム|バックアップ]]&#039;&#039;&#039;を行なって下さい。ext4 に変換する ext3 パーティションに存在するデータを全てバックアップします。特に / (root) パーティションをバックアップする場合は、[http://clonezilla.org Clonezilla] が役に立ちます。&lt;br /&gt;
# {{ic|/etc/fstab}} を編集して ext4 に変換するパーティションの &#039;type&#039; を ext3 から ext4 に変換してください。&lt;br /&gt;
# (必要であれば) ライブメディアを起動します。{{Ic|e2fsprogs}} で変換を行う際はドライブがマウントされていない状態になっている必要があります。ドライブの root (/) パーティションを変換するときは、他のライブメディアから起動して変換するのが一番簡単です。&lt;br /&gt;
# パーティションがマウントされていないことを確認してください&lt;br /&gt;
# {{Ic|tune2fs -O extent,uninit_bg,dir_index /dev/sdxX}} を実行 ({{Ic|/dev/sdxX}} は変換するパーティションのパスに置き換えて下さい、例: {{Ic|/dev/sda1}})&lt;br /&gt;
# {{Ic|fsck -f /dev/sdxX}} を実行&lt;br /&gt;
# 推奨: パーティションをマウントして {{Ic|e4defrag -c -v /dev/sdxX}} を実行&lt;br /&gt;
# Arch Linux を再起動してください&lt;br /&gt;
&lt;br /&gt;
{{Note|The user &#039;&#039;&#039;MUST&#039;&#039;&#039; fsck the filesystem, or it will be unreadable! This fsck run is needed to return the filesystem to a consistent state. &#039;&#039;&#039;It WILL find checksum errors in the group descriptors&#039;&#039;&#039; -- this is expected. The &#039;-f&#039; parameter asks fsck to force checking even if the file system seems clean. The &#039;-p&#039; parameter asks fsck to &#039;automatically repair&#039; (otherwise, the user will be asked for input for each error).&lt;br /&gt;
You may need to run fsck -f rather than fsck -fp.}}&lt;br /&gt;
&lt;br /&gt;
{{Note|Even though the filesystem is now converted to ext4, all files that have been written before the conversion do not yet take advantage of the extent option of ext4, which will improve large file performance and reduce fragmentation and filesystem check time. In order to fully take advantage of ext4, all files would have to be rewritten on disk. Use e4defrag to take care of this problem.}}&lt;br /&gt;
{{Warning|1=root (/) パーティションを変換した場合、起動しようとした時にカーネルパニックが発生することがあります。カーネルパニックが起きる場合、&#039;fallback&#039; の initial ramdisk を使用して再起動して、&#039;default&#039; の initial ramdisk を再作成してください: {{Ic|mkinitcpio -p linux}}。}}&lt;br /&gt;
&lt;br /&gt;
== ファイルベースの暗号化を利用する == &lt;br /&gt;
&lt;br /&gt;
Linux 4.1以降、ext4はファイルベースの暗号化をサポートしています。暗号化用にマークされたディレクトリツリーでは、ファイルの内容、ファイル名、およびシンボリックリンクのターゲットはすべて暗号化されます。暗号化キーはカーネルキーリングに格納されます。機能の詳細、実装状態の概要、実用的な点、カーネル4.1でのテスト結果については、[http://blog.quarkslab.com/a-glimpse-of-ext4-filesystem-level-encryption.html Quarkslabのブログ]の項目も参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|CONFIG_EXT4_ENCRYPTION}}オプションが有効になっているカーネルを使用していて、{{Pkg|e2fsprogs}}パッケージが少なくともバージョン1.43以上であることを確認してください。&lt;br /&gt;
&lt;br /&gt;
次に、ファイルシステムが暗号化にサポートしているブロックサイズを使用していることを確認します:&lt;br /&gt;
&lt;br /&gt;
{{hc|# tune2fs -l /dev/&#039;&#039;device&#039;&#039; {{!}} grep &#039;Block size&#039;|&lt;br /&gt;
Block size:               4096&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|# getconf PAGE_SIZE|&lt;br /&gt;
4096&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これらの値が同じでない場合、ファイルシステムは暗号化をサポートしないので&#039;&#039;&#039;絶対にこれ以上先には進まないでください&#039;&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
次に、ファイルシステムの暗号化機能フラグを有効にします:&lt;br /&gt;
&lt;br /&gt;
 # tune2fs -O encrypt /dev/&#039;&#039;device&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Warning|暗号化機能フラグを有効にすると、4.1より古いカーネルはファイルシステムをマウントできなくなります。}}&lt;br /&gt;
&lt;br /&gt;
次に、暗号化するディレクトリを作成します:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /encrypted&lt;br /&gt;
&lt;br /&gt;
暗号化は空のディレクトリにしか適用できないことに注意してください。暗号化設定(または「暗号化ポリシー」)は、新しいファイルとサブディレクトリによって継承されます。既存のファイルの暗号化はまだサポートされていません。&lt;br /&gt;
&lt;br /&gt;
今度は、新しい鍵を生成して鍵リングに追加します。キーリングをフラッシュする(再起動する)たびに、この手順を繰り返す必要があります:&lt;br /&gt;
&lt;br /&gt;
 # e4crypt add_key&lt;br /&gt;
 Enter passphrase (echo disabled): &lt;br /&gt;
 Added key with descriptor [f88747555a6115f5]&lt;br /&gt;
&lt;br /&gt;
{{Warning|パスフレーズを忘れた場合、ファイルを解読する方法はありません！パスフレーズを設定した後にパスフレーズを変更することはまだできません。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|パスフレーズに対する[[Wikipedia:Dictionary_attack|辞書攻撃]]を防ぐために、ランダムな [[Wikipedia:Salt_(cryptography)|ソルト]]が自動生成され、ext4ファイルシステムのスーパーブロックに保存されます。 パスフレーズ&#039;&#039;と&#039;&#039;ソルトの両方は、実際の暗号化キーを導出するために使用されます。暗号化を有効にした複数のext4ファイルシステムがマウントされている場合、{{ic|e4crypt add_key}}は実際にはファイルシステムごとに1つずつ複数のキーを追加します。どんなキーもどんなファイルシステムでも使うことができますが、どのファイルシステムでもそのファイルシステム自身のソルトを使っているキーだけを使うのが賢明でしょう。そうでない場合、ファイルシステムBがアンマウントされていると、ファイルシステムAのファイルを解読することができなくなります。あるいは、{{ic|-S}}オプションを{{ic|e4crypt add_key}}に使用して自分でソルトを指定することもできます。}}&lt;br /&gt;
&lt;br /&gt;
これであなたのキーの記述子が分かりました。 キーがセッションキーリングに含まれていることを確認します:&lt;br /&gt;
&lt;br /&gt;
 # keyctl show&lt;br /&gt;
 Session Keyring&lt;br /&gt;
 1021618178 --alswrv   1000  1000  keyring: _ses&lt;br /&gt;
  176349519 --alsw-v   1000  1000   \_ logon: ext4:f88747555a6115f5&lt;br /&gt;
&lt;br /&gt;
ほとんど完了しました。次に、ディレクトリに暗号化ポリシーを設定します(キーを割り当てます)。:&lt;br /&gt;
&lt;br /&gt;
 # e4crypt set_policy f88747555a6115f5 /encrypted&lt;br /&gt;
&lt;br /&gt;
以上です。キーリングにキーを追加せずにディレクトリにアクセスしようとすると、ファイル名とその内容は暗号化されたように見えます。&lt;br /&gt;
&lt;br /&gt;
==Tips and tricks==&lt;br /&gt;
===予約ブロックの削除===&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、ファイルシステムの 5% はフラグメントが起こらないように root ユーザーに予約されます。最近の大容量ディスクでは、パーティションを長期保存アーカイブとして使う場合、5%は必要以上に大きい値となります (詳しくは [http://www.redhat.com/archives/ext3-users/2009-January/msg00026.html このメール] を見て下さい)。パーティションが以下の条件を満たしているならば、ディスク容量を増やすために予約ブロックの割合を減らしても大抵は問題ありません:&lt;br /&gt;
&lt;br /&gt;
*パーティションがとても大きい (例えば 50GB 以上)&lt;br /&gt;
*長期保存用のアーカイブとして使っている、頻繁にファイルを作成したり削除することがない&lt;br /&gt;
&lt;br /&gt;
予約ブロックを削減するには tune2fs ユーティリティを使います。次のコマンドは {{ic|/dev/sdXY}} パーティションの予約ブロックの割合を 1.0% に設定します:&lt;br /&gt;
&lt;br /&gt;
 # tune2fs -m 1.0 /dev/sdXY&lt;br /&gt;
&lt;br /&gt;
findmnt(8) を使うことでデバイスの名前を確認できます:&lt;br /&gt;
&lt;br /&gt;
 $ findmnt &#039;&#039;/the/mount/point&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== E4rat ===&lt;br /&gt;
&lt;br /&gt;
[[E4rat]] は ext4 ファイルシステム用に作られたプリロードアプリケーションです。[[E4rat]] は起動時に開かれるファイルを記録して、アクセス時間が短縮されるようにパーティションにおけるファイルの配置を最適化します。そして起動時の初期段階でファイルを先読みします。[[E4rat]] は [[SSD]] を使っている場合は効果がありません。SSD のアクセス時間はハードディスクと比べると無視できるほどしかないためです。&lt;br /&gt;
&lt;br /&gt;
==トラブルシューティング==&lt;br /&gt;
=== バリアとパフォーマンス ===&lt;br /&gt;
&lt;br /&gt;
カーネル 2.6.30 から、データの整合性を確保するのに役立つ変更によって ext4 のパフォーマンスは落ちています [http://www.phoronix.com/scan.php?page=article&amp;amp;item=ext4_then_now&amp;amp;num=1]。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;多くのファイルシステム (XFS, ext3, ext4, reiserfs) では、fsync やトランザクションコミットの際に書き込みバリアと呼ばれるものをディスクに送信します。書き込みバリアは書き込みの順序を守らせるための仕組みで (いくらか性能面への影響があります)、ディスクの書き込みキャッシュを安全に利用できるようにするためのものです。お使いのディスクにバッテリーが搭載されているような場合は、バリアを無効化することで性能を改善できる場合があります。&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;書き込みバリアの送信は、マウントオプションに {{Ic|1=barrier=0}} (ext3, ext4, reiserfs の場合) や {{ic|nobarrier}} (XFS) を設定することで無効化できます&#039;&#039; [http://manual.geeko.cpon.org/ja/cha.tuning.io.html]。&lt;br /&gt;
&lt;br /&gt;
{{Warning|バリアを無効化すると、電源が失われたときにキャッシュが正しく書き込まれるか保証がされなくなります。これによってファイルシステムの破壊やデータ損失が発生する場合があります。}}&lt;br /&gt;
&lt;br /&gt;
バリアをオフにしたいときは {{ic|/etc/fstab}} の変更したいファイルシステムに {{Ic|1=barrier=0}} オプションを追加してください。例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/fstab|2=&lt;br /&gt;
/dev/sda5    /    ext4    noatime,barrier=0    0    1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://ext4.wiki.kernel.org/ Official Ext4 wiki]&lt;br /&gt;
* [https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout Ext4 Disk Layout] described in its wiki&lt;br /&gt;
* [http://lwn.net/Articles/639427/ Ext4 Encryption] LWN article&lt;br /&gt;
* Kernel commits for ext4 encryption [https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=6162e4b0bedeb3dac2ba0a5e1b1f56db107d97ec] [https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=8663da2c0919896788321cd8a0016af08588c656]&lt;br /&gt;
* [http://e2fsprogs.sourceforge.net/e2fsprogs-release.html e2fsprogs Changelog]&lt;br /&gt;
* [https://ext4.wiki.kernel.org/index.php/Ext4_Metadata_Checksums Ext4 Metadata Checksums]&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Ext4&amp;diff=6428</id>
		<title>Ext4</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Ext4&amp;diff=6428"/>
		<updated>2016-11-21T23:26:45Z</updated>

		<summary type="html">&lt;p&gt;Fragment: 参照の追加&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ファイルシステム]]&lt;br /&gt;
[[cs:Ext4]]&lt;br /&gt;
[[de:Ext4]]&lt;br /&gt;
[[en:Ext4]]&lt;br /&gt;
[[es:Ext4]]&lt;br /&gt;
[[fr:Ext4]]&lt;br /&gt;
[[it:Ext4]]&lt;br /&gt;
[[ru:Ext4]]&lt;br /&gt;
[[tr:Ext4]]&lt;br /&gt;
[[zh-CN:Ext4]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|ファイルシステム}}&lt;br /&gt;
{{Related|Ext3}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
Ext4 は Linux で一番よく使われているファイルシステム、Ext3 の発展版です。多くの点で、Ext3 から Ext4 になって Ext2 から　Ext3 に進んだときよりも大きな改善がされています。Ext3 では Ext2 にジャーナリングを追加したのがほとんどでしたが、Ext4 ではファイルデータを保存するファイルシステムの重要なデータ構造にメスが入っています。その結果、改良された設計、優れたパフォーマンス、信頼性、機能性を備えたファイルシステムが誕生しました。&lt;br /&gt;
&lt;br /&gt;
ソース: [http://kernelnewbies.org/Ext4 Ext4 - Linux Kernel Newbies]&lt;br /&gt;
&lt;br /&gt;
== 新しく ext4 ファイルシステムを作成 ==&lt;br /&gt;
&lt;br /&gt;
パーティションをフォーマットするには次を実行:&lt;br /&gt;
&lt;br /&gt;
 # mkfs.ext4 /dev/&#039;&#039;partition&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Tip|オプションについては mkfs.ext4 の man ページを見て下さい。{{ic|/etc/mke2fs.conf}} を編集すればデフォルトのオプションを見たり設定できます。}}&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、{{Ic|mkfs.ext4}} はやや低めの比率の bytes-per-inode を使って、作成される inode の定量を計算します。容量が 750GB 以上のパーティションではこれだと inode 番号が大きくなりすぎて、ディスク容量の無駄になります。比率は {{Ic|-i}} オプションで直接設定することができます。1/6291456 なら 2TB のパーティションで 476928 の inode になります。&lt;br /&gt;
&lt;br /&gt;
==ext3 から ext4 に移行==&lt;br /&gt;
&lt;br /&gt;
===ext3 パーティションを変換せずに ext4 としてマウント===&lt;br /&gt;
&lt;br /&gt;
====理由====&lt;br /&gt;
&lt;br /&gt;
ext4 を完全に変換する案と ext3 をそのまま使用する案の折衷案として、既存の ext3 パーティションを ext4 としてマウントする方法があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;利点:&#039;&#039;&#039;&lt;br /&gt;
* 互換性 (ext3 としてファイルシステムをマウントできます) &amp;amp;ndash; ext4 のサポートがないオペレーティングシステムからもファイルシステムを読み込むことが可能です (例: Windows の ext3 ドライバー)&lt;br /&gt;
* パフォーマンスが向上 (ext4 パーティションに完全に変換するのよりは劣ります) &amp;amp;ndash; 詳しくは [http://kernelnewbies.org/Ext4 Ext4 - Linux Kernel Newbies] を見て下さい&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;欠点:&#039;&#039;&#039;&lt;br /&gt;
* ext4 の機能を全て活用することはできません (マルチブロックアロケーションや遅延アロケーションなどのディスクフォーマットに変更を与える機能は使えません)&lt;br /&gt;
&lt;br /&gt;
{{Note|ext4 が比較的新しいファイルシステムということ以外に (このこと自体をリスクと考えることもできます)、この方法を使用することで不利益になることは特にありません。}}&lt;br /&gt;
&lt;br /&gt;
====方法====&lt;br /&gt;
&lt;br /&gt;
# {{ic|/etc/fstab}} を編集して ext4 としてマウントしたいパーティションの &#039;type&#039; を ext3 から ext4 に変更してください。&lt;br /&gt;
# 変更したパーティションを再マウントします。&lt;br /&gt;
&lt;br /&gt;
===ext3 パーティションを ext4 に変換===&lt;br /&gt;
&lt;br /&gt;
====理由====&lt;br /&gt;
&lt;br /&gt;
ext4 の能力を活かすには、非可逆の変換をする必要があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;利点:&#039;&#039;&#039;&lt;br /&gt;
* パフォーマンスの向上と新機能 &amp;amp;ndash; 詳しくは [http://kernelnewbies.org/Ext4 Ext4 - Linux Kernel Newbies] を見て下さい&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;欠点:&#039;&#039;&#039;&lt;br /&gt;
* 一方通行 (ext4 パーティションを ext3 に&#039;ダウングレード&#039;することはできません)&lt;br /&gt;
&lt;br /&gt;
====方法====&lt;br /&gt;
&lt;br /&gt;
以下の手順は http://ext4.wiki.kernel.org/index.php/Ext4_Howto と https://bbs.archlinux.org/viewtopic.php?id=61602 から引用しています。&lt;br /&gt;
{{Warning|エクステントなどのオプションを有効にしないかぎり ext4 は ext3 と後方互換性があります。ただし、パーティションを完全に変換しない場合、ext4 を使用する利点は少なくなります。}}&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;[[バックアッププログラム|バックアップ]]&#039;&#039;&#039;を行なって下さい。ext4 に変換する ext3 パーティションに存在するデータを全てバックアップします。特に / (root) パーティションをバックアップする場合は、[http://clonezilla.org Clonezilla] が役に立ちます。&lt;br /&gt;
# {{ic|/etc/fstab}} を編集して ext4 に変換するパーティションの &#039;type&#039; を ext3 から ext4 に変換してください。&lt;br /&gt;
# (必要であれば) ライブメディアを起動します。{{Ic|e2fsprogs}} で変換を行う際はドライブがマウントされていない状態になっている必要があります。ドライブの root (/) パーティションを変換するときは、他のライブメディアから起動して変換するのが一番簡単です。&lt;br /&gt;
# パーティションがマウントされていないことを確認してください&lt;br /&gt;
# {{Ic|tune2fs -O extent,uninit_bg,dir_index /dev/sdxX}} を実行 ({{Ic|/dev/sdxX}} は変換するパーティションのパスに置き換えて下さい、例: {{Ic|/dev/sda1}})&lt;br /&gt;
# {{Ic|fsck -f /dev/sdxX}} を実行&lt;br /&gt;
# 推奨: パーティションをマウントして {{Ic|e4defrag -c -v /dev/sdxX}} を実行&lt;br /&gt;
# Arch Linux を再起動してください&lt;br /&gt;
&lt;br /&gt;
{{Note|The user &#039;&#039;&#039;MUST&#039;&#039;&#039; fsck the filesystem, or it will be unreadable! This fsck run is needed to return the filesystem to a consistent state. &#039;&#039;&#039;It WILL find checksum errors in the group descriptors&#039;&#039;&#039; -- this is expected. The &#039;-f&#039; parameter asks fsck to force checking even if the file system seems clean. The &#039;-p&#039; parameter asks fsck to &#039;automatically repair&#039; (otherwise, the user will be asked for input for each error).&lt;br /&gt;
You may need to run fsck -f rather than fsck -fp.}}&lt;br /&gt;
&lt;br /&gt;
{{Note|Even though the filesystem is now converted to ext4, all files that have been written before the conversion do not yet take advantage of the extent option of ext4, which will improve large file performance and reduce fragmentation and filesystem check time. In order to fully take advantage of ext4, all files would have to be rewritten on disk. Use e4defrag to take care of this problem.}}&lt;br /&gt;
{{Warning|1=root (/) パーティションを変換した場合、起動しようとした時にカーネルパニックが発生することがあります。カーネルパニックが起きる場合、&#039;fallback&#039; の initial ramdisk を使用して再起動して、&#039;default&#039; の initial ramdisk を再作成してください: {{Ic|mkinitcpio -p linux}}。}}&lt;br /&gt;
&lt;br /&gt;
== ファイルベースの暗号化を利用する == &lt;br /&gt;
&lt;br /&gt;
Since Linux 4.1, ext4 supports file-based encryption.  In a directory tree marked for encryption, file contents, filenames, and symbolic link targets are all encrypted.  Encryption keys are stored in the kernel keyring.  See also [http://blog.quarkslab.com/a-glimpse-of-ext4-filesystem-level-encryption.html Quarkslab&#039;s blog] entry with a write-up of the feature, an overview of the implementation state, and practical test results with kernel 4.1.&lt;br /&gt;
&lt;br /&gt;
Make sure you are using a kernel with the option {{ic|CONFIG_EXT4_ENCRYPTION}} enabled and have the {{Pkg|e2fsprogs}} package updated to at least version 1.43.&lt;br /&gt;
&lt;br /&gt;
Then verify that your filesystem is using a supported block size for encryption:&lt;br /&gt;
&lt;br /&gt;
{{hc|# tune2fs -l /dev/&#039;&#039;device&#039;&#039; {{!}} grep &#039;Block size&#039;|&lt;br /&gt;
Block size:               4096&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|# getconf PAGE_SIZE|&lt;br /&gt;
4096&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
If these values are not the same, then your filesystem will not support encryption, so &#039;&#039;&#039;do not proceed further&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Next, enable the encryption feature flag on your filesystem:&lt;br /&gt;
&lt;br /&gt;
 # tune2fs -O encrypt /dev/&#039;&#039;device&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Warning|Once the encryption feature flag is enabled, kernels older than 4.1 will be unable to mount the filesystem.}}&lt;br /&gt;
&lt;br /&gt;
Next, make a directory to encrypt:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /encrypted&lt;br /&gt;
&lt;br /&gt;
Note that encryption can only be applied to an empty directory.  The encryption setting (or &amp;quot;encryption policy&amp;quot;) is inherited by new files and subdirectories.  Encrypting existing files is not yet supported.&lt;br /&gt;
&lt;br /&gt;
Now generate and add a new key to your keyring.  This step must be repeated every time you flush your keyring (reboot):&lt;br /&gt;
&lt;br /&gt;
 # e4crypt add_key&lt;br /&gt;
 Enter passphrase (echo disabled): &lt;br /&gt;
 Added key with descriptor [f88747555a6115f5]&lt;br /&gt;
&lt;br /&gt;
{{Warning|If you forget your passphrase, there will be no way to decrypt your files!  It also isn&#039;t yet possible to change a passphrase after you&#039;ve set it.}}&lt;br /&gt;
&lt;br /&gt;
{{Note|To help prevent [[Wikipedia:Dictionary_attack|dictionary attacks]] on your passphrase, a random [[Wikipedia:Salt_(cryptography)|salt]] is automatically generated and stored in the ext4 filesystem superblock.  Both the passphrase &#039;&#039;and&#039;&#039; the salt are used to derive the actual encryption key.  As a consequence of this, if you have multiple ext4 filesystems with encryption enabled mounted, then {{ic|e4crypt add_key}} will actually add multiple keys, one per filesystem.  Although any key can be used on any filesystem, it would be wise to only use, on a given filesystem, keys using that filesystem&#039;s salt.  Otherwise, you risk being unable to decrypt files on filesystem A if filesystem B is unmounted.  Alternatively, you can use the {{ic|-S}} option to {{ic|e4crypt add_key}} to specify a salt yourself.}}&lt;br /&gt;
&lt;br /&gt;
Now you know the descriptor for your key.  Make sure the key is in your session keyring:&lt;br /&gt;
&lt;br /&gt;
 # keyctl show&lt;br /&gt;
 Session Keyring&lt;br /&gt;
 1021618178 --alswrv   1000  1000  keyring: _ses&lt;br /&gt;
  176349519 --alsw-v   1000  1000   \_ logon: ext4:f88747555a6115f5&lt;br /&gt;
&lt;br /&gt;
Almost done. Now set an encryption policy on the directory (assign the key to it):&lt;br /&gt;
&lt;br /&gt;
 # e4crypt set_policy f88747555a6115f5 /encrypted&lt;br /&gt;
&lt;br /&gt;
That is all. If you try accessing the directory without adding the key into your keyring, filenames and their contents will be seen as encrypted gibberish.&lt;br /&gt;
&lt;br /&gt;
==Tips and tricks==&lt;br /&gt;
===予約ブロックの削除===&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、ファイルシステムの 5% はフラグメントが起こらないように root ユーザーに予約されます。最近の大容量ディスクでは、パーティションを長期保存アーカイブとして使う場合、5%は必要以上に大きい値となります (詳しくは [http://www.redhat.com/archives/ext3-users/2009-January/msg00026.html このメール] を見て下さい)。パーティションが以下の条件を満たしているならば、ディスク容量を増やすために予約ブロックの割合を減らしても大抵は問題ありません:&lt;br /&gt;
&lt;br /&gt;
*パーティションがとても大きい (例えば 50GB 以上)&lt;br /&gt;
*長期保存用のアーカイブとして使っている、頻繁にファイルを作成したり削除することがない&lt;br /&gt;
&lt;br /&gt;
予約ブロックを削減するには tune2fs ユーティリティを使います。次のコマンドは {{ic|/dev/sdXY}} パーティションの予約ブロックの割合を 1.0% に設定します:&lt;br /&gt;
&lt;br /&gt;
 # tune2fs -m 1.0 /dev/sdXY&lt;br /&gt;
&lt;br /&gt;
findmnt(8) を使うことでデバイスの名前を確認できます:&lt;br /&gt;
&lt;br /&gt;
 $ findmnt &#039;&#039;/the/mount/point&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== E4rat ===&lt;br /&gt;
&lt;br /&gt;
[[E4rat]] は ext4 ファイルシステム用に作られたプリロードアプリケーションです。[[E4rat]] は起動時に開かれるファイルを記録して、アクセス時間が短縮されるようにパーティションにおけるファイルの配置を最適化します。そして起動時の初期段階でファイルを先読みします。[[E4rat]] は [[SSD]] を使っている場合は効果がありません。SSD のアクセス時間はハードディスクと比べると無視できるほどしかないためです。&lt;br /&gt;
&lt;br /&gt;
==トラブルシューティング==&lt;br /&gt;
=== バリアとパフォーマンス ===&lt;br /&gt;
&lt;br /&gt;
カーネル 2.6.30 から、データの整合性を確保するのに役立つ変更によって ext4 のパフォーマンスは落ちています [http://www.phoronix.com/scan.php?page=article&amp;amp;item=ext4_then_now&amp;amp;num=1]。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;多くのファイルシステム (XFS, ext3, ext4, reiserfs) では、fsync やトランザクションコミットの際に書き込みバリアと呼ばれるものをディスクに送信します。書き込みバリアは書き込みの順序を守らせるための仕組みで (いくらか性能面への影響があります)、ディスクの書き込みキャッシュを安全に利用できるようにするためのものです。お使いのディスクにバッテリーが搭載されているような場合は、バリアを無効化することで性能を改善できる場合があります。&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;書き込みバリアの送信は、マウントオプションに {{Ic|1=barrier=0}} (ext3, ext4, reiserfs の場合) や {{ic|nobarrier}} (XFS) を設定することで無効化できます&#039;&#039; [http://manual.geeko.cpon.org/ja/cha.tuning.io.html]。&lt;br /&gt;
&lt;br /&gt;
{{Warning|バリアを無効化すると、電源が失われたときにキャッシュが正しく書き込まれるか保証がされなくなります。これによってファイルシステムの破壊やデータ損失が発生する場合があります。}}&lt;br /&gt;
&lt;br /&gt;
バリアをオフにしたいときは {{ic|/etc/fstab}} の変更したいファイルシステムに {{Ic|1=barrier=0}} オプションを追加してください。例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/fstab|2=&lt;br /&gt;
/dev/sda5    /    ext4    noatime,barrier=0    0    1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://ext4.wiki.kernel.org/ Official Ext4 wiki]&lt;br /&gt;
* [https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout Ext4 Disk Layout] described in its wiki&lt;br /&gt;
* [http://lwn.net/Articles/639427/ Ext4 Encryption] LWN article&lt;br /&gt;
* Kernel commits for ext4 encryption [https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=6162e4b0bedeb3dac2ba0a5e1b1f56db107d97ec] [https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=8663da2c0919896788321cd8a0016af08588c656]&lt;br /&gt;
* [http://e2fsprogs.sourceforge.net/e2fsprogs-release.html e2fsprogs Changelog]&lt;br /&gt;
* [https://ext4.wiki.kernel.org/index.php/Ext4_Metadata_Checksums Ext4 Metadata Checksums]&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Ext4&amp;diff=6427</id>
		<title>Ext4</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Ext4&amp;diff=6427"/>
		<updated>2016-11-21T23:26:02Z</updated>

		<summary type="html">&lt;p&gt;Fragment: 項目の追加。&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ファイルシステム]]&lt;br /&gt;
[[cs:Ext4]]&lt;br /&gt;
[[de:Ext4]]&lt;br /&gt;
[[en:Ext4]]&lt;br /&gt;
[[es:Ext4]]&lt;br /&gt;
[[fr:Ext4]]&lt;br /&gt;
[[it:Ext4]]&lt;br /&gt;
[[ru:Ext4]]&lt;br /&gt;
[[tr:Ext4]]&lt;br /&gt;
[[zh-CN:Ext4]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|ファイルシステム}}&lt;br /&gt;
{{Related|Ext3}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
Ext4 は Linux で一番よく使われているファイルシステム、Ext3 の発展版です。多くの点で、Ext3 から Ext4 になって Ext2 から　Ext3 に進んだときよりも大きな改善がされています。Ext3 では Ext2 にジャーナリングを追加したのがほとんどでしたが、Ext4 ではファイルデータを保存するファイルシステムの重要なデータ構造にメスが入っています。その結果、改良された設計、優れたパフォーマンス、信頼性、機能性を備えたファイルシステムが誕生しました。&lt;br /&gt;
&lt;br /&gt;
ソース: [http://kernelnewbies.org/Ext4 Ext4 - Linux Kernel Newbies]&lt;br /&gt;
&lt;br /&gt;
== 新しく ext4 ファイルシステムを作成 ==&lt;br /&gt;
&lt;br /&gt;
パーティションをフォーマットするには次を実行:&lt;br /&gt;
&lt;br /&gt;
 # mkfs.ext4 /dev/&#039;&#039;partition&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Tip|オプションについては mkfs.ext4 の man ページを見て下さい。{{ic|/etc/mke2fs.conf}} を編集すればデフォルトのオプションを見たり設定できます。}}&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、{{Ic|mkfs.ext4}} はやや低めの比率の bytes-per-inode を使って、作成される inode の定量を計算します。容量が 750GB 以上のパーティションではこれだと inode 番号が大きくなりすぎて、ディスク容量の無駄になります。比率は {{Ic|-i}} オプションで直接設定することができます。1/6291456 なら 2TB のパーティションで 476928 の inode になります。&lt;br /&gt;
&lt;br /&gt;
==ext3 から ext4 に移行==&lt;br /&gt;
&lt;br /&gt;
===ext3 パーティションを変換せずに ext4 としてマウント===&lt;br /&gt;
&lt;br /&gt;
====理由====&lt;br /&gt;
&lt;br /&gt;
ext4 を完全に変換する案と ext3 をそのまま使用する案の折衷案として、既存の ext3 パーティションを ext4 としてマウントする方法があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;利点:&#039;&#039;&#039;&lt;br /&gt;
* 互換性 (ext3 としてファイルシステムをマウントできます) &amp;amp;ndash; ext4 のサポートがないオペレーティングシステムからもファイルシステムを読み込むことが可能です (例: Windows の ext3 ドライバー)&lt;br /&gt;
* パフォーマンスが向上 (ext4 パーティションに完全に変換するのよりは劣ります) &amp;amp;ndash; 詳しくは [http://kernelnewbies.org/Ext4 Ext4 - Linux Kernel Newbies] を見て下さい&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;欠点:&#039;&#039;&#039;&lt;br /&gt;
* ext4 の機能を全て活用することはできません (マルチブロックアロケーションや遅延アロケーションなどのディスクフォーマットに変更を与える機能は使えません)&lt;br /&gt;
&lt;br /&gt;
{{Note|ext4 が比較的新しいファイルシステムということ以外に (このこと自体をリスクと考えることもできます)、この方法を使用することで不利益になることは特にありません。}}&lt;br /&gt;
&lt;br /&gt;
====方法====&lt;br /&gt;
&lt;br /&gt;
# {{ic|/etc/fstab}} を編集して ext4 としてマウントしたいパーティションの &#039;type&#039; を ext3 から ext4 に変更してください。&lt;br /&gt;
# 変更したパーティションを再マウントします。&lt;br /&gt;
&lt;br /&gt;
===ext3 パーティションを ext4 に変換===&lt;br /&gt;
&lt;br /&gt;
====理由====&lt;br /&gt;
&lt;br /&gt;
ext4 の能力を活かすには、非可逆の変換をする必要があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;利点:&#039;&#039;&#039;&lt;br /&gt;
* パフォーマンスの向上と新機能 &amp;amp;ndash; 詳しくは [http://kernelnewbies.org/Ext4 Ext4 - Linux Kernel Newbies] を見て下さい&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;欠点:&#039;&#039;&#039;&lt;br /&gt;
* 一方通行 (ext4 パーティションを ext3 に&#039;ダウングレード&#039;することはできません)&lt;br /&gt;
&lt;br /&gt;
====方法====&lt;br /&gt;
&lt;br /&gt;
以下の手順は http://ext4.wiki.kernel.org/index.php/Ext4_Howto と https://bbs.archlinux.org/viewtopic.php?id=61602 から引用しています。&lt;br /&gt;
{{Warning|エクステントなどのオプションを有効にしないかぎり ext4 は ext3 と後方互換性があります。ただし、パーティションを完全に変換しない場合、ext4 を使用する利点は少なくなります。}}&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;[[バックアッププログラム|バックアップ]]&#039;&#039;&#039;を行なって下さい。ext4 に変換する ext3 パーティションに存在するデータを全てバックアップします。特に / (root) パーティションをバックアップする場合は、[http://clonezilla.org Clonezilla] が役に立ちます。&lt;br /&gt;
# {{ic|/etc/fstab}} を編集して ext4 に変換するパーティションの &#039;type&#039; を ext3 から ext4 に変換してください。&lt;br /&gt;
# (必要であれば) ライブメディアを起動します。{{Ic|e2fsprogs}} で変換を行う際はドライブがマウントされていない状態になっている必要があります。ドライブの root (/) パーティションを変換するときは、他のライブメディアから起動して変換するのが一番簡単です。&lt;br /&gt;
# パーティションがマウントされていないことを確認してください&lt;br /&gt;
# {{Ic|tune2fs -O extent,uninit_bg,dir_index /dev/sdxX}} を実行 ({{Ic|/dev/sdxX}} は変換するパーティションのパスに置き換えて下さい、例: {{Ic|/dev/sda1}})&lt;br /&gt;
# {{Ic|fsck -f /dev/sdxX}} を実行&lt;br /&gt;
# 推奨: パーティションをマウントして {{Ic|e4defrag -c -v /dev/sdxX}} を実行&lt;br /&gt;
# Arch Linux を再起動してください&lt;br /&gt;
&lt;br /&gt;
{{Note|The user &#039;&#039;&#039;MUST&#039;&#039;&#039; fsck the filesystem, or it will be unreadable! This fsck run is needed to return the filesystem to a consistent state. &#039;&#039;&#039;It WILL find checksum errors in the group descriptors&#039;&#039;&#039; -- this is expected. The &#039;-f&#039; parameter asks fsck to force checking even if the file system seems clean. The &#039;-p&#039; parameter asks fsck to &#039;automatically repair&#039; (otherwise, the user will be asked for input for each error).&lt;br /&gt;
You may need to run fsck -f rather than fsck -fp.}}&lt;br /&gt;
&lt;br /&gt;
{{Note|Even though the filesystem is now converted to ext4, all files that have been written before the conversion do not yet take advantage of the extent option of ext4, which will improve large file performance and reduce fragmentation and filesystem check time. In order to fully take advantage of ext4, all files would have to be rewritten on disk. Use e4defrag to take care of this problem.}}&lt;br /&gt;
{{Warning|1=root (/) パーティションを変換した場合、起動しようとした時にカーネルパニックが発生することがあります。カーネルパニックが起きる場合、&#039;fallback&#039; の initial ramdisk を使用して再起動して、&#039;default&#039; の initial ramdisk を再作成してください: {{Ic|mkinitcpio -p linux}}。}}&lt;br /&gt;
&lt;br /&gt;
== ファイルベースの暗号化を利用する == &lt;br /&gt;
&lt;br /&gt;
Since Linux 4.1, ext4 supports file-based encryption.  In a directory tree marked for encryption, file contents, filenames, and symbolic link targets are all encrypted.  Encryption keys are stored in the kernel keyring.  See also [http://blog.quarkslab.com/a-glimpse-of-ext4-filesystem-level-encryption.html Quarkslab&#039;s blog] entry with a write-up of the feature, an overview of the implementation state, and practical test results with kernel 4.1.&lt;br /&gt;
&lt;br /&gt;
Make sure you are using a kernel with the option {{ic|CONFIG_EXT4_ENCRYPTION}} enabled and have the {{Pkg|e2fsprogs}} package updated to at least version 1.43.&lt;br /&gt;
&lt;br /&gt;
Then verify that your filesystem is using a supported block size for encryption:&lt;br /&gt;
&lt;br /&gt;
{{hc|# tune2fs -l /dev/&#039;&#039;device&#039;&#039; {{!}} grep &#039;Block size&#039;|&lt;br /&gt;
Block size:               4096&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|# getconf PAGE_SIZE|&lt;br /&gt;
4096&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
If these values are not the same, then your filesystem will not support encryption, so &#039;&#039;&#039;do not proceed further&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Next, enable the encryption feature flag on your filesystem:&lt;br /&gt;
&lt;br /&gt;
 # tune2fs -O encrypt /dev/&#039;&#039;device&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Warning|Once the encryption feature flag is enabled, kernels older than 4.1 will be unable to mount the filesystem.}}&lt;br /&gt;
&lt;br /&gt;
Next, make a directory to encrypt:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /encrypted&lt;br /&gt;
&lt;br /&gt;
Note that encryption can only be applied to an empty directory.  The encryption setting (or &amp;quot;encryption policy&amp;quot;) is inherited by new files and subdirectories.  Encrypting existing files is not yet supported.&lt;br /&gt;
&lt;br /&gt;
Now generate and add a new key to your keyring.  This step must be repeated every time you flush your keyring (reboot):&lt;br /&gt;
&lt;br /&gt;
 # e4crypt add_key&lt;br /&gt;
 Enter passphrase (echo disabled): &lt;br /&gt;
 Added key with descriptor [f88747555a6115f5]&lt;br /&gt;
&lt;br /&gt;
{{Warning|If you forget your passphrase, there will be no way to decrypt your files!  It also isn&#039;t yet possible to change a passphrase after you&#039;ve set it.}}&lt;br /&gt;
&lt;br /&gt;
{{Note|To help prevent [[Wikipedia:Dictionary_attack|dictionary attacks]] on your passphrase, a random [[Wikipedia:Salt_(cryptography)|salt]] is automatically generated and stored in the ext4 filesystem superblock.  Both the passphrase &#039;&#039;and&#039;&#039; the salt are used to derive the actual encryption key.  As a consequence of this, if you have multiple ext4 filesystems with encryption enabled mounted, then {{ic|e4crypt add_key}} will actually add multiple keys, one per filesystem.  Although any key can be used on any filesystem, it would be wise to only use, on a given filesystem, keys using that filesystem&#039;s salt.  Otherwise, you risk being unable to decrypt files on filesystem A if filesystem B is unmounted.  Alternatively, you can use the {{ic|-S}} option to {{ic|e4crypt add_key}} to specify a salt yourself.}}&lt;br /&gt;
&lt;br /&gt;
Now you know the descriptor for your key.  Make sure the key is in your session keyring:&lt;br /&gt;
&lt;br /&gt;
 # keyctl show&lt;br /&gt;
 Session Keyring&lt;br /&gt;
 1021618178 --alswrv   1000  1000  keyring: _ses&lt;br /&gt;
  176349519 --alsw-v   1000  1000   \_ logon: ext4:f88747555a6115f5&lt;br /&gt;
&lt;br /&gt;
Almost done. Now set an encryption policy on the directory (assign the key to it):&lt;br /&gt;
&lt;br /&gt;
 # e4crypt set_policy f88747555a6115f5 /encrypted&lt;br /&gt;
&lt;br /&gt;
That is all. If you try accessing the directory without adding the key into your keyring, filenames and their contents will be seen as encrypted gibberish.&lt;br /&gt;
&lt;br /&gt;
==Tips and tricks==&lt;br /&gt;
===予約ブロックの削除===&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、ファイルシステムの 5% はフラグメントが起こらないように root ユーザーに予約されます。最近の大容量ディスクでは、パーティションを長期保存アーカイブとして使う場合、5%は必要以上に大きい値となります (詳しくは [http://www.redhat.com/archives/ext3-users/2009-January/msg00026.html このメール] を見て下さい)。パーティションが以下の条件を満たしているならば、ディスク容量を増やすために予約ブロックの割合を減らしても大抵は問題ありません:&lt;br /&gt;
&lt;br /&gt;
*パーティションがとても大きい (例えば 50GB 以上)&lt;br /&gt;
*長期保存用のアーカイブとして使っている、頻繁にファイルを作成したり削除することがない&lt;br /&gt;
&lt;br /&gt;
予約ブロックを削減するには tune2fs ユーティリティを使います。次のコマンドは {{ic|/dev/sdXY}} パーティションの予約ブロックの割合を 1.0% に設定します:&lt;br /&gt;
&lt;br /&gt;
 # tune2fs -m 1.0 /dev/sdXY&lt;br /&gt;
&lt;br /&gt;
findmnt(8) を使うことでデバイスの名前を確認できます:&lt;br /&gt;
&lt;br /&gt;
 $ findmnt &#039;&#039;/the/mount/point&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== E4rat ===&lt;br /&gt;
&lt;br /&gt;
[[E4rat]] は ext4 ファイルシステム用に作られたプリロードアプリケーションです。[[E4rat]] は起動時に開かれるファイルを記録して、アクセス時間が短縮されるようにパーティションにおけるファイルの配置を最適化します。そして起動時の初期段階でファイルを先読みします。[[E4rat]] は [[SSD]] を使っている場合は効果がありません。SSD のアクセス時間はハードディスクと比べると無視できるほどしかないためです。&lt;br /&gt;
&lt;br /&gt;
==トラブルシューティング==&lt;br /&gt;
=== バリアとパフォーマンス ===&lt;br /&gt;
&lt;br /&gt;
カーネル 2.6.30 から、データの整合性を確保するのに役立つ変更によって ext4 のパフォーマンスは落ちています [http://www.phoronix.com/scan.php?page=article&amp;amp;item=ext4_then_now&amp;amp;num=1]。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;多くのファイルシステム (XFS, ext3, ext4, reiserfs) では、fsync やトランザクションコミットの際に書き込みバリアと呼ばれるものをディスクに送信します。書き込みバリアは書き込みの順序を守らせるための仕組みで (いくらか性能面への影響があります)、ディスクの書き込みキャッシュを安全に利用できるようにするためのものです。お使いのディスクにバッテリーが搭載されているような場合は、バリアを無効化することで性能を改善できる場合があります。&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;書き込みバリアの送信は、マウントオプションに {{Ic|1=barrier=0}} (ext3, ext4, reiserfs の場合) や {{ic|nobarrier}} (XFS) を設定することで無効化できます&#039;&#039; [http://manual.geeko.cpon.org/ja/cha.tuning.io.html]。&lt;br /&gt;
&lt;br /&gt;
{{Warning|バリアを無効化すると、電源が失われたときにキャッシュが正しく書き込まれるか保証がされなくなります。これによってファイルシステムの破壊やデータ損失が発生する場合があります。}}&lt;br /&gt;
&lt;br /&gt;
バリアをオフにしたいときは {{ic|/etc/fstab}} の変更したいファイルシステムに {{Ic|1=barrier=0}} オプションを追加してください。例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/fstab|2=&lt;br /&gt;
/dev/sda5    /    ext4    noatime,barrier=0    0    1&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Makepkg&amp;diff=5320</id>
		<title>Makepkg</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Makepkg&amp;diff=5320"/>
		<updated>2016-05-31T03:33:13Z</updated>

		<summary type="html">&lt;p&gt;Fragment: /* マルチコアを利用して圧縮する */  xz圧縮のマルチプロセッシングについて&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Lowercase title}}&lt;br /&gt;
[[Category:パッケージ開発]]&lt;br /&gt;
[[Category:Arch について]]&lt;br /&gt;
[[ar:Makepkg]]&lt;br /&gt;
[[el:Makepkg]]&lt;br /&gt;
[[en:Makepkg]]&lt;br /&gt;
[[es:Makepkg]]&lt;br /&gt;
[[fr:makepkg]]&lt;br /&gt;
[[it:Makepkg]]&lt;br /&gt;
[[nl:Makepkg]]&lt;br /&gt;
[[pt:Makepkg]]&lt;br /&gt;
[[ru:Makepkg]]&lt;br /&gt;
[[sr:Makepkg]]&lt;br /&gt;
[[tr:Makepkg]]&lt;br /&gt;
[[zh-CN:Makepkg]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|パッケージの作成}}&lt;br /&gt;
{{Related|PKGBUILD}}&lt;br /&gt;
{{Related|Arch User Repository}}&lt;br /&gt;
{{Related|pacman}}&lt;br /&gt;
{{Related|公式リポジトリ}}&lt;br /&gt;
{{Related|Arch Build System}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
makepkg は [[pacman]] (Arch Linux のパッケージマネージャ) でのインストールに適したパッケージをコンパイル・ビルドするために使われます。makepkg はパッケージのビルドを自動化するスクリプトです; ソースファイルのダウンロード・検証、依存関係の確認、ビルド時の設定、ソースのコンパイル、一時 root へのインストール、カスタマイズ、メタ情報の生成、そして全てをまとめたパッケージの作成。&lt;br /&gt;
&lt;br /&gt;
makepkg は {{Pkg|pacman}} パッケージの中に入っています。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/makepkg.conf}} が makepkg のメインの設定ファイルです。ほとんどのユーザーはパッケージをビルドする前に makepkg の設定オプションを微調整するとよいでしょう。{{ic|~/.makepkg.conf}} ファイルを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
=== アーキテクチャ、コンパイルフラグ ===&lt;br /&gt;
makepkg でソフトウェアをコンパイルする時 {{ic|MAKEFLAGS}}, {{ic|CFLAGS}}, {{ic|CXXFLAGS}}, {{ic|CPPFLAGS}} オプションが {{Pkg|make}}, {{Pkg|gcc}}, {{ic|g++}} によって使われます。デフォルトでは、様々なマシンでインストールできるような一般的なパッケージを生成するようにオプションが設定されています。ホストマシン用にコンパイルをチューニングすることでパフォーマンスを改善することが可能です。コンパイルするホストのプロセッサに合わせてパッケージをコンパイルするデメリットは、他のマシンでは動作しなくなるかもしれないということです。&lt;br /&gt;
&lt;br /&gt;
{{Note|あなたが export した変数を全てのパッケージビルドシステムが使うわけではないということに注意してください。元の Makefile や [[PKGBUILD]] 内の変数を上書きすることがあります。}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/makepkg.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
#########################################################################&lt;br /&gt;
# ARCHITECTURE, COMPILE FLAGS&lt;br /&gt;
#########################################################################&lt;br /&gt;
#&lt;br /&gt;
CARCH=&amp;quot;x86_64&amp;quot;&lt;br /&gt;
CHOST=&amp;quot;x86_64-unknown-linux-gnu&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#-- Exclusive: will only run on x86_64&lt;br /&gt;
# -march (or -mcpu) builds exclusively for an architecture&lt;br /&gt;
# -mtune optimizes for an architecture, but builds for whole processor family&lt;br /&gt;
CPPFLAGS=&amp;quot;-D_FORTIFY_SOURCE=2&amp;quot;&lt;br /&gt;
CFLAGS=&amp;quot;-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4&amp;quot;&lt;br /&gt;
CXXFLAGS=&amp;quot;-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4&amp;quot;&lt;br /&gt;
LDFLAGS=&amp;quot;-Wl,-O1,--sort-common,--as-needed,-z,relro&amp;quot;&lt;br /&gt;
#-- Make Flags: change this for DistCC/SMP systems&lt;br /&gt;
#MAKEFLAGS=&amp;quot;-j2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
デフォルトの makepkg.conf の {{ic|CFLAGS}} と {{ic|CXXFLAGS}} はそれぞれのアーキテクチャを持つ全てのマシンと互換性があります。&lt;br /&gt;
&lt;br /&gt;
x86_64 のマシンでは、時間を投資して公式のパッケージをリビルドすることでそれに見合うだけのパフォーマンスの向上を得られることは稀です。&lt;br /&gt;
&lt;br /&gt;
GCC バージョン 4.3.0 から、マシンの CPU の自動検知とサポートされている最適化の自動セレクトを有効にする {{ic|1=-march=native}} スイッチが使えるようになっています。これを使うには、以下のように {{ic|CFLAGS}} と {{ic|CXXFLAGS}} を変更してください:&lt;br /&gt;
&lt;br /&gt;
 # -march=native also sets the correct -mtune=&lt;br /&gt;
 CFLAGS=&amp;quot;-march=native -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2&amp;quot;&lt;br /&gt;
 CXXFLAGS=&amp;quot;${CFLAGS}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|1=march=native}} フラグがどうなるか見るには、次を実行してください:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ gcc -march=native -E -v - &amp;lt;/dev/null 2&amp;gt;&amp;amp;1 | sed -n &#039;s/.* -v - //p&#039;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|1=-march=native}} は全ての利用可能な命令セットを有効にし特定の CPU にあわせてスケジューリングを改善するので CPU タイプに合わせた最適化によって理論上はパフォーマンスが向上します。アプリケーション (例えば: 音声・動画エンコードツール、科学的なアプリケーション、数学プログラムなど) をリビルドするときにこれは特に顕著で、Arch Linux によって提供されているデフォルトのオプション (またパッケージ) を使うときには有効にならない新しい命令を使えることで大きなアドバンテージを得ることができます。&lt;br /&gt;
&lt;br /&gt;
コンパイラスイッチによって、ループ展開・悪いベクトル化・狂ったインライン化などでコンパイラはコードサイズを膨張させがちなので&amp;quot;標準外の&amp;quot; CFLAGS を使うことでパフォーマンスを下げるのはとても簡単です。何かが速くなると確認・ベンチマークできない限り、高速化できる可能性はほとんどありません！&lt;br /&gt;
&lt;br /&gt;
利用可能なオプションの完全なリストは GCC の man ページを見て下さい。Gentoo の [https://wiki.gentoo.org/wiki/GCC_optimization/ja Compilation Optimization Guide] や [http://wiki.gentoo.org/wiki/Safe_CFLAGS Safe CFLAGS] にはより詳しい情報が載っています。&lt;br /&gt;
&lt;br /&gt;
====MAKEFLAGS====&lt;br /&gt;
{{ic|MAKEFLAGS}} オプションを使って make に追加するオプションを指定することができます。マルチコア・マルチプロセッサのシステムを使っているユーザーは同時に実行するジョブの数を指定できます、例: {{ic|-j4}}。{{ic|nproc}} を使うことで利用可能なプロセッサの数がわかります。[[PKGBUILD]] によっては、特定のバージョンで競合状態になったり、もしくはサポートされていないために、この値を {{ic|-j1}} で上書きします。これによってビルドが失敗するパッケージがある場合は、エラーがあなたの MAKEFLAGS によって引き起こされていることを確認してから、バグトラッカーに[[バグ報告ガイドライン|報告]]してください。&lt;br /&gt;
&lt;br /&gt;
利用可能なオプションの全ては {{ic|man make}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== パッケージの出力 ===&lt;br /&gt;
&lt;br /&gt;
次に、ソースファイルやパッケージが置かれる場所、パッケージ作成者としての名前を設定することができます。このステップは任意です; デフォルトでは、パッケージは makepkg が実行された作業ディレクトリに作成されます。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/makepkg.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
#########################################################################&lt;br /&gt;
# PACKAGE OUTPUT&lt;br /&gt;
#########################################################################&lt;br /&gt;
#&lt;br /&gt;
# Default: put built package and cached source in build directory&lt;br /&gt;
#&lt;br /&gt;
#-- Destination: specify a fixed directory where all packages will be placed&lt;br /&gt;
#PKGDEST=/home/packages&lt;br /&gt;
#-- Source cache: specify a fixed directory where source files will be cached&lt;br /&gt;
#SRCDEST=/home/sources&lt;br /&gt;
#-- Source packages: specify a fixed directory where all src packages will be placed&lt;br /&gt;
#SRCPKGDEST=/home/srcpackages&lt;br /&gt;
#-- Packager: name/email of the person or organization building packages&lt;br /&gt;
#PACKAGER=&amp;quot;John Doe &amp;lt;john@doe.com&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
例えば、ディレクトリを作成して:&lt;br /&gt;
&lt;br /&gt;
 $ mkdir /home/$USER/packages&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/makepkg.conf}} の {{ic|PKGDEST}} 変数を修正してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|PACKAGER}} 変数はコンパイルしたパッケージの {{ic|.PKGINFO}} メタデータファイルの中に {{ic|packager}} 値を設定します。デフォルトでは、ユーザーがコンパイルしたパッケージは以下のように表示されます:&lt;br /&gt;
&lt;br /&gt;
{{hc|pacman -Qi package|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
Packager       : Unknown Packager&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
設定した後:&lt;br /&gt;
&lt;br /&gt;
{{hc|pacman -Qi package|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
Packager       : John Doe &amp;lt;john@doe.com&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
システム上で複数のユーザーがパッケージをコンパイルしていたり、あなたのパッケージを他のユーザーに渡す場合にこれを使うと有用です。&lt;br /&gt;
&lt;br /&gt;
=== 署名チェック ===&lt;br /&gt;
以下の手順は makepkg を使ったコンパイルに必須のものではありません、初期設定は [[#使用方法]] に進んで下さい。一時的に署名チェックを無効にしたいときは makepkg コマンドに {{ic|--skippgpcheck}} オプションを付けて呼び出して下さい。&lt;br /&gt;
[[PKGBUILD]] の source 行の一部に .sig の形で署名ファイルがあると、makepkg はソースファイルの信頼性を検証します。例えば、署名 {{ic|pkgname-pkgver.tar.gz.sig}} は gpg プログラムによってファイル {{ic|pkgname-pkgver.tar.gz}} の整合性のチェックに使われます。望むなら、他の開発者による署名を手動で GPG キーリングに追加することができます。詳細は [[GnuPG]] の記事を見て下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|makepkg で実装されている署名チェックは pacman のキーリングを使用しません。以下にあるように gpg を設定して makepkg が pacman のキーリングを読み込めるようにしてください。}}&lt;br /&gt;
&lt;br /&gt;
gpg キーはユーザーの {{ic|~/.gnupg/pubring.gpg}} ファイルの中に保存されていると期待されています。与えられた署名が含まれていない場合、makepkg は警告を表示します。&lt;br /&gt;
{{hc|makepkg|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
==&amp;gt; Verifying source file signatures with gpg...&lt;br /&gt;
pkgname-pkgver.tar.gz ... FAILED (unknown public key 1234567890)&lt;br /&gt;
==&amp;gt; WARNING: Warnings have occurred while verifying the signatures.&lt;br /&gt;
    Please make sure you really trust them.&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
現在の gpg キーのリストを表示するには gpg コマンドを使って下さい。&lt;br /&gt;
{{bc|gpg --list-keys}}&lt;br /&gt;
{{ic|pubring.gpg}} ファイルが存在しない時はすぐに作成されます。gpg を設定して Arch Linux の開発者によって投稿された署名チェックが成功した AUR パッケージをコンパイルできるようにすることが可能です。&lt;br /&gt;
以下の行をあなたの gpg 設定ファイルの一番下に追加してユーザーの個人キーリングに pacman のキーリングを含めて下さい。&lt;br /&gt;
{{hc|~/.gnupg/gpg.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
keyring /etc/pacman.d/gnupg/pubring.gpg&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
前と同じように {{ic|gpg --list-keys}} を実行すると出力にキーリングと開発者のリストが含まれています。&lt;br /&gt;
&lt;br /&gt;
== 使用方法 ==&lt;br /&gt;
&lt;br /&gt;
次に進む前に、{{Grp|base-devel}} グループがインストールされているか確認してください。このグループに属しているパッケージは [[PKGBUILD]] の中に依存パッケージとして載せる必要はないことになっています。以下を (root で) 実行して &amp;quot;base-devel&amp;quot; グループをインストールしてください:&lt;br /&gt;
&lt;br /&gt;
 # pacman -S base-devel&lt;br /&gt;
&lt;br /&gt;
{{Note|依存パッケージが欠けていることに不満を言う前に、全ての Arch Linux 環境では {{Grp|base}} グループがインストールされていることが前提になっていることを思い出してください。&#039;&#039;&#039;makepkg&#039;&#039;&#039; や [[AUR ヘルパー]]でビルドするときには &amp;quot;base-devel&amp;quot; グループがインストールされていることが前提になっています。}}&lt;br /&gt;
&lt;br /&gt;
パッケージを作成するには、まず[[パッケージの作成]]に記述されているようにして [[PKGBUILD]] を作成するか [[Arch Build System|ABS ツリー]]や [[Arch User Repository]] などから取得してくる必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|信頼できるソースからパッケージをビルド・インストールしてください。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|PKGBUILD}} を入手したら、PKGBUILD が保存されているディレクトリに移動してから次のコマンドを実行して {{ic|PKGBUILD}} に記述されたパッケージを作成します:&lt;br /&gt;
&lt;br /&gt;
 $ makepkg&lt;br /&gt;
&lt;br /&gt;
パッケージ作成後、要らなくなったファイル ($srcdir に展開されたファイルなど) を makepkg によって削除するには、以下のオプションを加えて下さい。同じパッケージをビルドしたりパッケージのバージョンを更新するときに、同じビルドフォルダを使う場合、このオプションは有益です。残ったファイルを新しいビルドに持ち越す危険がなくなります。&lt;br /&gt;
&lt;br /&gt;
 $ makepkg -c&lt;br /&gt;
&lt;br /&gt;
必要な依存パッケージが欠けている場合、makepkg は警告を表示します。必要な依存パッケージを自動的にインストールするには、次のコマンドを使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ makepkg -s&lt;br /&gt;
&lt;br /&gt;
依存パッケージが取ってこれるのは設定されたリポジトリからだけということに注意してください; 詳しくは [[pacman#リポジトリ]] を見て下さい。また、ビルドの前に手動で依存パッケージをインストールすることもできます ({{ic|pacman -S --asdeps dep1 dep2}})。&lt;br /&gt;
&lt;br /&gt;
全ての依存関係が解決されパッケージのビルドが成功すれば、パッケージファイル ({{ic|pkgname-pkgver.pkg.tar.xz}}) が作業ディレクトリの中に作成されます。インストールするには、(root で) 次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # pacman -U pkgname-pkgver.pkg.tar.xz&lt;br /&gt;
&lt;br /&gt;
もしくは、{{ic|pacman -U pkgname-pkgver.pkg.tar.xz}} を実行する代わりに {{ic|-i}} フラグを使ってインストールすることもできます:&lt;br /&gt;
&lt;br /&gt;
 $ makepkg -i&lt;br /&gt;
&lt;br /&gt;
== Tips and Tricks ==&lt;br /&gt;
=== コンパイル時間を短縮する ===&lt;br /&gt;
&lt;br /&gt;
==== tmpfs ====&lt;br /&gt;
&lt;br /&gt;
パッケージをコンパイルするのは I/O に負担がかかる作業のため、[[tmpfs]] を利用することでビルド時間を大幅に短縮することができます。該当する {{ic|/etc/makepkg.conf}} のオプションは {{ic|BUILD ENVIRONMENT}} セクションの一番下にあります:&lt;br /&gt;
{{hc|/etc/makepkg.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
#########################################################################&lt;br /&gt;
# BUILD ENVIRONMENT&lt;br /&gt;
#########################################################################&lt;br /&gt;
#&lt;br /&gt;
# Defaults: BUILDENV=(!distcc color !ccache check !sign)&lt;br /&gt;
#  A negated environment option will do the opposite of the comments below.&lt;br /&gt;
#&lt;br /&gt;
#-- distcc:   Use the Distributed C/C++/ObjC compiler&lt;br /&gt;
#-- color:    Colorize output messages&lt;br /&gt;
#-- ccache:   Use ccache to cache compilation&lt;br /&gt;
#-- check:    Run the check() function if present in the PKGBUILD&lt;br /&gt;
#-- sign:     Generate PGP signature file&lt;br /&gt;
#&lt;br /&gt;
BUILDENV=(!distcc color !ccache check !sign)&lt;br /&gt;
#&lt;br /&gt;
#-- If using DistCC, your MAKEFLAGS will also need modification. In addition,&lt;br /&gt;
#-- specify a space-delimited list of hosts running in the DistCC cluster.&lt;br /&gt;
#DISTCC_HOSTS=&amp;quot;&amp;quot;&lt;br /&gt;
#&lt;br /&gt;
#-- Specify a directory for package building.&lt;br /&gt;
#BUILDDIR=/tmp/makepkg&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|1=BUILDDIR=/tmp/makepkg}} 行をアンコメントして {{ic|1=BUILDDIR=/tmp/builds}} などに設定すれば (もしくはデフォルトの値のままにすれば) Arch のデフォルトの {{ic|/tmp}} [[tmpfs]] が使用されます。&lt;br /&gt;
{{Note|[[tmpfs]] フォルダは {{ic|noexec}} オプションを付けずにマウントされている必要があります。このオプションを使うとビルドスクリプトやユーティリティが実行できません。また、[[tmpfs]] の記事に記されているように、デフォルトのサイズは利用できる RAM の半分となっており、容量を全て使いきってしまうおそれがあります。}}&lt;br /&gt;
[[tmpfs]] でコンパイルしたパッケージは再起動するとなくなってしまうので注意してください。そのため、何度もインストールするようなパッケージは他の（永続的な）ディレクトリに移動したほうが良いでしょう。&lt;br /&gt;
&lt;br /&gt;
==== ccache ====&lt;br /&gt;
&lt;br /&gt;
[[ccache]] を使うことでコンパイル結果をキャッシュしてビルド時間を短縮できます。&lt;br /&gt;
&lt;br /&gt;
=== md5sum を新規作成する ===&lt;br /&gt;
[http://allanmcrae.com/2013/04/pacman-4-1-released/ pacman 4.1] から {{ic|makepkg -g &amp;gt;&amp;gt; PKGBUILD}} は必要なくなり、pacman-contrib は {{ic|updpkgsums}} スクリプトに[https://projects.archlinux.org/pacman.git/tree/NEWS 併合]されました。このスクリプトを使って PKGBUILD の中に新しいチェックサムを生成することができます:&lt;br /&gt;
 $ updpkgsums&lt;br /&gt;
&lt;br /&gt;
=== Makepkg が PKGBUILD を二度利用する ===&lt;br /&gt;
Makepkg は PKGBUILD を二度実行します (最初に実行した時と、fakeroot 下で2回目)。PKGBUILD に置かれた標準から外れた関数は全て同じく二度実行されます。&lt;br /&gt;
&lt;br /&gt;
=== 圧縮しないパッケージを作成する ===&lt;br /&gt;
パッケージをローカルでインストールしたいだけの場合、[[Wikipedia:ja:xz (ファイルフォーマット)|LZMA2]] の圧縮と解凍を避けることでプロセスを高速化できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/makepkg.conf|2=&lt;br /&gt;
[...]&lt;br /&gt;
#PKGEXT=&#039;.pkg.tar.xz&#039;&lt;br /&gt;
PKGEXT=&#039;.pkg.tar&#039;&lt;br /&gt;
[...]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== マルチコアを利用して圧縮する ===&lt;br /&gt;
{{pkg|xz}} は[[Wikipedia:ja:対称型マルチプロセッシング|対称型マルチプロセッシング (SMP)]] による圧縮をサポートしています。 {{ic|--threads}}オプションを使うことでマルチコアを活用できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/makepkg.conf|2=&lt;br /&gt;
[...]&lt;br /&gt;
COMPRESSXZ=(xz -c -z &#039;&#039;&#039;-T0&#039;&#039;&#039; -)&lt;br /&gt;
[...]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== QMAKE を使用するパッケージで makepkg.conf の CFLAGS/CXXFLAGS/CPPFLAGS が適用されない ===&lt;br /&gt;
Qmake は {{ic|CFLAGS}} と {{ic|CXXFLAGS}} 変数を自動的に設定します。makepkg の設定ファイルで定義した変数を qmake に使わせるには、PKGBUILD を編集して [http://doc.qt.io/qt-5/qmake-variable-reference.html#qmake-cflags-release QMAKE_CFLAGS_RELEASE] と [http://doc.qt.io/qt-5/qmake-variable-reference.html#qmake-cxxflags-release QMAKE_CXXFLAGS_RELEASE] 変数を qmake に指定する必要があります。例:&lt;br /&gt;
&lt;br /&gt;
{{hc|PKGBUILD|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
build() {&lt;br /&gt;
  cd &amp;quot;$srcdir/$_pkgname-$pkgver-src&amp;quot;&lt;br /&gt;
  qmake-qt4 &amp;quot;$srcdir/$_pkgname-$pkgver-src/$_pkgname.pro&amp;quot; \&lt;br /&gt;
    PREFIX=/usr \&lt;br /&gt;
    CONFIG+=LINUX_INTEGRATED \&lt;br /&gt;
    INSTALL_ROOT_PATH=&amp;quot;$pkgdir&amp;quot;\&lt;br /&gt;
    QMAKE_CFLAGS_RELEASE=&amp;quot;${CFLAGS}&amp;quot;\&lt;br /&gt;
    QMAKE_CXXFLAGS_RELEASE=&amp;quot;${CXXFLAGS}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  make&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
もしくは、システム全体で設定したい場合、{{ic|qmake.conf}} を作成して [http://doc.qt.io/qt-5/qmake-environment-reference.html#qmakespec QMAKESPEC] 環境変数を設定してください。&lt;br /&gt;
&lt;br /&gt;
=== WARNING: Package contains reference to $srcdir ===&lt;br /&gt;
リテラル文字列 {{ic|$srcdir}} か {{ic|$pkgdir}} があなたのパッケージ内のインストールされたファイルのどれかに含まれています。&lt;br /&gt;
&lt;br /&gt;
ファイルを確認するには、makepkg のビルドディレクトリから次のコマンドを実行してください:&lt;br /&gt;
 $ grep -R &amp;quot;$(pwd)/src&amp;quot; pkg/&lt;br /&gt;
&lt;br /&gt;
詳しくは [http://www.mail-archive.com/arch-general@archlinux.org/msg15561.html こちら] を参照。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
* [https://github.com/pixelb/scripts/blob/master/scripts/gcccpuopt gcccpuopt]: 現在の CPU にあわせた gcc の cpu オプションを表示するスクリプト&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Fragment&amp;diff=5259</id>
		<title>利用者:Fragment</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Fragment&amp;diff=5259"/>
		<updated>2016-05-15T05:38:12Z</updated>

		<summary type="html">&lt;p&gt;Fragment: ページの作成:「中途半端な奴です」&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;中途半端な奴です&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Raspberry_Pi&amp;diff=5252</id>
		<title>Raspberry Pi</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Raspberry_Pi&amp;diff=5252"/>
		<updated>2016-05-08T06:16:42Z</updated>

		<summary type="html">&lt;p&gt;Fragment: /* SD カードのパフォーマンスを最大化するヒント */ https化&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ARM アーキテクチャ]]&lt;br /&gt;
[[cs:Raspberry Pi]]&lt;br /&gt;
[[en:Raspberry Pi]]&lt;br /&gt;
[[ru:Raspberry Pi]]&lt;br /&gt;
[[uk:Raspberry Pi]]&lt;br /&gt;
[[zh-CN:Raspberry Pi]]&lt;br /&gt;
[[Wikipedia:ja:Raspberry Pi|Wikipedia]] より:&lt;br /&gt;
:&amp;quot;&#039;&#039;Raspberry Pi はクレジットカードサイズのシングルボードコンピュータのシリーズである。イギリスのラズベリーパイ財団によって開発されており、学校で基本的なコンピュータ科学の教育を促進することを意図している。&#039;&#039;&amp;quot;&lt;br /&gt;
オリジナルモデルは Broadcom SoC BCM2835 ([[Wikipedia:ARM11|ARM11 マイクロアーキテクチャ]]) を使用していましたが、ラズベリーパイ財団は最近になってニューモデルの &amp;quot;Raspberry Pi 2&amp;quot; をリリースしました。RasPi 2 には BCM2836 SoC (クアッドコアの [[Wikipedia:ARM_Cortex-A7|ARM Cortex A7]] アーキテクチャ) が搭載されています。2016年2月には、BCM2837 SoC (クアッドコアの [[Wikipedia:ARM Cortex-A53|ARM Cortex-A53 アーキテクチャ]]) を搭載して WiFi と Bluetooth が組み込まれた Pi 3 が発売されました。&lt;br /&gt;
&lt;br /&gt;
== 前書き ==&lt;br /&gt;
この記事は完全なセットアップガイドではなく、読者が既に Arch システムを構築していることを前提としています。ユーザーの作成やシステムの管理など、基本的な作業の方法がよくわからない場合、Arch 初心者は[[ビギナーズガイド]]を読むことが推奨されています。&lt;br /&gt;
&lt;br /&gt;
{{Note|ARM アーキテクチャのサポートは公式 Arch Linux フォーラムではなく https://archlinuxarm.org で提供されています。ARM 固有の問題に関する投稿は [[フォーラムエチケット#Arch Linux ディストリビューションのサポートオンリー|Arch Linux ディストリビューションのサポートオンリー]]ポリシーに従って直ちにクローズされます。}}&lt;br /&gt;
&lt;br /&gt;
== システム構成 ==&lt;br /&gt;
&lt;br /&gt;
Raspberry Pi は ARM ベースのデバイスであり、ARM アーキテクチャ用にコンパイルされたバイナリが必要になります。ARM 用のバイナリは Arch Linux を ARM ベースのデバイスに移植している [http://archlinuxarm.org/about Arch Linux ARM プロジェクト] によって提供されています。ALARM プロジェクトのウェブサイトには独自のコミュニティとフォーラムがあります。オリジナルの Arch のフォーラムでは ARM に関連する問題は&#039;&#039;サポートされていません&#039;&#039;。Raspberry Pi 2 が登場したことで、デバイスのアーキテクチャによって必要なパッケージは2つに分かれています:&lt;br /&gt;
* ARMv6 (BCM2835): Raspberry Pi Model A, A+, B, B+, Zero&lt;br /&gt;
* ARMv7 (BCM2836): Raspberry Pi 2 (Model B+ ベース)&lt;br /&gt;
* ARMv8 (BCM2837): Raspberry Pi 3&lt;br /&gt;
&lt;br /&gt;
== Arch Linux ARM のインストール ==&lt;br /&gt;
&lt;br /&gt;
[http://archlinuxarm.org/platforms/armv6/raspberry-pi Arch Linux ARM Pi のドキュメント], [http://archlinuxarm.org/platforms/armv7/broadcom/raspberry-pi-2 Arch Linux ARM Pi2 のドキュメント], [https://archlinuxarm.org/platforms/armv8/broadcom/raspberry-pi-3 Arch Linux ARM Pi3 のドキュメント] を見てください。&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
ネットワークはあらかじめ設定されており、[[systemd-networkd]] によって dhcp モードでオンボードの NIC が使われます。ケーブルが接続されていれば、ほとんどのルーターで自動的に IP が取得されます。&lt;br /&gt;
&lt;br /&gt;
最初から [[Secure Shell]] を使って SD カードにアクセスする場合は、Raspberry Pi をイーサネットケーブルで接続してルーターの設定を通して IP アドレスを割り当てるのが一番簡単です。root で直接アクセスすることができます (パスワード: root)。まず初めにパスワードを変更することを強く推奨します。任意で [[SSH 鍵]]も設定してください。&lt;br /&gt;
&lt;br /&gt;
=== Ethernet を使わずに WLAN を設定 ===&lt;br /&gt;
&lt;br /&gt;
無線インターネット接続を確立する必要がある場合、いくつかパッケージを追加でダウンロードして SD カードに保存する必要があります。[[netctl]] を使用する場合、最低でも [[WPA supplicant]] と依存パッケージの &#039;&#039;libnl&#039;&#039; が必要になります。また、&#039;&#039;dialog&#039;&#039; と依存パッケージの &#039;&#039;ncurses&#039;&#039; もインストールしておいたほうが便利でしょう。&lt;br /&gt;
&lt;br /&gt;
まとめると以下を実行する必要があります:&lt;br /&gt;
* 他のコンピュータから SD カードにパッケージをダウンロード&lt;br /&gt;
* Raspberry Pi にパッケージをインストール・設定&lt;br /&gt;
&lt;br /&gt;
必要なパッケージは全て [https://archlinuxarm.org/packages Arch Linux ARM の公式ウェブサイト] で見つけることができ、[http://mirror.archlinuxarm.org Arch Linux ARM のリポジトリ] からダウンロードできます。&lt;br /&gt;
&lt;br /&gt;
その後、Raspberry Pi を接続して立ち上げて、モニター/キーボードを使うか[[#シリアルコンソール|シリアルコンソール]]でログインします。そして、パッケージを[[en2:Offline_installation_of_packages|オフラインインストール]]してください。パッケージの依存パッケージが欠けている場合は、依存パッケージもダウンロードしてインストールしてください。&lt;br /&gt;
&lt;br /&gt;
パッケージをインストールしたら、インターネットに接続してビギナーズガイドの[[ビギナーズガイド#無線|このセクション]]に書かれているように設定します。&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
{{Note|必須モジュール {{ic|snd-bcm2835}} はデフォルトで自動ロードされます。}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;alsa-utils&#039;&#039;&#039;, &#039;&#039;&#039;alsa-firmware&#039;&#039;&#039;, &#039;&#039;&#039;alsa-lib&#039;&#039;&#039;, &#039;&#039;&#039;alsa-plugins&#039;&#039;&#039; パッケージをインストールしてください:&lt;br /&gt;
 # pacman -S alsa-utils alsa-firmware alsa-lib alsa-plugins&lt;br /&gt;
&lt;br /&gt;
ARM の Linux カーネルバージョン 4.4.x では ALSA とサウンドモジュールに大きな変更があります。最新のカーネルで {{ic|alsamixer}} などのツールを使用するには {{ic|/boot/config.txt}} を編集して以下の行を記述してください:&lt;br /&gt;
 dtparam=audio=on&lt;br /&gt;
&lt;br /&gt;
任意で、{{ic|alsamixer}} を使ってデフォルトのボリュームを調整してください。唯一の音源 &amp;quot;PCM&amp;quot; がミュートされていないことを確認してください (ミュートされている場合は {{ic|MM}} と表示されます、ミュートを解除するには {{ic|M}} を押して下さい)。&lt;br /&gt;
&lt;br /&gt;
音源の出力を選択するには:&lt;br /&gt;
 $ amixer cset numid=3 &#039;&#039;x&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;x&#039;&#039;}} は以下のどれかになります:&lt;br /&gt;
*0 は自動&lt;br /&gt;
*1 はアナログ出力&lt;br /&gt;
*2 は HDMI&lt;br /&gt;
&lt;br /&gt;
=== HDMI オーディオの注意 ===&lt;br /&gt;
アプリケーションによっては音声を HDMI で出力するために {{ic|/boot/config.txt}} に設定が必要です:&lt;br /&gt;
 hdmi_drive=2&lt;br /&gt;
&lt;br /&gt;
== ビデオ ==&lt;br /&gt;
&lt;br /&gt;
=== HDMI / アナログ TV 出力 ===&lt;br /&gt;
デフォルト設定では、Raspberry Pi は [[wikipedia:ja:HDMI|HDMI]] モニターが接続されているときは HDMI を使うようになっています。接続されていない場合はアナログ TV 出力 (コンポジット出力あるいは RCA) が使われます。&lt;br /&gt;
&lt;br /&gt;
HDMI やアナログ TV 出力のオン・オフを切り替えるには、次を見て下さい:&lt;br /&gt;
&lt;br /&gt;
 /opt/vc/bin/tvservice&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;-s&#039;&#039; パラメータでディスプレイの状態を確認し、&#039;&#039;-o&#039;&#039; パラメータでディスプレイをオフに、&#039;&#039;-p&#039;&#039; パラメータで優先設定を使って HDMI をオンにします。&lt;br /&gt;
&lt;br /&gt;
オーバースキャン・アンダースキャンを適切に修正するには調整が必要で、多くの設定がある {{ic|boot/config.txt}} で簡単に行うことができます。修正するには、コメントの指示に従って適切な行の設定をアンコメントしてください:&lt;br /&gt;
&lt;br /&gt;
 # uncomment the following to adjust overscan. Use positive numbers if console&lt;br /&gt;
 # goes off screen, and negative if there is too much border&lt;br /&gt;
 #overscan_left=16&lt;br /&gt;
 overscan_right=8&lt;br /&gt;
 overscan_top=-16&lt;br /&gt;
 overscan_bottom=-16&lt;br /&gt;
&lt;br /&gt;
アナログビデオ出力を使いたいユーザーは NTSC 以外の出力のオプションを含んでいる[https://raw.github.com/Evilpaul/RPi-config/master/config.txt この]設定ファイルを見て下さい。&lt;br /&gt;
&lt;br /&gt;
新しい設定を適用するには再起動が必要です。&lt;br /&gt;
&lt;br /&gt;
=== アナログ TV 出力の注意事項 ===&lt;br /&gt;
&lt;br /&gt;
Raspberry Pi 1 モデル B+ と Raspberry Pi 2 モデル B から、コンポジットビデオ端子はなくなって、代わりに 3.5mm の動画/音声ジャックからコンポジット信号を出力するようになっています。RCA ケーブルによっては赤や白の音声端子で動画を接続する Raspberry Pi の規格に対応していない場合があります [http://www.raspberrypi-spy.co.uk/2014/07/raspberry-pi-model-b-3-5mm-audiovideo-jack/]。&lt;br /&gt;
&lt;br /&gt;
=== X.org ドライバー ===&lt;br /&gt;
&lt;br /&gt;
Raspberry Pi の X.org ドライバーは &#039;&#039;&#039;xf86-video-fbdev&#039;&#039;&#039; あるいは &#039;&#039;xf86-video-fbturbo-git&#039;&#039; パッケージでインストールできます:&lt;br /&gt;
 # pacman -S xf86-video-fbdev&lt;br /&gt;
&lt;br /&gt;
== オンボードのハードウェアセンサー ==&lt;br /&gt;
=== 温度 ===&lt;br /&gt;
温度センサーは &#039;&#039;&#039;raspberrypi-firmware-tools&#039;&#039;&#039; パッケージにあるユーティリティで使うことができます。RPi は BCM2835 SoC (CPU/GPU) 上にセンサーを搭載しています:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ /opt/vc/bin/vcgencmd measure_temp|2=&lt;br /&gt;
temp=49.8&#039;C&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
また、ファイルシステムから読み取ることもできます:&lt;br /&gt;
{{hc|$ cat /sys/class/thermal/thermal_zone0/temp|2=&lt;br /&gt;
49768&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
人間が読めるように出力するには:&lt;br /&gt;
{{hc|$ awk &#039;{printf &amp;quot;%3.1f°C\n&amp;quot;, $1/1000}&#039; /sys/class/thermal/thermal_zone0/temp|2=&lt;br /&gt;
54.1°C&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== 電圧 ===&lt;br /&gt;
同じように {{ic|/opt/vc/bin/vcgencmd}} で4つの異なる電圧をチェックすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ /opt/vc/bin/vcgencmd measure_volts &#039;&#039;&amp;lt;id&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;&amp;lt;id&amp;gt;&#039;&#039;}} は以下のどれかに置き換えてください:&lt;br /&gt;
*core はコアの電圧&lt;br /&gt;
*sdram_c は sdram Core の電圧&lt;br /&gt;
*sdram_i は sdram I/O の電圧&lt;br /&gt;
*sdram_p は sdram PHY の電圧&lt;br /&gt;
&lt;br /&gt;
=== 軽量なモニタリングスイート ===&lt;br /&gt;
{{AUR|monitorix}} は v3.2.0 から RPi をサポートしています。スクリーンショットは[http://www.monitorix.org/screenshots.html ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
== オーバークロック / アンダークロック ==&lt;br /&gt;
{{ic|/boot/config.txt}} を編集することで RPi をオーバークロックさせることができます、例:&lt;br /&gt;
 &lt;br /&gt;
 arm_freq=800&lt;br /&gt;
 arm_freq_min=100&lt;br /&gt;
 core_freq=300&lt;br /&gt;
 core_freq_min=75&lt;br /&gt;
 sdram_freq=400&lt;br /&gt;
 over_voltage=0&lt;br /&gt;
&lt;br /&gt;
{{ic|*_min}} の行は任意で、それぞれの設定の最低値を定義します。システムの負担が低い時は、指定した値まで下がります。オプションの詳しい説明や例は elinux の [http://elinux.org/RPiconfig#Overclocking Overclocking] 記事を見て下さい。&lt;br /&gt;
&lt;br /&gt;
新しい設定を適用するには再起動が必要です。&lt;br /&gt;
&lt;br /&gt;
CPU のオーバークロック設定は、負担が高い時にガバナーが CPU の周波数を上げる場合にだけ適用されます。次のコマンドで現在の CPU の周波数を確認できます:&lt;br /&gt;
 $ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq&lt;br /&gt;
&lt;br /&gt;
スケーリングガバナーの詳細は [[CPU 周波数スケーリング]]を見てください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|以下のスクリプトを実行すると RPi に設定された全ての周波数が表示されます:&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
for src in arm core h264 isp v3d uart pwm emmc pixel vec hdmi dpi ; do&lt;br /&gt;
    echo -e &amp;quot;$src:\t$(/opt/vc/bin/vcgencmd  measure_clock $src)&amp;quot;&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== SD カードのパフォーマンスを最大化するヒント ==&lt;br /&gt;
&lt;br /&gt;
システムのレスポンスは SD メディアの速度に大きな影響を受けます。特にシステムのアップデートなどディスク I/O に関する処理を行っている際はそれが際立つでしょう。pacman がファイルシステムにファイルを書き出すときに [https://archlinuxarm.org/forum/viewtopic.php?f=64&amp;amp;t=9467 頻繁に停止する] ような場合、RPi や RPi2 の接続バスが足を引っ張っているというよりは、SD (あるいはマイクロ SD) カードがボトルネックとなっている可能性があります。詳しくは[[ベンチマーク#フラッシュメディア]]を参照。&lt;br /&gt;
&lt;br /&gt;
一般的なパフォーマンスを上げる方法については[[パフォーマンスの最大化]]や[[ソリッドステートドライブ#SSD の読み書きを最小化するヒント]]を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== 起動時に fsck を有効にする ===&lt;br /&gt;
&lt;br /&gt;
[[fsck#ブート時のチェック]]を見てください。カーネルパラメータは {{ic|/boot/cmdline.txt}} で指定するようにしてください。&lt;br /&gt;
&lt;br /&gt;
== シリアルコンソール ==&lt;br /&gt;
ブートメッセージを見るには、デフォルトの {{ic|/boot/cmdline.txt}} を編集して、{{ic|loglevel}} を {{ic|5}} に変更してください:&lt;br /&gt;
 loglevel=5&lt;br /&gt;
&lt;br /&gt;
速度を 115200 から 38400 に変える:&lt;br /&gt;
 console=ttyAMA0,38400 kgdboc=ttyAMA0,38400&lt;br /&gt;
&lt;br /&gt;
getty サービスを起動する:&lt;br /&gt;
 # systemctl start getty@ttyAMA0&lt;br /&gt;
&lt;br /&gt;
ブート時に有効にする:&lt;br /&gt;
 # systemctl enable getty@ttyAMA0.service&lt;br /&gt;
&lt;br /&gt;
適当な service リンクを作成する:&lt;br /&gt;
 # ln -s /usr/lib/systemd/system/serial-getty@.service /etc/systemd/system/getty.target.wants/serial-getty@ttyAMA0.service&lt;br /&gt;
&lt;br /&gt;
そして PC から接続:&lt;br /&gt;
 # screen /dev/ttyUSB0 38400&lt;br /&gt;
&lt;br /&gt;
== Raspberry Pi カメラモジュール ==&lt;br /&gt;
カメラモジュールのコマンドは &#039;&#039;&#039;raspberrypi-firmware-tools&#039;&#039;&#039; パッケージに含まれています - このパッケージはデフォルトでインストールされています。以下のコマンドで使うことができます:&lt;br /&gt;
 $ /opt/vc/bin/raspistill&lt;br /&gt;
 $ /opt/vc/bin/raspivid&lt;br /&gt;
&lt;br /&gt;
{{ic|/boot/config.txt}} に以下を追加する必要があります:&lt;br /&gt;
 gpu_mem=128&lt;br /&gt;
 start_file=start_x.elf&lt;br /&gt;
 fixup_file=fixup_x.dat&lt;br /&gt;
&lt;br /&gt;
LED をオフにする設定 (任意):&lt;br /&gt;
 disable_camera_led=1&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合: &lt;br /&gt;
 mmal: mmal_vc_component_enable: failed to enable component: ENOSPC&lt;br /&gt;
 mmal: camera component couldn&#039;t be enabled&lt;br /&gt;
 mmal: main: Failed to create camera component&lt;br /&gt;
 mmal: Failed to run camera app. Please check for firmware updates&lt;br /&gt;
&lt;br /&gt;
{{ic|/boot/config.txt}} に以下の値を設定してみてください:&lt;br /&gt;
 cma_lwm=&lt;br /&gt;
 cma_hwm=&lt;br /&gt;
 cma_offline_start=&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 mmal: mmal_vc_component_create: failed to create component &#039;vc.ril.camera&#039; (1:ENOMEM)&lt;br /&gt;
 mmal: mmal_component_create_core: could not create component &#039;vc.ril.camera&#039; (1)&lt;br /&gt;
 mmal: Failed to create camera component&lt;br /&gt;
 mmal: main: Failed to create camera component&lt;br /&gt;
 mmal: Only 64M of gpu_mem is configured. Try running &amp;quot;sudo raspi-config&amp;quot; and ensure that &amp;quot;memory_split&amp;quot; has a value of 128 or greater&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/modprobe.d/blacklist.conf}} に以下の行を追加してください:&lt;br /&gt;
 blacklist i2c_bcm2708&lt;br /&gt;
&lt;br /&gt;
({{ic|/dev/video0}} を使用する) 標準的なアプリケーションを使うには V4L2 ドライバーをロードする必要があります。以下のように自動ロードファイルを作成することで起動時に自動的にロードさせることが可能です:&lt;br /&gt;
{{hc|/etc/modules-load.d/rpi-camera.conf|bcm2835-v4l2}}&lt;br /&gt;
&lt;br /&gt;
== ハードウェア乱数生成器 ==&lt;br /&gt;
Raspberry Pi 用の Arch Linux ARM には &#039;&#039;&#039;rng-tools&#039;&#039;&#039; パッケージがインストールされており、{{ic|bcm2835-rng}} が起動時にロードされるように設定されています ([https://archlinuxarm.org/forum/viewtopic.php?f=31&amp;amp;t=4993#p27708 こちら] を参照) が、Hardware RNG Entropy Gatherer Daemon (&#039;&#039;&#039;rngd&#039;&#039;&#039;) にハードウェア乱数生成器の場所を教えてやる必要があります。&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/conf.d/rngd}} を編集することで設定します:&lt;br /&gt;
 RNGD_OPTS=&amp;quot;-o /dev/random -r /dev/hwrng&amp;quot;&lt;br /&gt;
設定したら &#039;&#039;&#039;rngd&#039;&#039;&#039; デーモンを[[再起動]]してください:&lt;br /&gt;
 # systemctl restart rngd&lt;br /&gt;
&lt;br /&gt;
この設定で、ハードウェア乱数生成器からのデータがカーネルのエントロピープール ({{ic|/dev/random}}) に取り入れられるようになります。エントロピーを確認するには:&lt;br /&gt;
&lt;br /&gt;
 # cat /proc/sys/kernel/random/entropy_avail&lt;br /&gt;
&lt;br /&gt;
{{Note|古いイメージからカーネルを更新すると旧式の {{ic|bcm2708-rng}} を見つけられず &#039;&#039;&#039;systemd-modules-load.service&#039;&#039;&#039; の起動に失敗していることがあります。その場合には {{ic|/etc/modules-load.d/raspberrypi.conf}} を設定し直し、 &#039;&#039;&#039;systemd-modules-load.service&#039;&#039;&#039; を再起動すると解決します。([https://archlinuxarm.org/forum/viewtopic.php?f&amp;amp;#61;64&amp;amp;t&amp;amp;#61;10153 こちら] を参照) }}&lt;br /&gt;
&lt;br /&gt;
== GPIO ==&lt;br /&gt;
=== SPI ===&lt;br /&gt;
{{ic|/dev/spidev*}} デバイスを有効にするには、以下の行をアンコメントしてください:&lt;br /&gt;
{{hc|head=/boot/config.txt|output=&lt;br /&gt;
device_tree_param=spi=on&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
Python から GPIO ピンを使えるようにするために、[https://pypi.python.org/pypi/RPi.GPIO RPi.GPIO] ライブラリを使用することができます。[[AUR|AUR]] から {{AUR|python-raspberry-gpio}} か {{AUR|python2-raspberry-gpio}} のどちらかをインストールしてください。&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;i2c-tools&#039;&#039; と &#039;&#039;lm_sensors&#039;&#039; パッケージをインストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{ic|/boot/config.txt}} に以下を追加することで i2c ハードウェアを有効にするようにブートローダーを設定します:&lt;br /&gt;
 dtparam=i2c_arm=on&lt;br /&gt;
&lt;br /&gt;
{{ic|i2c-dev}} と {{ic|i2c-bcm2708}} モジュールを起動時にロードするように設定:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/raspberrypi.conf|i2c-dev&lt;br /&gt;
i2c-bcm2708}}&lt;br /&gt;
&lt;br /&gt;
Raspberry Pi を再起動してから次のコマンドを実行してハードウェアアドレスを取得:&lt;br /&gt;
 i2cdetect -y 0&lt;br /&gt;
&lt;br /&gt;
{{Note|I2C0 ではなく I2C1 ポートを使用する場合、{{ic|i2cdetect -y 1}} を実行して、以下のコマンドで使われている {{ic|i2c-0}} を {{ic|i2c-1}} に置き換える必要があります。}}&lt;br /&gt;
&lt;br /&gt;
そしてデバイスを初期化するように Linux を設定します。以下のコマンドのハードウェアアドレスは先のコマンドで取得したアドレスに置き換えてください (&#039;0x&#039; を前に付けます、例: 0x48)。デバイス名は自由に決めて下さい:&lt;br /&gt;
 echo &amp;lt;devicename&amp;gt; &amp;lt;hardware address&amp;gt; &amp;gt;/sys/class/i2c-adapter/i2c-0/new_device&lt;br /&gt;
&lt;br /&gt;
dmesg コマンドを使ってカーネルメッセージを確認すると、以下のような新しいエントリが追加されているはずです:&lt;br /&gt;
 i2c-0: new_device: Instantiated device ds1621 at 0x48&lt;br /&gt;
最後に、センサーの出力を読み出す:&lt;br /&gt;
 sensors&lt;br /&gt;
&lt;br /&gt;
== QEMU chroot ==&lt;br /&gt;
&lt;br /&gt;
場合によっては Raspberry Pi を動かすよりもディスクイメージを直接操作したほうが楽だということもあるでしょう。RPi の root パーティションが含まれている SD カードをマウントして、そこに chroot することで直接操作することができます。chroot からは、&#039;&#039;pacman&#039;&#039; を実行してパッケージをインストールしたり、巨大なライブラリをコンパイルすることが可能です。実行可能ファイルは ARM アーキテクチャ用のものなので、[[QEMU]] を使って x86 への変換を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|2016年1月現在、ARM の QEMU で {{pkg|make}} が動作しないため、以下の方法でパッケージをビルドすることはできません。ARM パッケージのビルドが必要な場合は [https://archlinuxarm.org/wiki/Distcc_Cross-Compiling Arch Linux ARM ウェブサイトのガイド] に従ってクロスコンパイラをビルドしてください。}}&lt;br /&gt;
&lt;br /&gt;
[[AUR]] から {{AUR|binfmt-support}} と {{AUR|qemu-user-static}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
ARM から x86 への変換が有効かどうか確認:&lt;br /&gt;
&lt;br /&gt;
 # update-binfmts --importdir /var/lib/binfmts/ --import&lt;br /&gt;
 # update-binfmts --display qemu-arm&lt;br /&gt;
&lt;br /&gt;
ARM から x86 への変換が有効でない場合、update-binfmts を使って有効にしてください:&lt;br /&gt;
 # update-binfmts --enable qemu-arm&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|mnt/}} にマウントします (デバイス名は適宜置き換えてください)。&lt;br /&gt;
&lt;br /&gt;
 # mkdir mnt&lt;br /&gt;
 # mount /dev/mmcblk0p2 mnt&lt;br /&gt;
&lt;br /&gt;
(ARM からの変換を処理する) QEMU の実行可能ファイルを SD カードの root にコピー:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/bin/qemu-arm-static mnt/usr/bin&lt;br /&gt;
&lt;br /&gt;
最後に [[Change Root#Change root]] に書かれているように SD カードの root に chroot してください。{{ic|qemu-arm-static}} コマンドは {{ic|chroot}} の中から呼び出す必要があります:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/arch /usr/bin/qemu-arm-static /bin/bash&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
* [https://www.raspberrypi.org Raspberry Pi] - 公式ウェブサイト&lt;br /&gt;
* [http://elinux.org/RPiconfig RPi Config] - ボンネットの下の設定に関連する情報がまとまっています&lt;br /&gt;
* [http://elinux.org/RPI_vcgencmd_usage RPi vcgencmd usage] - ファームウェアコマンドの vcgencmd の概要&lt;br /&gt;
* [http://archpi.dabase.com/ Arch Linux ARM on Raspberry PI] - RPi で Arch Linux を動かす時のヒントが書かれている FAQ スタイルのサイト&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Raspberry_Pi&amp;diff=5251</id>
		<title>Raspberry Pi</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Raspberry_Pi&amp;diff=5251"/>
		<updated>2016-05-08T06:12:13Z</updated>

		<summary type="html">&lt;p&gt;Fragment: /* ネットワーク */ 可能な範囲のhttps化&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ARM アーキテクチャ]]&lt;br /&gt;
[[cs:Raspberry Pi]]&lt;br /&gt;
[[en:Raspberry Pi]]&lt;br /&gt;
[[ru:Raspberry Pi]]&lt;br /&gt;
[[uk:Raspberry Pi]]&lt;br /&gt;
[[zh-CN:Raspberry Pi]]&lt;br /&gt;
[[Wikipedia:ja:Raspberry Pi|Wikipedia]] より:&lt;br /&gt;
:&amp;quot;&#039;&#039;Raspberry Pi はクレジットカードサイズのシングルボードコンピュータのシリーズである。イギリスのラズベリーパイ財団によって開発されており、学校で基本的なコンピュータ科学の教育を促進することを意図している。&#039;&#039;&amp;quot;&lt;br /&gt;
オリジナルモデルは Broadcom SoC BCM2835 ([[Wikipedia:ARM11|ARM11 マイクロアーキテクチャ]]) を使用していましたが、ラズベリーパイ財団は最近になってニューモデルの &amp;quot;Raspberry Pi 2&amp;quot; をリリースしました。RasPi 2 には BCM2836 SoC (クアッドコアの [[Wikipedia:ARM_Cortex-A7|ARM Cortex A7]] アーキテクチャ) が搭載されています。2016年2月には、BCM2837 SoC (クアッドコアの [[Wikipedia:ARM Cortex-A53|ARM Cortex-A53 アーキテクチャ]]) を搭載して WiFi と Bluetooth が組み込まれた Pi 3 が発売されました。&lt;br /&gt;
&lt;br /&gt;
== 前書き ==&lt;br /&gt;
この記事は完全なセットアップガイドではなく、読者が既に Arch システムを構築していることを前提としています。ユーザーの作成やシステムの管理など、基本的な作業の方法がよくわからない場合、Arch 初心者は[[ビギナーズガイド]]を読むことが推奨されています。&lt;br /&gt;
&lt;br /&gt;
{{Note|ARM アーキテクチャのサポートは公式 Arch Linux フォーラムではなく https://archlinuxarm.org で提供されています。ARM 固有の問題に関する投稿は [[フォーラムエチケット#Arch Linux ディストリビューションのサポートオンリー|Arch Linux ディストリビューションのサポートオンリー]]ポリシーに従って直ちにクローズされます。}}&lt;br /&gt;
&lt;br /&gt;
== システム構成 ==&lt;br /&gt;
&lt;br /&gt;
Raspberry Pi は ARM ベースのデバイスであり、ARM アーキテクチャ用にコンパイルされたバイナリが必要になります。ARM 用のバイナリは Arch Linux を ARM ベースのデバイスに移植している [http://archlinuxarm.org/about Arch Linux ARM プロジェクト] によって提供されています。ALARM プロジェクトのウェブサイトには独自のコミュニティとフォーラムがあります。オリジナルの Arch のフォーラムでは ARM に関連する問題は&#039;&#039;サポートされていません&#039;&#039;。Raspberry Pi 2 が登場したことで、デバイスのアーキテクチャによって必要なパッケージは2つに分かれています:&lt;br /&gt;
* ARMv6 (BCM2835): Raspberry Pi Model A, A+, B, B+, Zero&lt;br /&gt;
* ARMv7 (BCM2836): Raspberry Pi 2 (Model B+ ベース)&lt;br /&gt;
* ARMv8 (BCM2837): Raspberry Pi 3&lt;br /&gt;
&lt;br /&gt;
== Arch Linux ARM のインストール ==&lt;br /&gt;
&lt;br /&gt;
[http://archlinuxarm.org/platforms/armv6/raspberry-pi Arch Linux ARM Pi のドキュメント], [http://archlinuxarm.org/platforms/armv7/broadcom/raspberry-pi-2 Arch Linux ARM Pi2 のドキュメント], [https://archlinuxarm.org/platforms/armv8/broadcom/raspberry-pi-3 Arch Linux ARM Pi3 のドキュメント] を見てください。&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
ネットワークはあらかじめ設定されており、[[systemd-networkd]] によって dhcp モードでオンボードの NIC が使われます。ケーブルが接続されていれば、ほとんどのルーターで自動的に IP が取得されます。&lt;br /&gt;
&lt;br /&gt;
最初から [[Secure Shell]] を使って SD カードにアクセスする場合は、Raspberry Pi をイーサネットケーブルで接続してルーターの設定を通して IP アドレスを割り当てるのが一番簡単です。root で直接アクセスすることができます (パスワード: root)。まず初めにパスワードを変更することを強く推奨します。任意で [[SSH 鍵]]も設定してください。&lt;br /&gt;
&lt;br /&gt;
=== Ethernet を使わずに WLAN を設定 ===&lt;br /&gt;
&lt;br /&gt;
無線インターネット接続を確立する必要がある場合、いくつかパッケージを追加でダウンロードして SD カードに保存する必要があります。[[netctl]] を使用する場合、最低でも [[WPA supplicant]] と依存パッケージの &#039;&#039;libnl&#039;&#039; が必要になります。また、&#039;&#039;dialog&#039;&#039; と依存パッケージの &#039;&#039;ncurses&#039;&#039; もインストールしておいたほうが便利でしょう。&lt;br /&gt;
&lt;br /&gt;
まとめると以下を実行する必要があります:&lt;br /&gt;
* 他のコンピュータから SD カードにパッケージをダウンロード&lt;br /&gt;
* Raspberry Pi にパッケージをインストール・設定&lt;br /&gt;
&lt;br /&gt;
必要なパッケージは全て [https://archlinuxarm.org/packages Arch Linux ARM の公式ウェブサイト] で見つけることができ、[http://mirror.archlinuxarm.org Arch Linux ARM のリポジトリ] からダウンロードできます。&lt;br /&gt;
&lt;br /&gt;
その後、Raspberry Pi を接続して立ち上げて、モニター/キーボードを使うか[[#シリアルコンソール|シリアルコンソール]]でログインします。そして、パッケージを[[en2:Offline_installation_of_packages|オフラインインストール]]してください。パッケージの依存パッケージが欠けている場合は、依存パッケージもダウンロードしてインストールしてください。&lt;br /&gt;
&lt;br /&gt;
パッケージをインストールしたら、インターネットに接続してビギナーズガイドの[[ビギナーズガイド#無線|このセクション]]に書かれているように設定します。&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
{{Note|必須モジュール {{ic|snd-bcm2835}} はデフォルトで自動ロードされます。}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;alsa-utils&#039;&#039;&#039;, &#039;&#039;&#039;alsa-firmware&#039;&#039;&#039;, &#039;&#039;&#039;alsa-lib&#039;&#039;&#039;, &#039;&#039;&#039;alsa-plugins&#039;&#039;&#039; パッケージをインストールしてください:&lt;br /&gt;
 # pacman -S alsa-utils alsa-firmware alsa-lib alsa-plugins&lt;br /&gt;
&lt;br /&gt;
ARM の Linux カーネルバージョン 4.4.x では ALSA とサウンドモジュールに大きな変更があります。最新のカーネルで {{ic|alsamixer}} などのツールを使用するには {{ic|/boot/config.txt}} を編集して以下の行を記述してください:&lt;br /&gt;
 dtparam=audio=on&lt;br /&gt;
&lt;br /&gt;
任意で、{{ic|alsamixer}} を使ってデフォルトのボリュームを調整してください。唯一の音源 &amp;quot;PCM&amp;quot; がミュートされていないことを確認してください (ミュートされている場合は {{ic|MM}} と表示されます、ミュートを解除するには {{ic|M}} を押して下さい)。&lt;br /&gt;
&lt;br /&gt;
音源の出力を選択するには:&lt;br /&gt;
 $ amixer cset numid=3 &#039;&#039;x&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;x&#039;&#039;}} は以下のどれかになります:&lt;br /&gt;
*0 は自動&lt;br /&gt;
*1 はアナログ出力&lt;br /&gt;
*2 は HDMI&lt;br /&gt;
&lt;br /&gt;
=== HDMI オーディオの注意 ===&lt;br /&gt;
アプリケーションによっては音声を HDMI で出力するために {{ic|/boot/config.txt}} に設定が必要です:&lt;br /&gt;
 hdmi_drive=2&lt;br /&gt;
&lt;br /&gt;
== ビデオ ==&lt;br /&gt;
&lt;br /&gt;
=== HDMI / アナログ TV 出力 ===&lt;br /&gt;
デフォルト設定では、Raspberry Pi は [[wikipedia:ja:HDMI|HDMI]] モニターが接続されているときは HDMI を使うようになっています。接続されていない場合はアナログ TV 出力 (コンポジット出力あるいは RCA) が使われます。&lt;br /&gt;
&lt;br /&gt;
HDMI やアナログ TV 出力のオン・オフを切り替えるには、次を見て下さい:&lt;br /&gt;
&lt;br /&gt;
 /opt/vc/bin/tvservice&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;-s&#039;&#039; パラメータでディスプレイの状態を確認し、&#039;&#039;-o&#039;&#039; パラメータでディスプレイをオフに、&#039;&#039;-p&#039;&#039; パラメータで優先設定を使って HDMI をオンにします。&lt;br /&gt;
&lt;br /&gt;
オーバースキャン・アンダースキャンを適切に修正するには調整が必要で、多くの設定がある {{ic|boot/config.txt}} で簡単に行うことができます。修正するには、コメントの指示に従って適切な行の設定をアンコメントしてください:&lt;br /&gt;
&lt;br /&gt;
 # uncomment the following to adjust overscan. Use positive numbers if console&lt;br /&gt;
 # goes off screen, and negative if there is too much border&lt;br /&gt;
 #overscan_left=16&lt;br /&gt;
 overscan_right=8&lt;br /&gt;
 overscan_top=-16&lt;br /&gt;
 overscan_bottom=-16&lt;br /&gt;
&lt;br /&gt;
アナログビデオ出力を使いたいユーザーは NTSC 以外の出力のオプションを含んでいる[https://raw.github.com/Evilpaul/RPi-config/master/config.txt この]設定ファイルを見て下さい。&lt;br /&gt;
&lt;br /&gt;
新しい設定を適用するには再起動が必要です。&lt;br /&gt;
&lt;br /&gt;
=== アナログ TV 出力の注意事項 ===&lt;br /&gt;
&lt;br /&gt;
Raspberry Pi 1 モデル B+ と Raspberry Pi 2 モデル B から、コンポジットビデオ端子はなくなって、代わりに 3.5mm の動画/音声ジャックからコンポジット信号を出力するようになっています。RCA ケーブルによっては赤や白の音声端子で動画を接続する Raspberry Pi の規格に対応していない場合があります [http://www.raspberrypi-spy.co.uk/2014/07/raspberry-pi-model-b-3-5mm-audiovideo-jack/]。&lt;br /&gt;
&lt;br /&gt;
=== X.org ドライバー ===&lt;br /&gt;
&lt;br /&gt;
Raspberry Pi の X.org ドライバーは &#039;&#039;&#039;xf86-video-fbdev&#039;&#039;&#039; あるいは &#039;&#039;xf86-video-fbturbo-git&#039;&#039; パッケージでインストールできます:&lt;br /&gt;
 # pacman -S xf86-video-fbdev&lt;br /&gt;
&lt;br /&gt;
== オンボードのハードウェアセンサー ==&lt;br /&gt;
=== 温度 ===&lt;br /&gt;
温度センサーは &#039;&#039;&#039;raspberrypi-firmware-tools&#039;&#039;&#039; パッケージにあるユーティリティで使うことができます。RPi は BCM2835 SoC (CPU/GPU) 上にセンサーを搭載しています:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ /opt/vc/bin/vcgencmd measure_temp|2=&lt;br /&gt;
temp=49.8&#039;C&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
また、ファイルシステムから読み取ることもできます:&lt;br /&gt;
{{hc|$ cat /sys/class/thermal/thermal_zone0/temp|2=&lt;br /&gt;
49768&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
人間が読めるように出力するには:&lt;br /&gt;
{{hc|$ awk &#039;{printf &amp;quot;%3.1f°C\n&amp;quot;, $1/1000}&#039; /sys/class/thermal/thermal_zone0/temp|2=&lt;br /&gt;
54.1°C&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== 電圧 ===&lt;br /&gt;
同じように {{ic|/opt/vc/bin/vcgencmd}} で4つの異なる電圧をチェックすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ /opt/vc/bin/vcgencmd measure_volts &#039;&#039;&amp;lt;id&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;&amp;lt;id&amp;gt;&#039;&#039;}} は以下のどれかに置き換えてください:&lt;br /&gt;
*core はコアの電圧&lt;br /&gt;
*sdram_c は sdram Core の電圧&lt;br /&gt;
*sdram_i は sdram I/O の電圧&lt;br /&gt;
*sdram_p は sdram PHY の電圧&lt;br /&gt;
&lt;br /&gt;
=== 軽量なモニタリングスイート ===&lt;br /&gt;
{{AUR|monitorix}} は v3.2.0 から RPi をサポートしています。スクリーンショットは[http://www.monitorix.org/screenshots.html ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
== オーバークロック / アンダークロック ==&lt;br /&gt;
{{ic|/boot/config.txt}} を編集することで RPi をオーバークロックさせることができます、例:&lt;br /&gt;
 &lt;br /&gt;
 arm_freq=800&lt;br /&gt;
 arm_freq_min=100&lt;br /&gt;
 core_freq=300&lt;br /&gt;
 core_freq_min=75&lt;br /&gt;
 sdram_freq=400&lt;br /&gt;
 over_voltage=0&lt;br /&gt;
&lt;br /&gt;
{{ic|*_min}} の行は任意で、それぞれの設定の最低値を定義します。システムの負担が低い時は、指定した値まで下がります。オプションの詳しい説明や例は elinux の [http://elinux.org/RPiconfig#Overclocking Overclocking] 記事を見て下さい。&lt;br /&gt;
&lt;br /&gt;
新しい設定を適用するには再起動が必要です。&lt;br /&gt;
&lt;br /&gt;
CPU のオーバークロック設定は、負担が高い時にガバナーが CPU の周波数を上げる場合にだけ適用されます。次のコマンドで現在の CPU の周波数を確認できます:&lt;br /&gt;
 $ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq&lt;br /&gt;
&lt;br /&gt;
スケーリングガバナーの詳細は [[CPU 周波数スケーリング]]を見てください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|以下のスクリプトを実行すると RPi に設定された全ての周波数が表示されます:&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
for src in arm core h264 isp v3d uart pwm emmc pixel vec hdmi dpi ; do&lt;br /&gt;
    echo -e &amp;quot;$src:\t$(/opt/vc/bin/vcgencmd  measure_clock $src)&amp;quot;&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== SD カードのパフォーマンスを最大化するヒント ==&lt;br /&gt;
&lt;br /&gt;
システムのレスポンスは SD メディアの速度に大きな影響を受けます。特にシステムのアップデートなどディスク I/O に関する処理を行っている際はそれが際立つでしょう。pacman がファイルシステムにファイルを書き出すときに [http://archlinuxarm.org/forum/viewtopic.php?f=64&amp;amp;t=9467 頻繁に停止する] ような場合、RPi や RPi2 の接続バスが足を引っ張っているというよりは、SD (あるいはマイクロ SD) カードがボトルネックとなっている可能性があります。詳しくは[[ベンチマーク#フラッシュメディア]]を参照。&lt;br /&gt;
&lt;br /&gt;
一般的なパフォーマンスを上げる方法については[[パフォーマンスの最大化]]や[[ソリッドステートドライブ#SSD の読み書きを最小化するヒント]]を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== 起動時に fsck を有効にする ===&lt;br /&gt;
&lt;br /&gt;
[[fsck#ブート時のチェック]]を見てください。カーネルパラメータは {{ic|/boot/cmdline.txt}} で指定するようにしてください。&lt;br /&gt;
&lt;br /&gt;
== シリアルコンソール ==&lt;br /&gt;
ブートメッセージを見るには、デフォルトの {{ic|/boot/cmdline.txt}} を編集して、{{ic|loglevel}} を {{ic|5}} に変更してください:&lt;br /&gt;
 loglevel=5&lt;br /&gt;
&lt;br /&gt;
速度を 115200 から 38400 に変える:&lt;br /&gt;
 console=ttyAMA0,38400 kgdboc=ttyAMA0,38400&lt;br /&gt;
&lt;br /&gt;
getty サービスを起動する:&lt;br /&gt;
 # systemctl start getty@ttyAMA0&lt;br /&gt;
&lt;br /&gt;
ブート時に有効にする:&lt;br /&gt;
 # systemctl enable getty@ttyAMA0.service&lt;br /&gt;
&lt;br /&gt;
適当な service リンクを作成する:&lt;br /&gt;
 # ln -s /usr/lib/systemd/system/serial-getty@.service /etc/systemd/system/getty.target.wants/serial-getty@ttyAMA0.service&lt;br /&gt;
&lt;br /&gt;
そして PC から接続:&lt;br /&gt;
 # screen /dev/ttyUSB0 38400&lt;br /&gt;
&lt;br /&gt;
== Raspberry Pi カメラモジュール ==&lt;br /&gt;
カメラモジュールのコマンドは &#039;&#039;&#039;raspberrypi-firmware-tools&#039;&#039;&#039; パッケージに含まれています - このパッケージはデフォルトでインストールされています。以下のコマンドで使うことができます:&lt;br /&gt;
 $ /opt/vc/bin/raspistill&lt;br /&gt;
 $ /opt/vc/bin/raspivid&lt;br /&gt;
&lt;br /&gt;
{{ic|/boot/config.txt}} に以下を追加する必要があります:&lt;br /&gt;
 gpu_mem=128&lt;br /&gt;
 start_file=start_x.elf&lt;br /&gt;
 fixup_file=fixup_x.dat&lt;br /&gt;
&lt;br /&gt;
LED をオフにする設定 (任意):&lt;br /&gt;
 disable_camera_led=1&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合: &lt;br /&gt;
 mmal: mmal_vc_component_enable: failed to enable component: ENOSPC&lt;br /&gt;
 mmal: camera component couldn&#039;t be enabled&lt;br /&gt;
 mmal: main: Failed to create camera component&lt;br /&gt;
 mmal: Failed to run camera app. Please check for firmware updates&lt;br /&gt;
&lt;br /&gt;
{{ic|/boot/config.txt}} に以下の値を設定してみてください:&lt;br /&gt;
 cma_lwm=&lt;br /&gt;
 cma_hwm=&lt;br /&gt;
 cma_offline_start=&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 mmal: mmal_vc_component_create: failed to create component &#039;vc.ril.camera&#039; (1:ENOMEM)&lt;br /&gt;
 mmal: mmal_component_create_core: could not create component &#039;vc.ril.camera&#039; (1)&lt;br /&gt;
 mmal: Failed to create camera component&lt;br /&gt;
 mmal: main: Failed to create camera component&lt;br /&gt;
 mmal: Only 64M of gpu_mem is configured. Try running &amp;quot;sudo raspi-config&amp;quot; and ensure that &amp;quot;memory_split&amp;quot; has a value of 128 or greater&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/modprobe.d/blacklist.conf}} に以下の行を追加してください:&lt;br /&gt;
 blacklist i2c_bcm2708&lt;br /&gt;
&lt;br /&gt;
({{ic|/dev/video0}} を使用する) 標準的なアプリケーションを使うには V4L2 ドライバーをロードする必要があります。以下のように自動ロードファイルを作成することで起動時に自動的にロードさせることが可能です:&lt;br /&gt;
{{hc|/etc/modules-load.d/rpi-camera.conf|bcm2835-v4l2}}&lt;br /&gt;
&lt;br /&gt;
== ハードウェア乱数生成器 ==&lt;br /&gt;
Raspberry Pi 用の Arch Linux ARM には &#039;&#039;&#039;rng-tools&#039;&#039;&#039; パッケージがインストールされており、{{ic|bcm2835-rng}} が起動時にロードされるように設定されています ([https://archlinuxarm.org/forum/viewtopic.php?f=31&amp;amp;t=4993#p27708 こちら] を参照) が、Hardware RNG Entropy Gatherer Daemon (&#039;&#039;&#039;rngd&#039;&#039;&#039;) にハードウェア乱数生成器の場所を教えてやる必要があります。&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/conf.d/rngd}} を編集することで設定します:&lt;br /&gt;
 RNGD_OPTS=&amp;quot;-o /dev/random -r /dev/hwrng&amp;quot;&lt;br /&gt;
設定したら &#039;&#039;&#039;rngd&#039;&#039;&#039; デーモンを[[再起動]]してください:&lt;br /&gt;
 # systemctl restart rngd&lt;br /&gt;
&lt;br /&gt;
この設定で、ハードウェア乱数生成器からのデータがカーネルのエントロピープール ({{ic|/dev/random}}) に取り入れられるようになります。エントロピーを確認するには:&lt;br /&gt;
&lt;br /&gt;
 # cat /proc/sys/kernel/random/entropy_avail&lt;br /&gt;
&lt;br /&gt;
{{Note|古いイメージからカーネルを更新すると旧式の {{ic|bcm2708-rng}} を見つけられず &#039;&#039;&#039;systemd-modules-load.service&#039;&#039;&#039; の起動に失敗していることがあります。その場合には {{ic|/etc/modules-load.d/raspberrypi.conf}} を設定し直し、 &#039;&#039;&#039;systemd-modules-load.service&#039;&#039;&#039; を再起動すると解決します。([https://archlinuxarm.org/forum/viewtopic.php?f&amp;amp;#61;64&amp;amp;t&amp;amp;#61;10153 こちら] を参照) }}&lt;br /&gt;
&lt;br /&gt;
== GPIO ==&lt;br /&gt;
=== SPI ===&lt;br /&gt;
{{ic|/dev/spidev*}} デバイスを有効にするには、以下の行をアンコメントしてください:&lt;br /&gt;
{{hc|head=/boot/config.txt|output=&lt;br /&gt;
device_tree_param=spi=on&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
Python から GPIO ピンを使えるようにするために、[https://pypi.python.org/pypi/RPi.GPIO RPi.GPIO] ライブラリを使用することができます。[[AUR|AUR]] から {{AUR|python-raspberry-gpio}} か {{AUR|python2-raspberry-gpio}} のどちらかをインストールしてください。&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;i2c-tools&#039;&#039; と &#039;&#039;lm_sensors&#039;&#039; パッケージをインストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{ic|/boot/config.txt}} に以下を追加することで i2c ハードウェアを有効にするようにブートローダーを設定します:&lt;br /&gt;
 dtparam=i2c_arm=on&lt;br /&gt;
&lt;br /&gt;
{{ic|i2c-dev}} と {{ic|i2c-bcm2708}} モジュールを起動時にロードするように設定:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/raspberrypi.conf|i2c-dev&lt;br /&gt;
i2c-bcm2708}}&lt;br /&gt;
&lt;br /&gt;
Raspberry Pi を再起動してから次のコマンドを実行してハードウェアアドレスを取得:&lt;br /&gt;
 i2cdetect -y 0&lt;br /&gt;
&lt;br /&gt;
{{Note|I2C0 ではなく I2C1 ポートを使用する場合、{{ic|i2cdetect -y 1}} を実行して、以下のコマンドで使われている {{ic|i2c-0}} を {{ic|i2c-1}} に置き換える必要があります。}}&lt;br /&gt;
&lt;br /&gt;
そしてデバイスを初期化するように Linux を設定します。以下のコマンドのハードウェアアドレスは先のコマンドで取得したアドレスに置き換えてください (&#039;0x&#039; を前に付けます、例: 0x48)。デバイス名は自由に決めて下さい:&lt;br /&gt;
 echo &amp;lt;devicename&amp;gt; &amp;lt;hardware address&amp;gt; &amp;gt;/sys/class/i2c-adapter/i2c-0/new_device&lt;br /&gt;
&lt;br /&gt;
dmesg コマンドを使ってカーネルメッセージを確認すると、以下のような新しいエントリが追加されているはずです:&lt;br /&gt;
 i2c-0: new_device: Instantiated device ds1621 at 0x48&lt;br /&gt;
最後に、センサーの出力を読み出す:&lt;br /&gt;
 sensors&lt;br /&gt;
&lt;br /&gt;
== QEMU chroot ==&lt;br /&gt;
&lt;br /&gt;
場合によっては Raspberry Pi を動かすよりもディスクイメージを直接操作したほうが楽だということもあるでしょう。RPi の root パーティションが含まれている SD カードをマウントして、そこに chroot することで直接操作することができます。chroot からは、&#039;&#039;pacman&#039;&#039; を実行してパッケージをインストールしたり、巨大なライブラリをコンパイルすることが可能です。実行可能ファイルは ARM アーキテクチャ用のものなので、[[QEMU]] を使って x86 への変換を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|2016年1月現在、ARM の QEMU で {{pkg|make}} が動作しないため、以下の方法でパッケージをビルドすることはできません。ARM パッケージのビルドが必要な場合は [https://archlinuxarm.org/wiki/Distcc_Cross-Compiling Arch Linux ARM ウェブサイトのガイド] に従ってクロスコンパイラをビルドしてください。}}&lt;br /&gt;
&lt;br /&gt;
[[AUR]] から {{AUR|binfmt-support}} と {{AUR|qemu-user-static}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
ARM から x86 への変換が有効かどうか確認:&lt;br /&gt;
&lt;br /&gt;
 # update-binfmts --importdir /var/lib/binfmts/ --import&lt;br /&gt;
 # update-binfmts --display qemu-arm&lt;br /&gt;
&lt;br /&gt;
ARM から x86 への変換が有効でない場合、update-binfmts を使って有効にしてください:&lt;br /&gt;
 # update-binfmts --enable qemu-arm&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|mnt/}} にマウントします (デバイス名は適宜置き換えてください)。&lt;br /&gt;
&lt;br /&gt;
 # mkdir mnt&lt;br /&gt;
 # mount /dev/mmcblk0p2 mnt&lt;br /&gt;
&lt;br /&gt;
(ARM からの変換を処理する) QEMU の実行可能ファイルを SD カードの root にコピー:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/bin/qemu-arm-static mnt/usr/bin&lt;br /&gt;
&lt;br /&gt;
最後に [[Change Root#Change root]] に書かれているように SD カードの root に chroot してください。{{ic|qemu-arm-static}} コマンドは {{ic|chroot}} の中から呼び出す必要があります:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/arch /usr/bin/qemu-arm-static /bin/bash&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
* [https://www.raspberrypi.org Raspberry Pi] - 公式ウェブサイト&lt;br /&gt;
* [http://elinux.org/RPiconfig RPi Config] - ボンネットの下の設定に関連する情報がまとまっています&lt;br /&gt;
* [http://elinux.org/RPI_vcgencmd_usage RPi vcgencmd usage] - ファームウェアコマンドの vcgencmd の概要&lt;br /&gt;
* [http://archpi.dabase.com/ Arch Linux ARM on Raspberry PI] - RPi で Arch Linux を動かす時のヒントが書かれている FAQ スタイルのサイト&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Raspberry_Pi&amp;diff=5250</id>
		<title>Raspberry Pi</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Raspberry_Pi&amp;diff=5250"/>
		<updated>2016-05-08T06:10:27Z</updated>

		<summary type="html">&lt;p&gt;Fragment: /* 前書き */ リンクのhttps化&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ARM アーキテクチャ]]&lt;br /&gt;
[[cs:Raspberry Pi]]&lt;br /&gt;
[[en:Raspberry Pi]]&lt;br /&gt;
[[ru:Raspberry Pi]]&lt;br /&gt;
[[uk:Raspberry Pi]]&lt;br /&gt;
[[zh-CN:Raspberry Pi]]&lt;br /&gt;
[[Wikipedia:ja:Raspberry Pi|Wikipedia]] より:&lt;br /&gt;
:&amp;quot;&#039;&#039;Raspberry Pi はクレジットカードサイズのシングルボードコンピュータのシリーズである。イギリスのラズベリーパイ財団によって開発されており、学校で基本的なコンピュータ科学の教育を促進することを意図している。&#039;&#039;&amp;quot;&lt;br /&gt;
オリジナルモデルは Broadcom SoC BCM2835 ([[Wikipedia:ARM11|ARM11 マイクロアーキテクチャ]]) を使用していましたが、ラズベリーパイ財団は最近になってニューモデルの &amp;quot;Raspberry Pi 2&amp;quot; をリリースしました。RasPi 2 には BCM2836 SoC (クアッドコアの [[Wikipedia:ARM_Cortex-A7|ARM Cortex A7]] アーキテクチャ) が搭載されています。2016年2月には、BCM2837 SoC (クアッドコアの [[Wikipedia:ARM Cortex-A53|ARM Cortex-A53 アーキテクチャ]]) を搭載して WiFi と Bluetooth が組み込まれた Pi 3 が発売されました。&lt;br /&gt;
&lt;br /&gt;
== 前書き ==&lt;br /&gt;
この記事は完全なセットアップガイドではなく、読者が既に Arch システムを構築していることを前提としています。ユーザーの作成やシステムの管理など、基本的な作業の方法がよくわからない場合、Arch 初心者は[[ビギナーズガイド]]を読むことが推奨されています。&lt;br /&gt;
&lt;br /&gt;
{{Note|ARM アーキテクチャのサポートは公式 Arch Linux フォーラムではなく https://archlinuxarm.org で提供されています。ARM 固有の問題に関する投稿は [[フォーラムエチケット#Arch Linux ディストリビューションのサポートオンリー|Arch Linux ディストリビューションのサポートオンリー]]ポリシーに従って直ちにクローズされます。}}&lt;br /&gt;
&lt;br /&gt;
== システム構成 ==&lt;br /&gt;
&lt;br /&gt;
Raspberry Pi は ARM ベースのデバイスであり、ARM アーキテクチャ用にコンパイルされたバイナリが必要になります。ARM 用のバイナリは Arch Linux を ARM ベースのデバイスに移植している [http://archlinuxarm.org/about Arch Linux ARM プロジェクト] によって提供されています。ALARM プロジェクトのウェブサイトには独自のコミュニティとフォーラムがあります。オリジナルの Arch のフォーラムでは ARM に関連する問題は&#039;&#039;サポートされていません&#039;&#039;。Raspberry Pi 2 が登場したことで、デバイスのアーキテクチャによって必要なパッケージは2つに分かれています:&lt;br /&gt;
* ARMv6 (BCM2835): Raspberry Pi Model A, A+, B, B+, Zero&lt;br /&gt;
* ARMv7 (BCM2836): Raspberry Pi 2 (Model B+ ベース)&lt;br /&gt;
* ARMv8 (BCM2837): Raspberry Pi 3&lt;br /&gt;
&lt;br /&gt;
== Arch Linux ARM のインストール ==&lt;br /&gt;
&lt;br /&gt;
[http://archlinuxarm.org/platforms/armv6/raspberry-pi Arch Linux ARM Pi のドキュメント], [http://archlinuxarm.org/platforms/armv7/broadcom/raspberry-pi-2 Arch Linux ARM Pi2 のドキュメント], [https://archlinuxarm.org/platforms/armv8/broadcom/raspberry-pi-3 Arch Linux ARM Pi3 のドキュメント] を見てください。&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
ネットワークはあらかじめ設定されており、[[systemd-networkd]] によって dhcp モードでオンボードの NIC が使われます。ケーブルが接続されていれば、ほとんどのルーターで自動的に IP が取得されます。&lt;br /&gt;
&lt;br /&gt;
最初から [[Secure Shell]] を使って SD カードにアクセスする場合は、Raspberry Pi をイーサネットケーブルで接続してルーターの設定を通して IP アドレスを割り当てるのが一番簡単です。root で直接アクセスすることができます (パスワード: root)。まず初めにパスワードを変更することを強く推奨します。任意で [[SSH 鍵]]も設定してください。&lt;br /&gt;
&lt;br /&gt;
=== Ethernet を使わずに WLAN を設定 ===&lt;br /&gt;
&lt;br /&gt;
無線インターネット接続を確立する必要がある場合、いくつかパッケージを追加でダウンロードして SD カードに保存する必要があります。[[netctl]] を使用する場合、最低でも [[WPA supplicant]] と依存パッケージの &#039;&#039;libnl&#039;&#039; が必要になります。また、&#039;&#039;dialog&#039;&#039; と依存パッケージの &#039;&#039;ncurses&#039;&#039; もインストールしておいたほうが便利でしょう。&lt;br /&gt;
&lt;br /&gt;
まとめると以下を実行する必要があります:&lt;br /&gt;
* 他のコンピュータから SD カードにパッケージをダウンロード&lt;br /&gt;
* Raspberry Pi にパッケージをインストール・設定&lt;br /&gt;
&lt;br /&gt;
必要なパッケージは全て [http://archlinuxarm.org/packages Arch Linux ARM の公式ウェブサイト] で見つけることができ、[http://mirror.archlinuxarm.org Arch Linux ARM のリポジトリ] からダウンロードできます。&lt;br /&gt;
&lt;br /&gt;
その後、Raspberry Pi を接続して立ち上げて、モニター/キーボードを使うか[[#シリアルコンソール|シリアルコンソール]]でログインします。そして、パッケージを[[en2:Offline_installation_of_packages|オフラインインストール]]してください。パッケージの依存パッケージが欠けている場合は、依存パッケージもダウンロードしてインストールしてください。&lt;br /&gt;
&lt;br /&gt;
パッケージをインストールしたら、インターネットに接続してビギナーズガイドの[[ビギナーズガイド#無線|このセクション]]に書かれているように設定します。&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
{{Note|必須モジュール {{ic|snd-bcm2835}} はデフォルトで自動ロードされます。}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;alsa-utils&#039;&#039;&#039;, &#039;&#039;&#039;alsa-firmware&#039;&#039;&#039;, &#039;&#039;&#039;alsa-lib&#039;&#039;&#039;, &#039;&#039;&#039;alsa-plugins&#039;&#039;&#039; パッケージをインストールしてください:&lt;br /&gt;
 # pacman -S alsa-utils alsa-firmware alsa-lib alsa-plugins&lt;br /&gt;
&lt;br /&gt;
ARM の Linux カーネルバージョン 4.4.x では ALSA とサウンドモジュールに大きな変更があります。最新のカーネルで {{ic|alsamixer}} などのツールを使用するには {{ic|/boot/config.txt}} を編集して以下の行を記述してください:&lt;br /&gt;
 dtparam=audio=on&lt;br /&gt;
&lt;br /&gt;
任意で、{{ic|alsamixer}} を使ってデフォルトのボリュームを調整してください。唯一の音源 &amp;quot;PCM&amp;quot; がミュートされていないことを確認してください (ミュートされている場合は {{ic|MM}} と表示されます、ミュートを解除するには {{ic|M}} を押して下さい)。&lt;br /&gt;
&lt;br /&gt;
音源の出力を選択するには:&lt;br /&gt;
 $ amixer cset numid=3 &#039;&#039;x&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;x&#039;&#039;}} は以下のどれかになります:&lt;br /&gt;
*0 は自動&lt;br /&gt;
*1 はアナログ出力&lt;br /&gt;
*2 は HDMI&lt;br /&gt;
&lt;br /&gt;
=== HDMI オーディオの注意 ===&lt;br /&gt;
アプリケーションによっては音声を HDMI で出力するために {{ic|/boot/config.txt}} に設定が必要です:&lt;br /&gt;
 hdmi_drive=2&lt;br /&gt;
&lt;br /&gt;
== ビデオ ==&lt;br /&gt;
&lt;br /&gt;
=== HDMI / アナログ TV 出力 ===&lt;br /&gt;
デフォルト設定では、Raspberry Pi は [[wikipedia:ja:HDMI|HDMI]] モニターが接続されているときは HDMI を使うようになっています。接続されていない場合はアナログ TV 出力 (コンポジット出力あるいは RCA) が使われます。&lt;br /&gt;
&lt;br /&gt;
HDMI やアナログ TV 出力のオン・オフを切り替えるには、次を見て下さい:&lt;br /&gt;
&lt;br /&gt;
 /opt/vc/bin/tvservice&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;-s&#039;&#039; パラメータでディスプレイの状態を確認し、&#039;&#039;-o&#039;&#039; パラメータでディスプレイをオフに、&#039;&#039;-p&#039;&#039; パラメータで優先設定を使って HDMI をオンにします。&lt;br /&gt;
&lt;br /&gt;
オーバースキャン・アンダースキャンを適切に修正するには調整が必要で、多くの設定がある {{ic|boot/config.txt}} で簡単に行うことができます。修正するには、コメントの指示に従って適切な行の設定をアンコメントしてください:&lt;br /&gt;
&lt;br /&gt;
 # uncomment the following to adjust overscan. Use positive numbers if console&lt;br /&gt;
 # goes off screen, and negative if there is too much border&lt;br /&gt;
 #overscan_left=16&lt;br /&gt;
 overscan_right=8&lt;br /&gt;
 overscan_top=-16&lt;br /&gt;
 overscan_bottom=-16&lt;br /&gt;
&lt;br /&gt;
アナログビデオ出力を使いたいユーザーは NTSC 以外の出力のオプションを含んでいる[https://raw.github.com/Evilpaul/RPi-config/master/config.txt この]設定ファイルを見て下さい。&lt;br /&gt;
&lt;br /&gt;
新しい設定を適用するには再起動が必要です。&lt;br /&gt;
&lt;br /&gt;
=== アナログ TV 出力の注意事項 ===&lt;br /&gt;
&lt;br /&gt;
Raspberry Pi 1 モデル B+ と Raspberry Pi 2 モデル B から、コンポジットビデオ端子はなくなって、代わりに 3.5mm の動画/音声ジャックからコンポジット信号を出力するようになっています。RCA ケーブルによっては赤や白の音声端子で動画を接続する Raspberry Pi の規格に対応していない場合があります [http://www.raspberrypi-spy.co.uk/2014/07/raspberry-pi-model-b-3-5mm-audiovideo-jack/]。&lt;br /&gt;
&lt;br /&gt;
=== X.org ドライバー ===&lt;br /&gt;
&lt;br /&gt;
Raspberry Pi の X.org ドライバーは &#039;&#039;&#039;xf86-video-fbdev&#039;&#039;&#039; あるいは &#039;&#039;xf86-video-fbturbo-git&#039;&#039; パッケージでインストールできます:&lt;br /&gt;
 # pacman -S xf86-video-fbdev&lt;br /&gt;
&lt;br /&gt;
== オンボードのハードウェアセンサー ==&lt;br /&gt;
=== 温度 ===&lt;br /&gt;
温度センサーは &#039;&#039;&#039;raspberrypi-firmware-tools&#039;&#039;&#039; パッケージにあるユーティリティで使うことができます。RPi は BCM2835 SoC (CPU/GPU) 上にセンサーを搭載しています:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ /opt/vc/bin/vcgencmd measure_temp|2=&lt;br /&gt;
temp=49.8&#039;C&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
また、ファイルシステムから読み取ることもできます:&lt;br /&gt;
{{hc|$ cat /sys/class/thermal/thermal_zone0/temp|2=&lt;br /&gt;
49768&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
人間が読めるように出力するには:&lt;br /&gt;
{{hc|$ awk &#039;{printf &amp;quot;%3.1f°C\n&amp;quot;, $1/1000}&#039; /sys/class/thermal/thermal_zone0/temp|2=&lt;br /&gt;
54.1°C&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== 電圧 ===&lt;br /&gt;
同じように {{ic|/opt/vc/bin/vcgencmd}} で4つの異なる電圧をチェックすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ /opt/vc/bin/vcgencmd measure_volts &#039;&#039;&amp;lt;id&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;&amp;lt;id&amp;gt;&#039;&#039;}} は以下のどれかに置き換えてください:&lt;br /&gt;
*core はコアの電圧&lt;br /&gt;
*sdram_c は sdram Core の電圧&lt;br /&gt;
*sdram_i は sdram I/O の電圧&lt;br /&gt;
*sdram_p は sdram PHY の電圧&lt;br /&gt;
&lt;br /&gt;
=== 軽量なモニタリングスイート ===&lt;br /&gt;
{{AUR|monitorix}} は v3.2.0 から RPi をサポートしています。スクリーンショットは[http://www.monitorix.org/screenshots.html ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
== オーバークロック / アンダークロック ==&lt;br /&gt;
{{ic|/boot/config.txt}} を編集することで RPi をオーバークロックさせることができます、例:&lt;br /&gt;
 &lt;br /&gt;
 arm_freq=800&lt;br /&gt;
 arm_freq_min=100&lt;br /&gt;
 core_freq=300&lt;br /&gt;
 core_freq_min=75&lt;br /&gt;
 sdram_freq=400&lt;br /&gt;
 over_voltage=0&lt;br /&gt;
&lt;br /&gt;
{{ic|*_min}} の行は任意で、それぞれの設定の最低値を定義します。システムの負担が低い時は、指定した値まで下がります。オプションの詳しい説明や例は elinux の [http://elinux.org/RPiconfig#Overclocking Overclocking] 記事を見て下さい。&lt;br /&gt;
&lt;br /&gt;
新しい設定を適用するには再起動が必要です。&lt;br /&gt;
&lt;br /&gt;
CPU のオーバークロック設定は、負担が高い時にガバナーが CPU の周波数を上げる場合にだけ適用されます。次のコマンドで現在の CPU の周波数を確認できます:&lt;br /&gt;
 $ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq&lt;br /&gt;
&lt;br /&gt;
スケーリングガバナーの詳細は [[CPU 周波数スケーリング]]を見てください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|以下のスクリプトを実行すると RPi に設定された全ての周波数が表示されます:&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
for src in arm core h264 isp v3d uart pwm emmc pixel vec hdmi dpi ; do&lt;br /&gt;
    echo -e &amp;quot;$src:\t$(/opt/vc/bin/vcgencmd  measure_clock $src)&amp;quot;&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== SD カードのパフォーマンスを最大化するヒント ==&lt;br /&gt;
&lt;br /&gt;
システムのレスポンスは SD メディアの速度に大きな影響を受けます。特にシステムのアップデートなどディスク I/O に関する処理を行っている際はそれが際立つでしょう。pacman がファイルシステムにファイルを書き出すときに [http://archlinuxarm.org/forum/viewtopic.php?f=64&amp;amp;t=9467 頻繁に停止する] ような場合、RPi や RPi2 の接続バスが足を引っ張っているというよりは、SD (あるいはマイクロ SD) カードがボトルネックとなっている可能性があります。詳しくは[[ベンチマーク#フラッシュメディア]]を参照。&lt;br /&gt;
&lt;br /&gt;
一般的なパフォーマンスを上げる方法については[[パフォーマンスの最大化]]や[[ソリッドステートドライブ#SSD の読み書きを最小化するヒント]]を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== 起動時に fsck を有効にする ===&lt;br /&gt;
&lt;br /&gt;
[[fsck#ブート時のチェック]]を見てください。カーネルパラメータは {{ic|/boot/cmdline.txt}} で指定するようにしてください。&lt;br /&gt;
&lt;br /&gt;
== シリアルコンソール ==&lt;br /&gt;
ブートメッセージを見るには、デフォルトの {{ic|/boot/cmdline.txt}} を編集して、{{ic|loglevel}} を {{ic|5}} に変更してください:&lt;br /&gt;
 loglevel=5&lt;br /&gt;
&lt;br /&gt;
速度を 115200 から 38400 に変える:&lt;br /&gt;
 console=ttyAMA0,38400 kgdboc=ttyAMA0,38400&lt;br /&gt;
&lt;br /&gt;
getty サービスを起動する:&lt;br /&gt;
 # systemctl start getty@ttyAMA0&lt;br /&gt;
&lt;br /&gt;
ブート時に有効にする:&lt;br /&gt;
 # systemctl enable getty@ttyAMA0.service&lt;br /&gt;
&lt;br /&gt;
適当な service リンクを作成する:&lt;br /&gt;
 # ln -s /usr/lib/systemd/system/serial-getty@.service /etc/systemd/system/getty.target.wants/serial-getty@ttyAMA0.service&lt;br /&gt;
&lt;br /&gt;
そして PC から接続:&lt;br /&gt;
 # screen /dev/ttyUSB0 38400&lt;br /&gt;
&lt;br /&gt;
== Raspberry Pi カメラモジュール ==&lt;br /&gt;
カメラモジュールのコマンドは &#039;&#039;&#039;raspberrypi-firmware-tools&#039;&#039;&#039; パッケージに含まれています - このパッケージはデフォルトでインストールされています。以下のコマンドで使うことができます:&lt;br /&gt;
 $ /opt/vc/bin/raspistill&lt;br /&gt;
 $ /opt/vc/bin/raspivid&lt;br /&gt;
&lt;br /&gt;
{{ic|/boot/config.txt}} に以下を追加する必要があります:&lt;br /&gt;
 gpu_mem=128&lt;br /&gt;
 start_file=start_x.elf&lt;br /&gt;
 fixup_file=fixup_x.dat&lt;br /&gt;
&lt;br /&gt;
LED をオフにする設定 (任意):&lt;br /&gt;
 disable_camera_led=1&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合: &lt;br /&gt;
 mmal: mmal_vc_component_enable: failed to enable component: ENOSPC&lt;br /&gt;
 mmal: camera component couldn&#039;t be enabled&lt;br /&gt;
 mmal: main: Failed to create camera component&lt;br /&gt;
 mmal: Failed to run camera app. Please check for firmware updates&lt;br /&gt;
&lt;br /&gt;
{{ic|/boot/config.txt}} に以下の値を設定してみてください:&lt;br /&gt;
 cma_lwm=&lt;br /&gt;
 cma_hwm=&lt;br /&gt;
 cma_offline_start=&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 mmal: mmal_vc_component_create: failed to create component &#039;vc.ril.camera&#039; (1:ENOMEM)&lt;br /&gt;
 mmal: mmal_component_create_core: could not create component &#039;vc.ril.camera&#039; (1)&lt;br /&gt;
 mmal: Failed to create camera component&lt;br /&gt;
 mmal: main: Failed to create camera component&lt;br /&gt;
 mmal: Only 64M of gpu_mem is configured. Try running &amp;quot;sudo raspi-config&amp;quot; and ensure that &amp;quot;memory_split&amp;quot; has a value of 128 or greater&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/modprobe.d/blacklist.conf}} に以下の行を追加してください:&lt;br /&gt;
 blacklist i2c_bcm2708&lt;br /&gt;
&lt;br /&gt;
({{ic|/dev/video0}} を使用する) 標準的なアプリケーションを使うには V4L2 ドライバーをロードする必要があります。以下のように自動ロードファイルを作成することで起動時に自動的にロードさせることが可能です:&lt;br /&gt;
{{hc|/etc/modules-load.d/rpi-camera.conf|bcm2835-v4l2}}&lt;br /&gt;
&lt;br /&gt;
== ハードウェア乱数生成器 ==&lt;br /&gt;
Raspberry Pi 用の Arch Linux ARM には &#039;&#039;&#039;rng-tools&#039;&#039;&#039; パッケージがインストールされており、{{ic|bcm2835-rng}} が起動時にロードされるように設定されています ([https://archlinuxarm.org/forum/viewtopic.php?f=31&amp;amp;t=4993#p27708 こちら] を参照) が、Hardware RNG Entropy Gatherer Daemon (&#039;&#039;&#039;rngd&#039;&#039;&#039;) にハードウェア乱数生成器の場所を教えてやる必要があります。&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/conf.d/rngd}} を編集することで設定します:&lt;br /&gt;
 RNGD_OPTS=&amp;quot;-o /dev/random -r /dev/hwrng&amp;quot;&lt;br /&gt;
設定したら &#039;&#039;&#039;rngd&#039;&#039;&#039; デーモンを[[再起動]]してください:&lt;br /&gt;
 # systemctl restart rngd&lt;br /&gt;
&lt;br /&gt;
この設定で、ハードウェア乱数生成器からのデータがカーネルのエントロピープール ({{ic|/dev/random}}) に取り入れられるようになります。エントロピーを確認するには:&lt;br /&gt;
&lt;br /&gt;
 # cat /proc/sys/kernel/random/entropy_avail&lt;br /&gt;
&lt;br /&gt;
{{Note|古いイメージからカーネルを更新すると旧式の {{ic|bcm2708-rng}} を見つけられず &#039;&#039;&#039;systemd-modules-load.service&#039;&#039;&#039; の起動に失敗していることがあります。その場合には {{ic|/etc/modules-load.d/raspberrypi.conf}} を設定し直し、 &#039;&#039;&#039;systemd-modules-load.service&#039;&#039;&#039; を再起動すると解決します。([https://archlinuxarm.org/forum/viewtopic.php?f&amp;amp;#61;64&amp;amp;t&amp;amp;#61;10153 こちら] を参照) }}&lt;br /&gt;
&lt;br /&gt;
== GPIO ==&lt;br /&gt;
=== SPI ===&lt;br /&gt;
{{ic|/dev/spidev*}} デバイスを有効にするには、以下の行をアンコメントしてください:&lt;br /&gt;
{{hc|head=/boot/config.txt|output=&lt;br /&gt;
device_tree_param=spi=on&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
Python から GPIO ピンを使えるようにするために、[https://pypi.python.org/pypi/RPi.GPIO RPi.GPIO] ライブラリを使用することができます。[[AUR|AUR]] から {{AUR|python-raspberry-gpio}} か {{AUR|python2-raspberry-gpio}} のどちらかをインストールしてください。&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;i2c-tools&#039;&#039; と &#039;&#039;lm_sensors&#039;&#039; パッケージをインストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{ic|/boot/config.txt}} に以下を追加することで i2c ハードウェアを有効にするようにブートローダーを設定します:&lt;br /&gt;
 dtparam=i2c_arm=on&lt;br /&gt;
&lt;br /&gt;
{{ic|i2c-dev}} と {{ic|i2c-bcm2708}} モジュールを起動時にロードするように設定:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/raspberrypi.conf|i2c-dev&lt;br /&gt;
i2c-bcm2708}}&lt;br /&gt;
&lt;br /&gt;
Raspberry Pi を再起動してから次のコマンドを実行してハードウェアアドレスを取得:&lt;br /&gt;
 i2cdetect -y 0&lt;br /&gt;
&lt;br /&gt;
{{Note|I2C0 ではなく I2C1 ポートを使用する場合、{{ic|i2cdetect -y 1}} を実行して、以下のコマンドで使われている {{ic|i2c-0}} を {{ic|i2c-1}} に置き換える必要があります。}}&lt;br /&gt;
&lt;br /&gt;
そしてデバイスを初期化するように Linux を設定します。以下のコマンドのハードウェアアドレスは先のコマンドで取得したアドレスに置き換えてください (&#039;0x&#039; を前に付けます、例: 0x48)。デバイス名は自由に決めて下さい:&lt;br /&gt;
 echo &amp;lt;devicename&amp;gt; &amp;lt;hardware address&amp;gt; &amp;gt;/sys/class/i2c-adapter/i2c-0/new_device&lt;br /&gt;
&lt;br /&gt;
dmesg コマンドを使ってカーネルメッセージを確認すると、以下のような新しいエントリが追加されているはずです:&lt;br /&gt;
 i2c-0: new_device: Instantiated device ds1621 at 0x48&lt;br /&gt;
最後に、センサーの出力を読み出す:&lt;br /&gt;
 sensors&lt;br /&gt;
&lt;br /&gt;
== QEMU chroot ==&lt;br /&gt;
&lt;br /&gt;
場合によっては Raspberry Pi を動かすよりもディスクイメージを直接操作したほうが楽だということもあるでしょう。RPi の root パーティションが含まれている SD カードをマウントして、そこに chroot することで直接操作することができます。chroot からは、&#039;&#039;pacman&#039;&#039; を実行してパッケージをインストールしたり、巨大なライブラリをコンパイルすることが可能です。実行可能ファイルは ARM アーキテクチャ用のものなので、[[QEMU]] を使って x86 への変換を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|2016年1月現在、ARM の QEMU で {{pkg|make}} が動作しないため、以下の方法でパッケージをビルドすることはできません。ARM パッケージのビルドが必要な場合は [https://archlinuxarm.org/wiki/Distcc_Cross-Compiling Arch Linux ARM ウェブサイトのガイド] に従ってクロスコンパイラをビルドしてください。}}&lt;br /&gt;
&lt;br /&gt;
[[AUR]] から {{AUR|binfmt-support}} と {{AUR|qemu-user-static}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
ARM から x86 への変換が有効かどうか確認:&lt;br /&gt;
&lt;br /&gt;
 # update-binfmts --importdir /var/lib/binfmts/ --import&lt;br /&gt;
 # update-binfmts --display qemu-arm&lt;br /&gt;
&lt;br /&gt;
ARM から x86 への変換が有効でない場合、update-binfmts を使って有効にしてください:&lt;br /&gt;
 # update-binfmts --enable qemu-arm&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|mnt/}} にマウントします (デバイス名は適宜置き換えてください)。&lt;br /&gt;
&lt;br /&gt;
 # mkdir mnt&lt;br /&gt;
 # mount /dev/mmcblk0p2 mnt&lt;br /&gt;
&lt;br /&gt;
(ARM からの変換を処理する) QEMU の実行可能ファイルを SD カードの root にコピー:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/bin/qemu-arm-static mnt/usr/bin&lt;br /&gt;
&lt;br /&gt;
最後に [[Change Root#Change root]] に書かれているように SD カードの root に chroot してください。{{ic|qemu-arm-static}} コマンドは {{ic|chroot}} の中から呼び出す必要があります:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/arch /usr/bin/qemu-arm-static /bin/bash&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
* [https://www.raspberrypi.org Raspberry Pi] - 公式ウェブサイト&lt;br /&gt;
* [http://elinux.org/RPiconfig RPi Config] - ボンネットの下の設定に関連する情報がまとまっています&lt;br /&gt;
* [http://elinux.org/RPI_vcgencmd_usage RPi vcgencmd usage] - ファームウェアコマンドの vcgencmd の概要&lt;br /&gt;
* [http://archpi.dabase.com/ Arch Linux ARM on Raspberry PI] - RPi で Arch Linux を動かす時のヒントが書かれている FAQ スタイルのサイト&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Raspberry_Pi&amp;diff=5249</id>
		<title>Raspberry Pi</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Raspberry_Pi&amp;diff=5249"/>
		<updated>2016-05-07T18:58:44Z</updated>

		<summary type="html">&lt;p&gt;Fragment: /* ハードウェア乱数生成器 */ 参照リンク追加&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ARM アーキテクチャ]]&lt;br /&gt;
[[cs:Raspberry Pi]]&lt;br /&gt;
[[en:Raspberry Pi]]&lt;br /&gt;
[[ru:Raspberry Pi]]&lt;br /&gt;
[[uk:Raspberry Pi]]&lt;br /&gt;
[[zh-CN:Raspberry Pi]]&lt;br /&gt;
[[Wikipedia:ja:Raspberry Pi|Wikipedia]] より:&lt;br /&gt;
:&amp;quot;&#039;&#039;Raspberry Pi はクレジットカードサイズのシングルボードコンピュータのシリーズである。イギリスのラズベリーパイ財団によって開発されており、学校で基本的なコンピュータ科学の教育を促進することを意図している。&#039;&#039;&amp;quot;&lt;br /&gt;
オリジナルモデルは Broadcom SoC BCM2835 ([[Wikipedia:ARM11|ARM11 マイクロアーキテクチャ]]) を使用していましたが、ラズベリーパイ財団は最近になってニューモデルの &amp;quot;Raspberry Pi 2&amp;quot; をリリースしました。RasPi 2 には BCM2836 SoC (クアッドコアの [[Wikipedia:ARM_Cortex-A7|ARM Cortex A7]] アーキテクチャ) が搭載されています。2016年2月には、BCM2837 SoC (クアッドコアの [[Wikipedia:ARM Cortex-A53|ARM Cortex-A53 アーキテクチャ]]) を搭載して WiFi と Bluetooth が組み込まれた Pi 3 が発売されました。&lt;br /&gt;
&lt;br /&gt;
== 前書き ==&lt;br /&gt;
この記事は完全なセットアップガイドではなく、読者が既に Arch システムを構築していることを前提としています。ユーザーの作成やシステムの管理など、基本的な作業の方法がよくわからない場合、Arch 初心者は[[ビギナーズガイド]]を読むことが推奨されています。&lt;br /&gt;
&lt;br /&gt;
{{Note|ARM アーキテクチャのサポートは公式 Arch Linux フォーラムではなく http://archlinuxarm.org で提供されています。ARM 固有の問題に関する投稿は [[フォーラムエチケット#Arch Linux ディストリビューションのサポートオンリー|Arch Linux ディストリビューションのサポートオンリー]]ポリシーに従って直ちにクローズされます。}}&lt;br /&gt;
&lt;br /&gt;
== システム構成 ==&lt;br /&gt;
&lt;br /&gt;
Raspberry Pi は ARM ベースのデバイスであり、ARM アーキテクチャ用にコンパイルされたバイナリが必要になります。ARM 用のバイナリは Arch Linux を ARM ベースのデバイスに移植している [http://archlinuxarm.org/about Arch Linux ARM プロジェクト] によって提供されています。ALARM プロジェクトのウェブサイトには独自のコミュニティとフォーラムがあります。オリジナルの Arch のフォーラムでは ARM に関連する問題は&#039;&#039;サポートされていません&#039;&#039;。Raspberry Pi 2 が登場したことで、デバイスのアーキテクチャによって必要なパッケージは2つに分かれています:&lt;br /&gt;
* ARMv6 (BCM2835): Raspberry Pi Model A, A+, B, B+, Zero&lt;br /&gt;
* ARMv7 (BCM2836): Raspberry Pi 2 (Model B+ ベース)&lt;br /&gt;
* ARMv8 (BCM2837): Raspberry Pi 3&lt;br /&gt;
&lt;br /&gt;
== Arch Linux ARM のインストール ==&lt;br /&gt;
&lt;br /&gt;
[http://archlinuxarm.org/platforms/armv6/raspberry-pi Arch Linux ARM Pi のドキュメント], [http://archlinuxarm.org/platforms/armv7/broadcom/raspberry-pi-2 Arch Linux ARM Pi2 のドキュメント], [https://archlinuxarm.org/platforms/armv8/broadcom/raspberry-pi-3 Arch Linux ARM Pi3 のドキュメント] を見てください。&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
ネットワークはあらかじめ設定されており、[[systemd-networkd]] によって dhcp モードでオンボードの NIC が使われます。ケーブルが接続されていれば、ほとんどのルーターで自動的に IP が取得されます。&lt;br /&gt;
&lt;br /&gt;
最初から [[Secure Shell]] を使って SD カードにアクセスする場合は、Raspberry Pi をイーサネットケーブルで接続してルーターの設定を通して IP アドレスを割り当てるのが一番簡単です。root で直接アクセスすることができます (パスワード: root)。まず初めにパスワードを変更することを強く推奨します。任意で [[SSH 鍵]]も設定してください。&lt;br /&gt;
&lt;br /&gt;
=== Ethernet を使わずに WLAN を設定 ===&lt;br /&gt;
&lt;br /&gt;
無線インターネット接続を確立する必要がある場合、いくつかパッケージを追加でダウンロードして SD カードに保存する必要があります。[[netctl]] を使用する場合、最低でも [[WPA supplicant]] と依存パッケージの &#039;&#039;libnl&#039;&#039; が必要になります。また、&#039;&#039;dialog&#039;&#039; と依存パッケージの &#039;&#039;ncurses&#039;&#039; もインストールしておいたほうが便利でしょう。&lt;br /&gt;
&lt;br /&gt;
まとめると以下を実行する必要があります:&lt;br /&gt;
* 他のコンピュータから SD カードにパッケージをダウンロード&lt;br /&gt;
* Raspberry Pi にパッケージをインストール・設定&lt;br /&gt;
&lt;br /&gt;
必要なパッケージは全て [http://archlinuxarm.org/packages Arch Linux ARM の公式ウェブサイト] で見つけることができ、[http://mirror.archlinuxarm.org Arch Linux ARM のリポジトリ] からダウンロードできます。&lt;br /&gt;
&lt;br /&gt;
その後、Raspberry Pi を接続して立ち上げて、モニター/キーボードを使うか[[#シリアルコンソール|シリアルコンソール]]でログインします。そして、パッケージを[[en2:Offline_installation_of_packages|オフラインインストール]]してください。パッケージの依存パッケージが欠けている場合は、依存パッケージもダウンロードしてインストールしてください。&lt;br /&gt;
&lt;br /&gt;
パッケージをインストールしたら、インターネットに接続してビギナーズガイドの[[ビギナーズガイド#無線|このセクション]]に書かれているように設定します。&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
{{Note|必須モジュール {{ic|snd-bcm2835}} はデフォルトで自動ロードされます。}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;alsa-utils&#039;&#039;&#039;, &#039;&#039;&#039;alsa-firmware&#039;&#039;&#039;, &#039;&#039;&#039;alsa-lib&#039;&#039;&#039;, &#039;&#039;&#039;alsa-plugins&#039;&#039;&#039; パッケージをインストールしてください:&lt;br /&gt;
 # pacman -S alsa-utils alsa-firmware alsa-lib alsa-plugins&lt;br /&gt;
&lt;br /&gt;
ARM の Linux カーネルバージョン 4.4.x では ALSA とサウンドモジュールに大きな変更があります。最新のカーネルで {{ic|alsamixer}} などのツールを使用するには {{ic|/boot/config.txt}} を編集して以下の行を記述してください:&lt;br /&gt;
 dtparam=audio=on&lt;br /&gt;
&lt;br /&gt;
任意で、{{ic|alsamixer}} を使ってデフォルトのボリュームを調整してください。唯一の音源 &amp;quot;PCM&amp;quot; がミュートされていないことを確認してください (ミュートされている場合は {{ic|MM}} と表示されます、ミュートを解除するには {{ic|M}} を押して下さい)。&lt;br /&gt;
&lt;br /&gt;
音源の出力を選択するには:&lt;br /&gt;
 $ amixer cset numid=3 &#039;&#039;x&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;x&#039;&#039;}} は以下のどれかになります:&lt;br /&gt;
*0 は自動&lt;br /&gt;
*1 はアナログ出力&lt;br /&gt;
*2 は HDMI&lt;br /&gt;
&lt;br /&gt;
=== HDMI オーディオの注意 ===&lt;br /&gt;
アプリケーションによっては音声を HDMI で出力するために {{ic|/boot/config.txt}} に設定が必要です:&lt;br /&gt;
 hdmi_drive=2&lt;br /&gt;
&lt;br /&gt;
== ビデオ ==&lt;br /&gt;
&lt;br /&gt;
=== HDMI / アナログ TV 出力 ===&lt;br /&gt;
デフォルト設定では、Raspberry Pi は [[wikipedia:ja:HDMI|HDMI]] モニターが接続されているときは HDMI を使うようになっています。接続されていない場合はアナログ TV 出力 (コンポジット出力あるいは RCA) が使われます。&lt;br /&gt;
&lt;br /&gt;
HDMI やアナログ TV 出力のオン・オフを切り替えるには、次を見て下さい:&lt;br /&gt;
&lt;br /&gt;
 /opt/vc/bin/tvservice&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;-s&#039;&#039; パラメータでディスプレイの状態を確認し、&#039;&#039;-o&#039;&#039; パラメータでディスプレイをオフに、&#039;&#039;-p&#039;&#039; パラメータで優先設定を使って HDMI をオンにします。&lt;br /&gt;
&lt;br /&gt;
オーバースキャン・アンダースキャンを適切に修正するには調整が必要で、多くの設定がある {{ic|boot/config.txt}} で簡単に行うことができます。修正するには、コメントの指示に従って適切な行の設定をアンコメントしてください:&lt;br /&gt;
&lt;br /&gt;
 # uncomment the following to adjust overscan. Use positive numbers if console&lt;br /&gt;
 # goes off screen, and negative if there is too much border&lt;br /&gt;
 #overscan_left=16&lt;br /&gt;
 overscan_right=8&lt;br /&gt;
 overscan_top=-16&lt;br /&gt;
 overscan_bottom=-16&lt;br /&gt;
&lt;br /&gt;
アナログビデオ出力を使いたいユーザーは NTSC 以外の出力のオプションを含んでいる[https://raw.github.com/Evilpaul/RPi-config/master/config.txt この]設定ファイルを見て下さい。&lt;br /&gt;
&lt;br /&gt;
新しい設定を適用するには再起動が必要です。&lt;br /&gt;
&lt;br /&gt;
=== アナログ TV 出力の注意事項 ===&lt;br /&gt;
&lt;br /&gt;
Raspberry Pi 1 モデル B+ と Raspberry Pi 2 モデル B から、コンポジットビデオ端子はなくなって、代わりに 3.5mm の動画/音声ジャックからコンポジット信号を出力するようになっています。RCA ケーブルによっては赤や白の音声端子で動画を接続する Raspberry Pi の規格に対応していない場合があります [http://www.raspberrypi-spy.co.uk/2014/07/raspberry-pi-model-b-3-5mm-audiovideo-jack/]。&lt;br /&gt;
&lt;br /&gt;
=== X.org ドライバー ===&lt;br /&gt;
&lt;br /&gt;
Raspberry Pi の X.org ドライバーは &#039;&#039;&#039;xf86-video-fbdev&#039;&#039;&#039; あるいは &#039;&#039;xf86-video-fbturbo-git&#039;&#039; パッケージでインストールできます:&lt;br /&gt;
 # pacman -S xf86-video-fbdev&lt;br /&gt;
&lt;br /&gt;
== オンボードのハードウェアセンサー ==&lt;br /&gt;
=== 温度 ===&lt;br /&gt;
温度センサーは &#039;&#039;&#039;raspberrypi-firmware-tools&#039;&#039;&#039; パッケージにあるユーティリティで使うことができます。RPi は BCM2835 SoC (CPU/GPU) 上にセンサーを搭載しています:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ /opt/vc/bin/vcgencmd measure_temp|2=&lt;br /&gt;
temp=49.8&#039;C&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
また、ファイルシステムから読み取ることもできます:&lt;br /&gt;
{{hc|$ cat /sys/class/thermal/thermal_zone0/temp|2=&lt;br /&gt;
49768&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
人間が読めるように出力するには:&lt;br /&gt;
{{hc|$ awk &#039;{printf &amp;quot;%3.1f°C\n&amp;quot;, $1/1000}&#039; /sys/class/thermal/thermal_zone0/temp|2=&lt;br /&gt;
54.1°C&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== 電圧 ===&lt;br /&gt;
同じように {{ic|/opt/vc/bin/vcgencmd}} で4つの異なる電圧をチェックすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ /opt/vc/bin/vcgencmd measure_volts &#039;&#039;&amp;lt;id&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;&amp;lt;id&amp;gt;&#039;&#039;}} は以下のどれかに置き換えてください:&lt;br /&gt;
*core はコアの電圧&lt;br /&gt;
*sdram_c は sdram Core の電圧&lt;br /&gt;
*sdram_i は sdram I/O の電圧&lt;br /&gt;
*sdram_p は sdram PHY の電圧&lt;br /&gt;
&lt;br /&gt;
=== 軽量なモニタリングスイート ===&lt;br /&gt;
{{AUR|monitorix}} は v3.2.0 から RPi をサポートしています。スクリーンショットは[http://www.monitorix.org/screenshots.html ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
== オーバークロック / アンダークロック ==&lt;br /&gt;
{{ic|/boot/config.txt}} を編集することで RPi をオーバークロックさせることができます、例:&lt;br /&gt;
 &lt;br /&gt;
 arm_freq=800&lt;br /&gt;
 arm_freq_min=100&lt;br /&gt;
 core_freq=300&lt;br /&gt;
 core_freq_min=75&lt;br /&gt;
 sdram_freq=400&lt;br /&gt;
 over_voltage=0&lt;br /&gt;
&lt;br /&gt;
{{ic|*_min}} の行は任意で、それぞれの設定の最低値を定義します。システムの負担が低い時は、指定した値まで下がります。オプションの詳しい説明や例は elinux の [http://elinux.org/RPiconfig#Overclocking Overclocking] 記事を見て下さい。&lt;br /&gt;
&lt;br /&gt;
新しい設定を適用するには再起動が必要です。&lt;br /&gt;
&lt;br /&gt;
CPU のオーバークロック設定は、負担が高い時にガバナーが CPU の周波数を上げる場合にだけ適用されます。次のコマンドで現在の CPU の周波数を確認できます:&lt;br /&gt;
 $ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq&lt;br /&gt;
&lt;br /&gt;
スケーリングガバナーの詳細は [[CPU 周波数スケーリング]]を見てください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|以下のスクリプトを実行すると RPi に設定された全ての周波数が表示されます:&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
for src in arm core h264 isp v3d uart pwm emmc pixel vec hdmi dpi ; do&lt;br /&gt;
    echo -e &amp;quot;$src:\t$(/opt/vc/bin/vcgencmd  measure_clock $src)&amp;quot;&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== SD カードのパフォーマンスを最大化するヒント ==&lt;br /&gt;
&lt;br /&gt;
システムのレスポンスは SD メディアの速度に大きな影響を受けます。特にシステムのアップデートなどディスク I/O に関する処理を行っている際はそれが際立つでしょう。pacman がファイルシステムにファイルを書き出すときに [http://archlinuxarm.org/forum/viewtopic.php?f=64&amp;amp;t=9467 頻繁に停止する] ような場合、RPi や RPi2 の接続バスが足を引っ張っているというよりは、SD (あるいはマイクロ SD) カードがボトルネックとなっている可能性があります。詳しくは[[ベンチマーク#フラッシュメディア]]を参照。&lt;br /&gt;
&lt;br /&gt;
一般的なパフォーマンスを上げる方法については[[パフォーマンスの最大化]]や[[ソリッドステートドライブ#SSD の読み書きを最小化するヒント]]を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== 起動時に fsck を有効にする ===&lt;br /&gt;
&lt;br /&gt;
[[fsck#ブート時のチェック]]を見てください。カーネルパラメータは {{ic|/boot/cmdline.txt}} で指定するようにしてください。&lt;br /&gt;
&lt;br /&gt;
== シリアルコンソール ==&lt;br /&gt;
ブートメッセージを見るには、デフォルトの {{ic|/boot/cmdline.txt}} を編集して、{{ic|loglevel}} を {{ic|5}} に変更してください:&lt;br /&gt;
 loglevel=5&lt;br /&gt;
&lt;br /&gt;
速度を 115200 から 38400 に変える:&lt;br /&gt;
 console=ttyAMA0,38400 kgdboc=ttyAMA0,38400&lt;br /&gt;
&lt;br /&gt;
getty サービスを起動する:&lt;br /&gt;
 # systemctl start getty@ttyAMA0&lt;br /&gt;
&lt;br /&gt;
ブート時に有効にする:&lt;br /&gt;
 # systemctl enable getty@ttyAMA0.service&lt;br /&gt;
&lt;br /&gt;
適当な service リンクを作成する:&lt;br /&gt;
 # ln -s /usr/lib/systemd/system/serial-getty@.service /etc/systemd/system/getty.target.wants/serial-getty@ttyAMA0.service&lt;br /&gt;
&lt;br /&gt;
そして PC から接続:&lt;br /&gt;
 # screen /dev/ttyUSB0 38400&lt;br /&gt;
&lt;br /&gt;
== Raspberry Pi カメラモジュール ==&lt;br /&gt;
カメラモジュールのコマンドは &#039;&#039;&#039;raspberrypi-firmware-tools&#039;&#039;&#039; パッケージに含まれています - このパッケージはデフォルトでインストールされています。以下のコマンドで使うことができます:&lt;br /&gt;
 $ /opt/vc/bin/raspistill&lt;br /&gt;
 $ /opt/vc/bin/raspivid&lt;br /&gt;
&lt;br /&gt;
{{ic|/boot/config.txt}} に以下を追加する必要があります:&lt;br /&gt;
 gpu_mem=128&lt;br /&gt;
 start_file=start_x.elf&lt;br /&gt;
 fixup_file=fixup_x.dat&lt;br /&gt;
&lt;br /&gt;
LED をオフにする設定 (任意):&lt;br /&gt;
 disable_camera_led=1&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合: &lt;br /&gt;
 mmal: mmal_vc_component_enable: failed to enable component: ENOSPC&lt;br /&gt;
 mmal: camera component couldn&#039;t be enabled&lt;br /&gt;
 mmal: main: Failed to create camera component&lt;br /&gt;
 mmal: Failed to run camera app. Please check for firmware updates&lt;br /&gt;
&lt;br /&gt;
{{ic|/boot/config.txt}} に以下の値を設定してみてください:&lt;br /&gt;
 cma_lwm=&lt;br /&gt;
 cma_hwm=&lt;br /&gt;
 cma_offline_start=&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 mmal: mmal_vc_component_create: failed to create component &#039;vc.ril.camera&#039; (1:ENOMEM)&lt;br /&gt;
 mmal: mmal_component_create_core: could not create component &#039;vc.ril.camera&#039; (1)&lt;br /&gt;
 mmal: Failed to create camera component&lt;br /&gt;
 mmal: main: Failed to create camera component&lt;br /&gt;
 mmal: Only 64M of gpu_mem is configured. Try running &amp;quot;sudo raspi-config&amp;quot; and ensure that &amp;quot;memory_split&amp;quot; has a value of 128 or greater&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/modprobe.d/blacklist.conf}} に以下の行を追加してください:&lt;br /&gt;
 blacklist i2c_bcm2708&lt;br /&gt;
&lt;br /&gt;
({{ic|/dev/video0}} を使用する) 標準的なアプリケーションを使うには V4L2 ドライバーをロードする必要があります。以下のように自動ロードファイルを作成することで起動時に自動的にロードさせることが可能です:&lt;br /&gt;
{{hc|/etc/modules-load.d/rpi-camera.conf|bcm2835-v4l2}}&lt;br /&gt;
&lt;br /&gt;
== ハードウェア乱数生成器 ==&lt;br /&gt;
Raspberry Pi 用の Arch Linux ARM には &#039;&#039;&#039;rng-tools&#039;&#039;&#039; パッケージがインストールされており、{{ic|bcm2835-rng}} が起動時にロードされるように設定されています ([https://archlinuxarm.org/forum/viewtopic.php?f=31&amp;amp;t=4993#p27708 こちら] を参照) が、Hardware RNG Entropy Gatherer Daemon (&#039;&#039;&#039;rngd&#039;&#039;&#039;) にハードウェア乱数生成器の場所を教えてやる必要があります。&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/conf.d/rngd}} を編集することで設定します:&lt;br /&gt;
 RNGD_OPTS=&amp;quot;-o /dev/random -r /dev/hwrng&amp;quot;&lt;br /&gt;
設定したら &#039;&#039;&#039;rngd&#039;&#039;&#039; デーモンを[[再起動]]してください:&lt;br /&gt;
 # systemctl restart rngd&lt;br /&gt;
&lt;br /&gt;
この設定で、ハードウェア乱数生成器からのデータがカーネルのエントロピープール ({{ic|/dev/random}}) に取り入れられるようになります。エントロピーを確認するには:&lt;br /&gt;
&lt;br /&gt;
 # cat /proc/sys/kernel/random/entropy_avail&lt;br /&gt;
&lt;br /&gt;
{{Note|古いイメージからカーネルを更新すると旧式の {{ic|bcm2708-rng}} を見つけられず &#039;&#039;&#039;systemd-modules-load.service&#039;&#039;&#039; の起動に失敗していることがあります。その場合には {{ic|/etc/modules-load.d/raspberrypi.conf}} を設定し直し、 &#039;&#039;&#039;systemd-modules-load.service&#039;&#039;&#039; を再起動すると解決します。([https://archlinuxarm.org/forum/viewtopic.php?f&amp;amp;#61;64&amp;amp;t&amp;amp;#61;10153 こちら] を参照) }}&lt;br /&gt;
&lt;br /&gt;
== GPIO ==&lt;br /&gt;
=== SPI ===&lt;br /&gt;
{{ic|/dev/spidev*}} デバイスを有効にするには、以下の行をアンコメントしてください:&lt;br /&gt;
{{hc|head=/boot/config.txt|output=&lt;br /&gt;
device_tree_param=spi=on&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
Python から GPIO ピンを使えるようにするために、[https://pypi.python.org/pypi/RPi.GPIO RPi.GPIO] ライブラリを使用することができます。[[AUR|AUR]] から {{AUR|python-raspberry-gpio}} か {{AUR|python2-raspberry-gpio}} のどちらかをインストールしてください。&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;i2c-tools&#039;&#039; と &#039;&#039;lm_sensors&#039;&#039; パッケージをインストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{ic|/boot/config.txt}} に以下を追加することで i2c ハードウェアを有効にするようにブートローダーを設定します:&lt;br /&gt;
 dtparam=i2c_arm=on&lt;br /&gt;
&lt;br /&gt;
{{ic|i2c-dev}} と {{ic|i2c-bcm2708}} モジュールを起動時にロードするように設定:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/raspberrypi.conf|i2c-dev&lt;br /&gt;
i2c-bcm2708}}&lt;br /&gt;
&lt;br /&gt;
Raspberry Pi を再起動してから次のコマンドを実行してハードウェアアドレスを取得:&lt;br /&gt;
 i2cdetect -y 0&lt;br /&gt;
&lt;br /&gt;
{{Note|I2C0 ではなく I2C1 ポートを使用する場合、{{ic|i2cdetect -y 1}} を実行して、以下のコマンドで使われている {{ic|i2c-0}} を {{ic|i2c-1}} に置き換える必要があります。}}&lt;br /&gt;
&lt;br /&gt;
そしてデバイスを初期化するように Linux を設定します。以下のコマンドのハードウェアアドレスは先のコマンドで取得したアドレスに置き換えてください (&#039;0x&#039; を前に付けます、例: 0x48)。デバイス名は自由に決めて下さい:&lt;br /&gt;
 echo &amp;lt;devicename&amp;gt; &amp;lt;hardware address&amp;gt; &amp;gt;/sys/class/i2c-adapter/i2c-0/new_device&lt;br /&gt;
&lt;br /&gt;
dmesg コマンドを使ってカーネルメッセージを確認すると、以下のような新しいエントリが追加されているはずです:&lt;br /&gt;
 i2c-0: new_device: Instantiated device ds1621 at 0x48&lt;br /&gt;
最後に、センサーの出力を読み出す:&lt;br /&gt;
 sensors&lt;br /&gt;
&lt;br /&gt;
== QEMU chroot ==&lt;br /&gt;
&lt;br /&gt;
場合によっては Raspberry Pi を動かすよりもディスクイメージを直接操作したほうが楽だということもあるでしょう。RPi の root パーティションが含まれている SD カードをマウントして、そこに chroot することで直接操作することができます。chroot からは、&#039;&#039;pacman&#039;&#039; を実行してパッケージをインストールしたり、巨大なライブラリをコンパイルすることが可能です。実行可能ファイルは ARM アーキテクチャ用のものなので、[[QEMU]] を使って x86 への変換を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|2016年1月現在、ARM の QEMU で {{pkg|make}} が動作しないため、以下の方法でパッケージをビルドすることはできません。ARM パッケージのビルドが必要な場合は [https://archlinuxarm.org/wiki/Distcc_Cross-Compiling Arch Linux ARM ウェブサイトのガイド] に従ってクロスコンパイラをビルドしてください。}}&lt;br /&gt;
&lt;br /&gt;
[[AUR]] から {{AUR|binfmt-support}} と {{AUR|qemu-user-static}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
ARM から x86 への変換が有効かどうか確認:&lt;br /&gt;
&lt;br /&gt;
 # update-binfmts --importdir /var/lib/binfmts/ --import&lt;br /&gt;
 # update-binfmts --display qemu-arm&lt;br /&gt;
&lt;br /&gt;
ARM から x86 への変換が有効でない場合、update-binfmts を使って有効にしてください:&lt;br /&gt;
 # update-binfmts --enable qemu-arm&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|mnt/}} にマウントします (デバイス名は適宜置き換えてください)。&lt;br /&gt;
&lt;br /&gt;
 # mkdir mnt&lt;br /&gt;
 # mount /dev/mmcblk0p2 mnt&lt;br /&gt;
&lt;br /&gt;
(ARM からの変換を処理する) QEMU の実行可能ファイルを SD カードの root にコピー:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/bin/qemu-arm-static mnt/usr/bin&lt;br /&gt;
&lt;br /&gt;
最後に [[Change Root#Change root]] に書かれているように SD カードの root に chroot してください。{{ic|qemu-arm-static}} コマンドは {{ic|chroot}} の中から呼び出す必要があります:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/arch /usr/bin/qemu-arm-static /bin/bash&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
* [https://www.raspberrypi.org Raspberry Pi] - 公式ウェブサイト&lt;br /&gt;
* [http://elinux.org/RPiconfig RPi Config] - ボンネットの下の設定に関連する情報がまとまっています&lt;br /&gt;
* [http://elinux.org/RPI_vcgencmd_usage RPi vcgencmd usage] - ファームウェアコマンドの vcgencmd の概要&lt;br /&gt;
* [http://archpi.dabase.com/ Arch Linux ARM on Raspberry PI] - RPi で Arch Linux を動かす時のヒントが書かれている FAQ スタイルのサイト&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Raspberry_Pi&amp;diff=5248</id>
		<title>Raspberry Pi</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Raspberry_Pi&amp;diff=5248"/>
		<updated>2016-05-07T18:49:16Z</updated>

		<summary type="html">&lt;p&gt;Fragment: /* ハードウェア乱数生成器 */ 前回とセットで情報加筆修正&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ARM アーキテクチャ]]&lt;br /&gt;
[[cs:Raspberry Pi]]&lt;br /&gt;
[[en:Raspberry Pi]]&lt;br /&gt;
[[ru:Raspberry Pi]]&lt;br /&gt;
[[uk:Raspberry Pi]]&lt;br /&gt;
[[zh-CN:Raspberry Pi]]&lt;br /&gt;
[[Wikipedia:ja:Raspberry Pi|Wikipedia]] より:&lt;br /&gt;
:&amp;quot;&#039;&#039;Raspberry Pi はクレジットカードサイズのシングルボードコンピュータのシリーズである。イギリスのラズベリーパイ財団によって開発されており、学校で基本的なコンピュータ科学の教育を促進することを意図している。&#039;&#039;&amp;quot;&lt;br /&gt;
オリジナルモデルは Broadcom SoC BCM2835 ([[Wikipedia:ARM11|ARM11 マイクロアーキテクチャ]]) を使用していましたが、ラズベリーパイ財団は最近になってニューモデルの &amp;quot;Raspberry Pi 2&amp;quot; をリリースしました。RasPi 2 には BCM2836 SoC (クアッドコアの [[Wikipedia:ARM_Cortex-A7|ARM Cortex A7]] アーキテクチャ) が搭載されています。2016年2月には、BCM2837 SoC (クアッドコアの [[Wikipedia:ARM Cortex-A53|ARM Cortex-A53 アーキテクチャ]]) を搭載して WiFi と Bluetooth が組み込まれた Pi 3 が発売されました。&lt;br /&gt;
&lt;br /&gt;
== 前書き ==&lt;br /&gt;
この記事は完全なセットアップガイドではなく、読者が既に Arch システムを構築していることを前提としています。ユーザーの作成やシステムの管理など、基本的な作業の方法がよくわからない場合、Arch 初心者は[[ビギナーズガイド]]を読むことが推奨されています。&lt;br /&gt;
&lt;br /&gt;
{{Note|ARM アーキテクチャのサポートは公式 Arch Linux フォーラムではなく http://archlinuxarm.org で提供されています。ARM 固有の問題に関する投稿は [[フォーラムエチケット#Arch Linux ディストリビューションのサポートオンリー|Arch Linux ディストリビューションのサポートオンリー]]ポリシーに従って直ちにクローズされます。}}&lt;br /&gt;
&lt;br /&gt;
== システム構成 ==&lt;br /&gt;
&lt;br /&gt;
Raspberry Pi は ARM ベースのデバイスであり、ARM アーキテクチャ用にコンパイルされたバイナリが必要になります。ARM 用のバイナリは Arch Linux を ARM ベースのデバイスに移植している [http://archlinuxarm.org/about Arch Linux ARM プロジェクト] によって提供されています。ALARM プロジェクトのウェブサイトには独自のコミュニティとフォーラムがあります。オリジナルの Arch のフォーラムでは ARM に関連する問題は&#039;&#039;サポートされていません&#039;&#039;。Raspberry Pi 2 が登場したことで、デバイスのアーキテクチャによって必要なパッケージは2つに分かれています:&lt;br /&gt;
* ARMv6 (BCM2835): Raspberry Pi Model A, A+, B, B+, Zero&lt;br /&gt;
* ARMv7 (BCM2836): Raspberry Pi 2 (Model B+ ベース)&lt;br /&gt;
* ARMv8 (BCM2837): Raspberry Pi 3&lt;br /&gt;
&lt;br /&gt;
== Arch Linux ARM のインストール ==&lt;br /&gt;
&lt;br /&gt;
[http://archlinuxarm.org/platforms/armv6/raspberry-pi Arch Linux ARM Pi のドキュメント], [http://archlinuxarm.org/platforms/armv7/broadcom/raspberry-pi-2 Arch Linux ARM Pi2 のドキュメント], [https://archlinuxarm.org/platforms/armv8/broadcom/raspberry-pi-3 Arch Linux ARM Pi3 のドキュメント] を見てください。&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
ネットワークはあらかじめ設定されており、[[systemd-networkd]] によって dhcp モードでオンボードの NIC が使われます。ケーブルが接続されていれば、ほとんどのルーターで自動的に IP が取得されます。&lt;br /&gt;
&lt;br /&gt;
最初から [[Secure Shell]] を使って SD カードにアクセスする場合は、Raspberry Pi をイーサネットケーブルで接続してルーターの設定を通して IP アドレスを割り当てるのが一番簡単です。root で直接アクセスすることができます (パスワード: root)。まず初めにパスワードを変更することを強く推奨します。任意で [[SSH 鍵]]も設定してください。&lt;br /&gt;
&lt;br /&gt;
=== Ethernet を使わずに WLAN を設定 ===&lt;br /&gt;
&lt;br /&gt;
無線インターネット接続を確立する必要がある場合、いくつかパッケージを追加でダウンロードして SD カードに保存する必要があります。[[netctl]] を使用する場合、最低でも [[WPA supplicant]] と依存パッケージの &#039;&#039;libnl&#039;&#039; が必要になります。また、&#039;&#039;dialog&#039;&#039; と依存パッケージの &#039;&#039;ncurses&#039;&#039; もインストールしておいたほうが便利でしょう。&lt;br /&gt;
&lt;br /&gt;
まとめると以下を実行する必要があります:&lt;br /&gt;
* 他のコンピュータから SD カードにパッケージをダウンロード&lt;br /&gt;
* Raspberry Pi にパッケージをインストール・設定&lt;br /&gt;
&lt;br /&gt;
必要なパッケージは全て [http://archlinuxarm.org/packages Arch Linux ARM の公式ウェブサイト] で見つけることができ、[http://mirror.archlinuxarm.org Arch Linux ARM のリポジトリ] からダウンロードできます。&lt;br /&gt;
&lt;br /&gt;
その後、Raspberry Pi を接続して立ち上げて、モニター/キーボードを使うか[[#シリアルコンソール|シリアルコンソール]]でログインします。そして、パッケージを[[en2:Offline_installation_of_packages|オフラインインストール]]してください。パッケージの依存パッケージが欠けている場合は、依存パッケージもダウンロードしてインストールしてください。&lt;br /&gt;
&lt;br /&gt;
パッケージをインストールしたら、インターネットに接続してビギナーズガイドの[[ビギナーズガイド#無線|このセクション]]に書かれているように設定します。&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
{{Note|必須モジュール {{ic|snd-bcm2835}} はデフォルトで自動ロードされます。}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;alsa-utils&#039;&#039;&#039;, &#039;&#039;&#039;alsa-firmware&#039;&#039;&#039;, &#039;&#039;&#039;alsa-lib&#039;&#039;&#039;, &#039;&#039;&#039;alsa-plugins&#039;&#039;&#039; パッケージをインストールしてください:&lt;br /&gt;
 # pacman -S alsa-utils alsa-firmware alsa-lib alsa-plugins&lt;br /&gt;
&lt;br /&gt;
ARM の Linux カーネルバージョン 4.4.x では ALSA とサウンドモジュールに大きな変更があります。最新のカーネルで {{ic|alsamixer}} などのツールを使用するには {{ic|/boot/config.txt}} を編集して以下の行を記述してください:&lt;br /&gt;
 dtparam=audio=on&lt;br /&gt;
&lt;br /&gt;
任意で、{{ic|alsamixer}} を使ってデフォルトのボリュームを調整してください。唯一の音源 &amp;quot;PCM&amp;quot; がミュートされていないことを確認してください (ミュートされている場合は {{ic|MM}} と表示されます、ミュートを解除するには {{ic|M}} を押して下さい)。&lt;br /&gt;
&lt;br /&gt;
音源の出力を選択するには:&lt;br /&gt;
 $ amixer cset numid=3 &#039;&#039;x&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;x&#039;&#039;}} は以下のどれかになります:&lt;br /&gt;
*0 は自動&lt;br /&gt;
*1 はアナログ出力&lt;br /&gt;
*2 は HDMI&lt;br /&gt;
&lt;br /&gt;
=== HDMI オーディオの注意 ===&lt;br /&gt;
アプリケーションによっては音声を HDMI で出力するために {{ic|/boot/config.txt}} に設定が必要です:&lt;br /&gt;
 hdmi_drive=2&lt;br /&gt;
&lt;br /&gt;
== ビデオ ==&lt;br /&gt;
&lt;br /&gt;
=== HDMI / アナログ TV 出力 ===&lt;br /&gt;
デフォルト設定では、Raspberry Pi は [[wikipedia:ja:HDMI|HDMI]] モニターが接続されているときは HDMI を使うようになっています。接続されていない場合はアナログ TV 出力 (コンポジット出力あるいは RCA) が使われます。&lt;br /&gt;
&lt;br /&gt;
HDMI やアナログ TV 出力のオン・オフを切り替えるには、次を見て下さい:&lt;br /&gt;
&lt;br /&gt;
 /opt/vc/bin/tvservice&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;-s&#039;&#039; パラメータでディスプレイの状態を確認し、&#039;&#039;-o&#039;&#039; パラメータでディスプレイをオフに、&#039;&#039;-p&#039;&#039; パラメータで優先設定を使って HDMI をオンにします。&lt;br /&gt;
&lt;br /&gt;
オーバースキャン・アンダースキャンを適切に修正するには調整が必要で、多くの設定がある {{ic|boot/config.txt}} で簡単に行うことができます。修正するには、コメントの指示に従って適切な行の設定をアンコメントしてください:&lt;br /&gt;
&lt;br /&gt;
 # uncomment the following to adjust overscan. Use positive numbers if console&lt;br /&gt;
 # goes off screen, and negative if there is too much border&lt;br /&gt;
 #overscan_left=16&lt;br /&gt;
 overscan_right=8&lt;br /&gt;
 overscan_top=-16&lt;br /&gt;
 overscan_bottom=-16&lt;br /&gt;
&lt;br /&gt;
アナログビデオ出力を使いたいユーザーは NTSC 以外の出力のオプションを含んでいる[https://raw.github.com/Evilpaul/RPi-config/master/config.txt この]設定ファイルを見て下さい。&lt;br /&gt;
&lt;br /&gt;
新しい設定を適用するには再起動が必要です。&lt;br /&gt;
&lt;br /&gt;
=== アナログ TV 出力の注意事項 ===&lt;br /&gt;
&lt;br /&gt;
Raspberry Pi 1 モデル B+ と Raspberry Pi 2 モデル B から、コンポジットビデオ端子はなくなって、代わりに 3.5mm の動画/音声ジャックからコンポジット信号を出力するようになっています。RCA ケーブルによっては赤や白の音声端子で動画を接続する Raspberry Pi の規格に対応していない場合があります [http://www.raspberrypi-spy.co.uk/2014/07/raspberry-pi-model-b-3-5mm-audiovideo-jack/]。&lt;br /&gt;
&lt;br /&gt;
=== X.org ドライバー ===&lt;br /&gt;
&lt;br /&gt;
Raspberry Pi の X.org ドライバーは &#039;&#039;&#039;xf86-video-fbdev&#039;&#039;&#039; あるいは &#039;&#039;xf86-video-fbturbo-git&#039;&#039; パッケージでインストールできます:&lt;br /&gt;
 # pacman -S xf86-video-fbdev&lt;br /&gt;
&lt;br /&gt;
== オンボードのハードウェアセンサー ==&lt;br /&gt;
=== 温度 ===&lt;br /&gt;
温度センサーは &#039;&#039;&#039;raspberrypi-firmware-tools&#039;&#039;&#039; パッケージにあるユーティリティで使うことができます。RPi は BCM2835 SoC (CPU/GPU) 上にセンサーを搭載しています:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ /opt/vc/bin/vcgencmd measure_temp|2=&lt;br /&gt;
temp=49.8&#039;C&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
また、ファイルシステムから読み取ることもできます:&lt;br /&gt;
{{hc|$ cat /sys/class/thermal/thermal_zone0/temp|2=&lt;br /&gt;
49768&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
人間が読めるように出力するには:&lt;br /&gt;
{{hc|$ awk &#039;{printf &amp;quot;%3.1f°C\n&amp;quot;, $1/1000}&#039; /sys/class/thermal/thermal_zone0/temp|2=&lt;br /&gt;
54.1°C&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== 電圧 ===&lt;br /&gt;
同じように {{ic|/opt/vc/bin/vcgencmd}} で4つの異なる電圧をチェックすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ /opt/vc/bin/vcgencmd measure_volts &#039;&#039;&amp;lt;id&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;&amp;lt;id&amp;gt;&#039;&#039;}} は以下のどれかに置き換えてください:&lt;br /&gt;
*core はコアの電圧&lt;br /&gt;
*sdram_c は sdram Core の電圧&lt;br /&gt;
*sdram_i は sdram I/O の電圧&lt;br /&gt;
*sdram_p は sdram PHY の電圧&lt;br /&gt;
&lt;br /&gt;
=== 軽量なモニタリングスイート ===&lt;br /&gt;
{{AUR|monitorix}} は v3.2.0 から RPi をサポートしています。スクリーンショットは[http://www.monitorix.org/screenshots.html ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
== オーバークロック / アンダークロック ==&lt;br /&gt;
{{ic|/boot/config.txt}} を編集することで RPi をオーバークロックさせることができます、例:&lt;br /&gt;
 &lt;br /&gt;
 arm_freq=800&lt;br /&gt;
 arm_freq_min=100&lt;br /&gt;
 core_freq=300&lt;br /&gt;
 core_freq_min=75&lt;br /&gt;
 sdram_freq=400&lt;br /&gt;
 over_voltage=0&lt;br /&gt;
&lt;br /&gt;
{{ic|*_min}} の行は任意で、それぞれの設定の最低値を定義します。システムの負担が低い時は、指定した値まで下がります。オプションの詳しい説明や例は elinux の [http://elinux.org/RPiconfig#Overclocking Overclocking] 記事を見て下さい。&lt;br /&gt;
&lt;br /&gt;
新しい設定を適用するには再起動が必要です。&lt;br /&gt;
&lt;br /&gt;
CPU のオーバークロック設定は、負担が高い時にガバナーが CPU の周波数を上げる場合にだけ適用されます。次のコマンドで現在の CPU の周波数を確認できます:&lt;br /&gt;
 $ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq&lt;br /&gt;
&lt;br /&gt;
スケーリングガバナーの詳細は [[CPU 周波数スケーリング]]を見てください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|以下のスクリプトを実行すると RPi に設定された全ての周波数が表示されます:&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
for src in arm core h264 isp v3d uart pwm emmc pixel vec hdmi dpi ; do&lt;br /&gt;
    echo -e &amp;quot;$src:\t$(/opt/vc/bin/vcgencmd  measure_clock $src)&amp;quot;&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== SD カードのパフォーマンスを最大化するヒント ==&lt;br /&gt;
&lt;br /&gt;
システムのレスポンスは SD メディアの速度に大きな影響を受けます。特にシステムのアップデートなどディスク I/O に関する処理を行っている際はそれが際立つでしょう。pacman がファイルシステムにファイルを書き出すときに [http://archlinuxarm.org/forum/viewtopic.php?f=64&amp;amp;t=9467 頻繁に停止する] ような場合、RPi や RPi2 の接続バスが足を引っ張っているというよりは、SD (あるいはマイクロ SD) カードがボトルネックとなっている可能性があります。詳しくは[[ベンチマーク#フラッシュメディア]]を参照。&lt;br /&gt;
&lt;br /&gt;
一般的なパフォーマンスを上げる方法については[[パフォーマンスの最大化]]や[[ソリッドステートドライブ#SSD の読み書きを最小化するヒント]]を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== 起動時に fsck を有効にする ===&lt;br /&gt;
&lt;br /&gt;
[[fsck#ブート時のチェック]]を見てください。カーネルパラメータは {{ic|/boot/cmdline.txt}} で指定するようにしてください。&lt;br /&gt;
&lt;br /&gt;
== シリアルコンソール ==&lt;br /&gt;
ブートメッセージを見るには、デフォルトの {{ic|/boot/cmdline.txt}} を編集して、{{ic|loglevel}} を {{ic|5}} に変更してください:&lt;br /&gt;
 loglevel=5&lt;br /&gt;
&lt;br /&gt;
速度を 115200 から 38400 に変える:&lt;br /&gt;
 console=ttyAMA0,38400 kgdboc=ttyAMA0,38400&lt;br /&gt;
&lt;br /&gt;
getty サービスを起動する:&lt;br /&gt;
 # systemctl start getty@ttyAMA0&lt;br /&gt;
&lt;br /&gt;
ブート時に有効にする:&lt;br /&gt;
 # systemctl enable getty@ttyAMA0.service&lt;br /&gt;
&lt;br /&gt;
適当な service リンクを作成する:&lt;br /&gt;
 # ln -s /usr/lib/systemd/system/serial-getty@.service /etc/systemd/system/getty.target.wants/serial-getty@ttyAMA0.service&lt;br /&gt;
&lt;br /&gt;
そして PC から接続:&lt;br /&gt;
 # screen /dev/ttyUSB0 38400&lt;br /&gt;
&lt;br /&gt;
== Raspberry Pi カメラモジュール ==&lt;br /&gt;
カメラモジュールのコマンドは &#039;&#039;&#039;raspberrypi-firmware-tools&#039;&#039;&#039; パッケージに含まれています - このパッケージはデフォルトでインストールされています。以下のコマンドで使うことができます:&lt;br /&gt;
 $ /opt/vc/bin/raspistill&lt;br /&gt;
 $ /opt/vc/bin/raspivid&lt;br /&gt;
&lt;br /&gt;
{{ic|/boot/config.txt}} に以下を追加する必要があります:&lt;br /&gt;
 gpu_mem=128&lt;br /&gt;
 start_file=start_x.elf&lt;br /&gt;
 fixup_file=fixup_x.dat&lt;br /&gt;
&lt;br /&gt;
LED をオフにする設定 (任意):&lt;br /&gt;
 disable_camera_led=1&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合: &lt;br /&gt;
 mmal: mmal_vc_component_enable: failed to enable component: ENOSPC&lt;br /&gt;
 mmal: camera component couldn&#039;t be enabled&lt;br /&gt;
 mmal: main: Failed to create camera component&lt;br /&gt;
 mmal: Failed to run camera app. Please check for firmware updates&lt;br /&gt;
&lt;br /&gt;
{{ic|/boot/config.txt}} に以下の値を設定してみてください:&lt;br /&gt;
 cma_lwm=&lt;br /&gt;
 cma_hwm=&lt;br /&gt;
 cma_offline_start=&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 mmal: mmal_vc_component_create: failed to create component &#039;vc.ril.camera&#039; (1:ENOMEM)&lt;br /&gt;
 mmal: mmal_component_create_core: could not create component &#039;vc.ril.camera&#039; (1)&lt;br /&gt;
 mmal: Failed to create camera component&lt;br /&gt;
 mmal: main: Failed to create camera component&lt;br /&gt;
 mmal: Only 64M of gpu_mem is configured. Try running &amp;quot;sudo raspi-config&amp;quot; and ensure that &amp;quot;memory_split&amp;quot; has a value of 128 or greater&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/modprobe.d/blacklist.conf}} に以下の行を追加してください:&lt;br /&gt;
 blacklist i2c_bcm2708&lt;br /&gt;
&lt;br /&gt;
({{ic|/dev/video0}} を使用する) 標準的なアプリケーションを使うには V4L2 ドライバーをロードする必要があります。以下のように自動ロードファイルを作成することで起動時に自動的にロードさせることが可能です:&lt;br /&gt;
{{hc|/etc/modules-load.d/rpi-camera.conf|bcm2835-v4l2}}&lt;br /&gt;
&lt;br /&gt;
== ハードウェア乱数生成器 ==&lt;br /&gt;
Raspberry Pi 用の Arch Linux ARM には &#039;&#039;&#039;rng-tools&#039;&#039;&#039; パッケージがインストールされており、{{ic|bcm2835-rng}} が起動時にロードされるように設定されています ([https://archlinuxarm.org/forum/viewtopic.php?f=31&amp;amp;t=4993#p27708 こちら] を参照) が、Hardware RNG Entropy Gatherer Daemon (&#039;&#039;&#039;rngd&#039;&#039;&#039;) にハードウェア乱数生成器の場所を教えてやる必要があります。&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/conf.d/rngd}} を編集することで設定します:&lt;br /&gt;
 RNGD_OPTS=&amp;quot;-o /dev/random -r /dev/hwrng&amp;quot;&lt;br /&gt;
設定したら &#039;&#039;&#039;rngd&#039;&#039;&#039; デーモンを[[再起動]]してください:&lt;br /&gt;
 # systemctl restart rngd&lt;br /&gt;
&lt;br /&gt;
この設定で、ハードウェア乱数生成器からのデータがカーネルのエントロピープール ({{ic|/dev/random}}) に取り入れられるようになります。エントロピーを確認するには:&lt;br /&gt;
&lt;br /&gt;
 # cat /proc/sys/kernel/random/entropy_avail&lt;br /&gt;
&lt;br /&gt;
{{Note|古いイメージからカーネルを更新すると旧式の {{ic|bcm2708-rng}} を見つけられず &#039;&#039;&#039;systemd-modules-load.service&#039;&#039;&#039; の起動に失敗していることがあります。その場合には {{ic|/etc/modules-load.d/raspberrypi.conf}} を設定し直し、 &#039;&#039;&#039;systemd-modules-load.service&#039;&#039;&#039; を再起動すると解決します。}}&lt;br /&gt;
&lt;br /&gt;
== GPIO ==&lt;br /&gt;
=== SPI ===&lt;br /&gt;
{{ic|/dev/spidev*}} デバイスを有効にするには、以下の行をアンコメントしてください:&lt;br /&gt;
{{hc|head=/boot/config.txt|output=&lt;br /&gt;
device_tree_param=spi=on&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
Python から GPIO ピンを使えるようにするために、[https://pypi.python.org/pypi/RPi.GPIO RPi.GPIO] ライブラリを使用することができます。[[AUR|AUR]] から {{AUR|python-raspberry-gpio}} か {{AUR|python2-raspberry-gpio}} のどちらかをインストールしてください。&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;i2c-tools&#039;&#039; と &#039;&#039;lm_sensors&#039;&#039; パッケージをインストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{ic|/boot/config.txt}} に以下を追加することで i2c ハードウェアを有効にするようにブートローダーを設定します:&lt;br /&gt;
 dtparam=i2c_arm=on&lt;br /&gt;
&lt;br /&gt;
{{ic|i2c-dev}} と {{ic|i2c-bcm2708}} モジュールを起動時にロードするように設定:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/raspberrypi.conf|i2c-dev&lt;br /&gt;
i2c-bcm2708}}&lt;br /&gt;
&lt;br /&gt;
Raspberry Pi を再起動してから次のコマンドを実行してハードウェアアドレスを取得:&lt;br /&gt;
 i2cdetect -y 0&lt;br /&gt;
&lt;br /&gt;
{{Note|I2C0 ではなく I2C1 ポートを使用する場合、{{ic|i2cdetect -y 1}} を実行して、以下のコマンドで使われている {{ic|i2c-0}} を {{ic|i2c-1}} に置き換える必要があります。}}&lt;br /&gt;
&lt;br /&gt;
そしてデバイスを初期化するように Linux を設定します。以下のコマンドのハードウェアアドレスは先のコマンドで取得したアドレスに置き換えてください (&#039;0x&#039; を前に付けます、例: 0x48)。デバイス名は自由に決めて下さい:&lt;br /&gt;
 echo &amp;lt;devicename&amp;gt; &amp;lt;hardware address&amp;gt; &amp;gt;/sys/class/i2c-adapter/i2c-0/new_device&lt;br /&gt;
&lt;br /&gt;
dmesg コマンドを使ってカーネルメッセージを確認すると、以下のような新しいエントリが追加されているはずです:&lt;br /&gt;
 i2c-0: new_device: Instantiated device ds1621 at 0x48&lt;br /&gt;
最後に、センサーの出力を読み出す:&lt;br /&gt;
 sensors&lt;br /&gt;
&lt;br /&gt;
== QEMU chroot ==&lt;br /&gt;
&lt;br /&gt;
場合によっては Raspberry Pi を動かすよりもディスクイメージを直接操作したほうが楽だということもあるでしょう。RPi の root パーティションが含まれている SD カードをマウントして、そこに chroot することで直接操作することができます。chroot からは、&#039;&#039;pacman&#039;&#039; を実行してパッケージをインストールしたり、巨大なライブラリをコンパイルすることが可能です。実行可能ファイルは ARM アーキテクチャ用のものなので、[[QEMU]] を使って x86 への変換を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|2016年1月現在、ARM の QEMU で {{pkg|make}} が動作しないため、以下の方法でパッケージをビルドすることはできません。ARM パッケージのビルドが必要な場合は [https://archlinuxarm.org/wiki/Distcc_Cross-Compiling Arch Linux ARM ウェブサイトのガイド] に従ってクロスコンパイラをビルドしてください。}}&lt;br /&gt;
&lt;br /&gt;
[[AUR]] から {{AUR|binfmt-support}} と {{AUR|qemu-user-static}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
ARM から x86 への変換が有効かどうか確認:&lt;br /&gt;
&lt;br /&gt;
 # update-binfmts --importdir /var/lib/binfmts/ --import&lt;br /&gt;
 # update-binfmts --display qemu-arm&lt;br /&gt;
&lt;br /&gt;
ARM から x86 への変換が有効でない場合、update-binfmts を使って有効にしてください:&lt;br /&gt;
 # update-binfmts --enable qemu-arm&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|mnt/}} にマウントします (デバイス名は適宜置き換えてください)。&lt;br /&gt;
&lt;br /&gt;
 # mkdir mnt&lt;br /&gt;
 # mount /dev/mmcblk0p2 mnt&lt;br /&gt;
&lt;br /&gt;
(ARM からの変換を処理する) QEMU の実行可能ファイルを SD カードの root にコピー:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/bin/qemu-arm-static mnt/usr/bin&lt;br /&gt;
&lt;br /&gt;
最後に [[Change Root#Change root]] に書かれているように SD カードの root に chroot してください。{{ic|qemu-arm-static}} コマンドは {{ic|chroot}} の中から呼び出す必要があります:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/arch /usr/bin/qemu-arm-static /bin/bash&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
* [https://www.raspberrypi.org Raspberry Pi] - 公式ウェブサイト&lt;br /&gt;
* [http://elinux.org/RPiconfig RPi Config] - ボンネットの下の設定に関連する情報がまとまっています&lt;br /&gt;
* [http://elinux.org/RPI_vcgencmd_usage RPi vcgencmd usage] - ファームウェアコマンドの vcgencmd の概要&lt;br /&gt;
* [http://archpi.dabase.com/ Arch Linux ARM on Raspberry PI] - RPi で Arch Linux を動かす時のヒントが書かれている FAQ スタイルのサイト&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Raspberry_Pi&amp;diff=5247</id>
		<title>Raspberry Pi</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Raspberry_Pi&amp;diff=5247"/>
		<updated>2016-05-07T18:38:04Z</updated>

		<summary type="html">&lt;p&gt;Fragment: /* ハードウェア乱数生成器 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ARM アーキテクチャ]]&lt;br /&gt;
[[cs:Raspberry Pi]]&lt;br /&gt;
[[en:Raspberry Pi]]&lt;br /&gt;
[[ru:Raspberry Pi]]&lt;br /&gt;
[[uk:Raspberry Pi]]&lt;br /&gt;
[[zh-CN:Raspberry Pi]]&lt;br /&gt;
[[Wikipedia:ja:Raspberry Pi|Wikipedia]] より:&lt;br /&gt;
:&amp;quot;&#039;&#039;Raspberry Pi はクレジットカードサイズのシングルボードコンピュータのシリーズである。イギリスのラズベリーパイ財団によって開発されており、学校で基本的なコンピュータ科学の教育を促進することを意図している。&#039;&#039;&amp;quot;&lt;br /&gt;
オリジナルモデルは Broadcom SoC BCM2835 ([[Wikipedia:ARM11|ARM11 マイクロアーキテクチャ]]) を使用していましたが、ラズベリーパイ財団は最近になってニューモデルの &amp;quot;Raspberry Pi 2&amp;quot; をリリースしました。RasPi 2 には BCM2836 SoC (クアッドコアの [[Wikipedia:ARM_Cortex-A7|ARM Cortex A7]] アーキテクチャ) が搭載されています。2016年2月には、BCM2837 SoC (クアッドコアの [[Wikipedia:ARM Cortex-A53|ARM Cortex-A53 アーキテクチャ]]) を搭載して WiFi と Bluetooth が組み込まれた Pi 3 が発売されました。&lt;br /&gt;
&lt;br /&gt;
== 前書き ==&lt;br /&gt;
この記事は完全なセットアップガイドではなく、読者が既に Arch システムを構築していることを前提としています。ユーザーの作成やシステムの管理など、基本的な作業の方法がよくわからない場合、Arch 初心者は[[ビギナーズガイド]]を読むことが推奨されています。&lt;br /&gt;
&lt;br /&gt;
{{Note|ARM アーキテクチャのサポートは公式 Arch Linux フォーラムではなく http://archlinuxarm.org で提供されています。ARM 固有の問題に関する投稿は [[フォーラムエチケット#Arch Linux ディストリビューションのサポートオンリー|Arch Linux ディストリビューションのサポートオンリー]]ポリシーに従って直ちにクローズされます。}}&lt;br /&gt;
&lt;br /&gt;
== システム構成 ==&lt;br /&gt;
&lt;br /&gt;
Raspberry Pi は ARM ベースのデバイスであり、ARM アーキテクチャ用にコンパイルされたバイナリが必要になります。ARM 用のバイナリは Arch Linux を ARM ベースのデバイスに移植している [http://archlinuxarm.org/about Arch Linux ARM プロジェクト] によって提供されています。ALARM プロジェクトのウェブサイトには独自のコミュニティとフォーラムがあります。オリジナルの Arch のフォーラムでは ARM に関連する問題は&#039;&#039;サポートされていません&#039;&#039;。Raspberry Pi 2 が登場したことで、デバイスのアーキテクチャによって必要なパッケージは2つに分かれています:&lt;br /&gt;
* ARMv6 (BCM2835): Raspberry Pi Model A, A+, B, B+, Zero&lt;br /&gt;
* ARMv7 (BCM2836): Raspberry Pi 2 (Model B+ ベース)&lt;br /&gt;
* ARMv8 (BCM2837): Raspberry Pi 3&lt;br /&gt;
&lt;br /&gt;
== Arch Linux ARM のインストール ==&lt;br /&gt;
&lt;br /&gt;
[http://archlinuxarm.org/platforms/armv6/raspberry-pi Arch Linux ARM Pi のドキュメント], [http://archlinuxarm.org/platforms/armv7/broadcom/raspberry-pi-2 Arch Linux ARM Pi2 のドキュメント], [https://archlinuxarm.org/platforms/armv8/broadcom/raspberry-pi-3 Arch Linux ARM Pi3 のドキュメント] を見てください。&lt;br /&gt;
&lt;br /&gt;
== ネットワーク ==&lt;br /&gt;
&lt;br /&gt;
ネットワークはあらかじめ設定されており、[[systemd-networkd]] によって dhcp モードでオンボードの NIC が使われます。ケーブルが接続されていれば、ほとんどのルーターで自動的に IP が取得されます。&lt;br /&gt;
&lt;br /&gt;
最初から [[Secure Shell]] を使って SD カードにアクセスする場合は、Raspberry Pi をイーサネットケーブルで接続してルーターの設定を通して IP アドレスを割り当てるのが一番簡単です。root で直接アクセスすることができます (パスワード: root)。まず初めにパスワードを変更することを強く推奨します。任意で [[SSH 鍵]]も設定してください。&lt;br /&gt;
&lt;br /&gt;
=== Ethernet を使わずに WLAN を設定 ===&lt;br /&gt;
&lt;br /&gt;
無線インターネット接続を確立する必要がある場合、いくつかパッケージを追加でダウンロードして SD カードに保存する必要があります。[[netctl]] を使用する場合、最低でも [[WPA supplicant]] と依存パッケージの &#039;&#039;libnl&#039;&#039; が必要になります。また、&#039;&#039;dialog&#039;&#039; と依存パッケージの &#039;&#039;ncurses&#039;&#039; もインストールしておいたほうが便利でしょう。&lt;br /&gt;
&lt;br /&gt;
まとめると以下を実行する必要があります:&lt;br /&gt;
* 他のコンピュータから SD カードにパッケージをダウンロード&lt;br /&gt;
* Raspberry Pi にパッケージをインストール・設定&lt;br /&gt;
&lt;br /&gt;
必要なパッケージは全て [http://archlinuxarm.org/packages Arch Linux ARM の公式ウェブサイト] で見つけることができ、[http://mirror.archlinuxarm.org Arch Linux ARM のリポジトリ] からダウンロードできます。&lt;br /&gt;
&lt;br /&gt;
その後、Raspberry Pi を接続して立ち上げて、モニター/キーボードを使うか[[#シリアルコンソール|シリアルコンソール]]でログインします。そして、パッケージを[[en2:Offline_installation_of_packages|オフラインインストール]]してください。パッケージの依存パッケージが欠けている場合は、依存パッケージもダウンロードしてインストールしてください。&lt;br /&gt;
&lt;br /&gt;
パッケージをインストールしたら、インターネットに接続してビギナーズガイドの[[ビギナーズガイド#無線|このセクション]]に書かれているように設定します。&lt;br /&gt;
&lt;br /&gt;
== オーディオ ==&lt;br /&gt;
{{Note|必須モジュール {{ic|snd-bcm2835}} はデフォルトで自動ロードされます。}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;alsa-utils&#039;&#039;&#039;, &#039;&#039;&#039;alsa-firmware&#039;&#039;&#039;, &#039;&#039;&#039;alsa-lib&#039;&#039;&#039;, &#039;&#039;&#039;alsa-plugins&#039;&#039;&#039; パッケージをインストールしてください:&lt;br /&gt;
 # pacman -S alsa-utils alsa-firmware alsa-lib alsa-plugins&lt;br /&gt;
&lt;br /&gt;
ARM の Linux カーネルバージョン 4.4.x では ALSA とサウンドモジュールに大きな変更があります。最新のカーネルで {{ic|alsamixer}} などのツールを使用するには {{ic|/boot/config.txt}} を編集して以下の行を記述してください:&lt;br /&gt;
 dtparam=audio=on&lt;br /&gt;
&lt;br /&gt;
任意で、{{ic|alsamixer}} を使ってデフォルトのボリュームを調整してください。唯一の音源 &amp;quot;PCM&amp;quot; がミュートされていないことを確認してください (ミュートされている場合は {{ic|MM}} と表示されます、ミュートを解除するには {{ic|M}} を押して下さい)。&lt;br /&gt;
&lt;br /&gt;
音源の出力を選択するには:&lt;br /&gt;
 $ amixer cset numid=3 &#039;&#039;x&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;x&#039;&#039;}} は以下のどれかになります:&lt;br /&gt;
*0 は自動&lt;br /&gt;
*1 はアナログ出力&lt;br /&gt;
*2 は HDMI&lt;br /&gt;
&lt;br /&gt;
=== HDMI オーディオの注意 ===&lt;br /&gt;
アプリケーションによっては音声を HDMI で出力するために {{ic|/boot/config.txt}} に設定が必要です:&lt;br /&gt;
 hdmi_drive=2&lt;br /&gt;
&lt;br /&gt;
== ビデオ ==&lt;br /&gt;
&lt;br /&gt;
=== HDMI / アナログ TV 出力 ===&lt;br /&gt;
デフォルト設定では、Raspberry Pi は [[wikipedia:ja:HDMI|HDMI]] モニターが接続されているときは HDMI を使うようになっています。接続されていない場合はアナログ TV 出力 (コンポジット出力あるいは RCA) が使われます。&lt;br /&gt;
&lt;br /&gt;
HDMI やアナログ TV 出力のオン・オフを切り替えるには、次を見て下さい:&lt;br /&gt;
&lt;br /&gt;
 /opt/vc/bin/tvservice&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;-s&#039;&#039; パラメータでディスプレイの状態を確認し、&#039;&#039;-o&#039;&#039; パラメータでディスプレイをオフに、&#039;&#039;-p&#039;&#039; パラメータで優先設定を使って HDMI をオンにします。&lt;br /&gt;
&lt;br /&gt;
オーバースキャン・アンダースキャンを適切に修正するには調整が必要で、多くの設定がある {{ic|boot/config.txt}} で簡単に行うことができます。修正するには、コメントの指示に従って適切な行の設定をアンコメントしてください:&lt;br /&gt;
&lt;br /&gt;
 # uncomment the following to adjust overscan. Use positive numbers if console&lt;br /&gt;
 # goes off screen, and negative if there is too much border&lt;br /&gt;
 #overscan_left=16&lt;br /&gt;
 overscan_right=8&lt;br /&gt;
 overscan_top=-16&lt;br /&gt;
 overscan_bottom=-16&lt;br /&gt;
&lt;br /&gt;
アナログビデオ出力を使いたいユーザーは NTSC 以外の出力のオプションを含んでいる[https://raw.github.com/Evilpaul/RPi-config/master/config.txt この]設定ファイルを見て下さい。&lt;br /&gt;
&lt;br /&gt;
新しい設定を適用するには再起動が必要です。&lt;br /&gt;
&lt;br /&gt;
=== アナログ TV 出力の注意事項 ===&lt;br /&gt;
&lt;br /&gt;
Raspberry Pi 1 モデル B+ と Raspberry Pi 2 モデル B から、コンポジットビデオ端子はなくなって、代わりに 3.5mm の動画/音声ジャックからコンポジット信号を出力するようになっています。RCA ケーブルによっては赤や白の音声端子で動画を接続する Raspberry Pi の規格に対応していない場合があります [http://www.raspberrypi-spy.co.uk/2014/07/raspberry-pi-model-b-3-5mm-audiovideo-jack/]。&lt;br /&gt;
&lt;br /&gt;
=== X.org ドライバー ===&lt;br /&gt;
&lt;br /&gt;
Raspberry Pi の X.org ドライバーは &#039;&#039;&#039;xf86-video-fbdev&#039;&#039;&#039; あるいは &#039;&#039;xf86-video-fbturbo-git&#039;&#039; パッケージでインストールできます:&lt;br /&gt;
 # pacman -S xf86-video-fbdev&lt;br /&gt;
&lt;br /&gt;
== オンボードのハードウェアセンサー ==&lt;br /&gt;
=== 温度 ===&lt;br /&gt;
温度センサーは &#039;&#039;&#039;raspberrypi-firmware-tools&#039;&#039;&#039; パッケージにあるユーティリティで使うことができます。RPi は BCM2835 SoC (CPU/GPU) 上にセンサーを搭載しています:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ /opt/vc/bin/vcgencmd measure_temp|2=&lt;br /&gt;
temp=49.8&#039;C&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
また、ファイルシステムから読み取ることもできます:&lt;br /&gt;
{{hc|$ cat /sys/class/thermal/thermal_zone0/temp|2=&lt;br /&gt;
49768&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
人間が読めるように出力するには:&lt;br /&gt;
{{hc|$ awk &#039;{printf &amp;quot;%3.1f°C\n&amp;quot;, $1/1000}&#039; /sys/class/thermal/thermal_zone0/temp|2=&lt;br /&gt;
54.1°C&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== 電圧 ===&lt;br /&gt;
同じように {{ic|/opt/vc/bin/vcgencmd}} で4つの異なる電圧をチェックすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ /opt/vc/bin/vcgencmd measure_volts &#039;&#039;&amp;lt;id&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;&amp;lt;id&amp;gt;&#039;&#039;}} は以下のどれかに置き換えてください:&lt;br /&gt;
*core はコアの電圧&lt;br /&gt;
*sdram_c は sdram Core の電圧&lt;br /&gt;
*sdram_i は sdram I/O の電圧&lt;br /&gt;
*sdram_p は sdram PHY の電圧&lt;br /&gt;
&lt;br /&gt;
=== 軽量なモニタリングスイート ===&lt;br /&gt;
{{AUR|monitorix}} は v3.2.0 から RPi をサポートしています。スクリーンショットは[http://www.monitorix.org/screenshots.html ここ] にあります。&lt;br /&gt;
&lt;br /&gt;
== オーバークロック / アンダークロック ==&lt;br /&gt;
{{ic|/boot/config.txt}} を編集することで RPi をオーバークロックさせることができます、例:&lt;br /&gt;
 &lt;br /&gt;
 arm_freq=800&lt;br /&gt;
 arm_freq_min=100&lt;br /&gt;
 core_freq=300&lt;br /&gt;
 core_freq_min=75&lt;br /&gt;
 sdram_freq=400&lt;br /&gt;
 over_voltage=0&lt;br /&gt;
&lt;br /&gt;
{{ic|*_min}} の行は任意で、それぞれの設定の最低値を定義します。システムの負担が低い時は、指定した値まで下がります。オプションの詳しい説明や例は elinux の [http://elinux.org/RPiconfig#Overclocking Overclocking] 記事を見て下さい。&lt;br /&gt;
&lt;br /&gt;
新しい設定を適用するには再起動が必要です。&lt;br /&gt;
&lt;br /&gt;
CPU のオーバークロック設定は、負担が高い時にガバナーが CPU の周波数を上げる場合にだけ適用されます。次のコマンドで現在の CPU の周波数を確認できます:&lt;br /&gt;
 $ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq&lt;br /&gt;
&lt;br /&gt;
スケーリングガバナーの詳細は [[CPU 周波数スケーリング]]を見てください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|以下のスクリプトを実行すると RPi に設定された全ての周波数が表示されます:&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
for src in arm core h264 isp v3d uart pwm emmc pixel vec hdmi dpi ; do&lt;br /&gt;
    echo -e &amp;quot;$src:\t$(/opt/vc/bin/vcgencmd  measure_clock $src)&amp;quot;&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== SD カードのパフォーマンスを最大化するヒント ==&lt;br /&gt;
&lt;br /&gt;
システムのレスポンスは SD メディアの速度に大きな影響を受けます。特にシステムのアップデートなどディスク I/O に関する処理を行っている際はそれが際立つでしょう。pacman がファイルシステムにファイルを書き出すときに [http://archlinuxarm.org/forum/viewtopic.php?f=64&amp;amp;t=9467 頻繁に停止する] ような場合、RPi や RPi2 の接続バスが足を引っ張っているというよりは、SD (あるいはマイクロ SD) カードがボトルネックとなっている可能性があります。詳しくは[[ベンチマーク#フラッシュメディア]]を参照。&lt;br /&gt;
&lt;br /&gt;
一般的なパフォーマンスを上げる方法については[[パフォーマンスの最大化]]や[[ソリッドステートドライブ#SSD の読み書きを最小化するヒント]]を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== 起動時に fsck を有効にする ===&lt;br /&gt;
&lt;br /&gt;
[[fsck#ブート時のチェック]]を見てください。カーネルパラメータは {{ic|/boot/cmdline.txt}} で指定するようにしてください。&lt;br /&gt;
&lt;br /&gt;
== シリアルコンソール ==&lt;br /&gt;
ブートメッセージを見るには、デフォルトの {{ic|/boot/cmdline.txt}} を編集して、{{ic|loglevel}} を {{ic|5}} に変更してください:&lt;br /&gt;
 loglevel=5&lt;br /&gt;
&lt;br /&gt;
速度を 115200 から 38400 に変える:&lt;br /&gt;
 console=ttyAMA0,38400 kgdboc=ttyAMA0,38400&lt;br /&gt;
&lt;br /&gt;
getty サービスを起動する:&lt;br /&gt;
 # systemctl start getty@ttyAMA0&lt;br /&gt;
&lt;br /&gt;
ブート時に有効にする:&lt;br /&gt;
 # systemctl enable getty@ttyAMA0.service&lt;br /&gt;
&lt;br /&gt;
適当な service リンクを作成する:&lt;br /&gt;
 # ln -s /usr/lib/systemd/system/serial-getty@.service /etc/systemd/system/getty.target.wants/serial-getty@ttyAMA0.service&lt;br /&gt;
&lt;br /&gt;
そして PC から接続:&lt;br /&gt;
 # screen /dev/ttyUSB0 38400&lt;br /&gt;
&lt;br /&gt;
== Raspberry Pi カメラモジュール ==&lt;br /&gt;
カメラモジュールのコマンドは &#039;&#039;&#039;raspberrypi-firmware-tools&#039;&#039;&#039; パッケージに含まれています - このパッケージはデフォルトでインストールされています。以下のコマンドで使うことができます:&lt;br /&gt;
 $ /opt/vc/bin/raspistill&lt;br /&gt;
 $ /opt/vc/bin/raspivid&lt;br /&gt;
&lt;br /&gt;
{{ic|/boot/config.txt}} に以下を追加する必要があります:&lt;br /&gt;
 gpu_mem=128&lt;br /&gt;
 start_file=start_x.elf&lt;br /&gt;
 fixup_file=fixup_x.dat&lt;br /&gt;
&lt;br /&gt;
LED をオフにする設定 (任意):&lt;br /&gt;
 disable_camera_led=1&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合: &lt;br /&gt;
 mmal: mmal_vc_component_enable: failed to enable component: ENOSPC&lt;br /&gt;
 mmal: camera component couldn&#039;t be enabled&lt;br /&gt;
 mmal: main: Failed to create camera component&lt;br /&gt;
 mmal: Failed to run camera app. Please check for firmware updates&lt;br /&gt;
&lt;br /&gt;
{{ic|/boot/config.txt}} に以下の値を設定してみてください:&lt;br /&gt;
 cma_lwm=&lt;br /&gt;
 cma_hwm=&lt;br /&gt;
 cma_offline_start=&lt;br /&gt;
&lt;br /&gt;
以下のエラーが表示される場合:&lt;br /&gt;
&lt;br /&gt;
 mmal: mmal_vc_component_create: failed to create component &#039;vc.ril.camera&#039; (1:ENOMEM)&lt;br /&gt;
 mmal: mmal_component_create_core: could not create component &#039;vc.ril.camera&#039; (1)&lt;br /&gt;
 mmal: Failed to create camera component&lt;br /&gt;
 mmal: main: Failed to create camera component&lt;br /&gt;
 mmal: Only 64M of gpu_mem is configured. Try running &amp;quot;sudo raspi-config&amp;quot; and ensure that &amp;quot;memory_split&amp;quot; has a value of 128 or greater&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/modprobe.d/blacklist.conf}} に以下の行を追加してください:&lt;br /&gt;
 blacklist i2c_bcm2708&lt;br /&gt;
&lt;br /&gt;
({{ic|/dev/video0}} を使用する) 標準的なアプリケーションを使うには V4L2 ドライバーをロードする必要があります。以下のように自動ロードファイルを作成することで起動時に自動的にロードさせることが可能です:&lt;br /&gt;
{{hc|/etc/modules-load.d/rpi-camera.conf|bcm2835-v4l2}}&lt;br /&gt;
&lt;br /&gt;
== ハードウェア乱数生成器 ==&lt;br /&gt;
Raspberry Pi 用の Arch Linux ARM には &#039;&#039;&#039;rng-tools&#039;&#039;&#039; パッケージがインストールされており、{{ic|bcm2835-rng}} が起動時にロードされるように設定されています ([https://archlinuxarm.org/forum/viewtopic.php?f=31&amp;amp;t=4993#p27708 こちら] を参照) が、Hardware RNG Entropy Gatherer Daemon (&#039;&#039;&#039;rngd&#039;&#039;&#039;) にハードウェア乱数生成器の場所を教えてやる必要があります。&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/conf.d/rngd}} を編集することで設定します:&lt;br /&gt;
 RNGD_OPTS=&amp;quot;-o /dev/random -r /dev/hwrng&amp;quot;&lt;br /&gt;
設定したら &#039;&#039;&#039;rngd&#039;&#039;&#039; デーモンを[[再起動]]してください:&lt;br /&gt;
 # systemctl restart rngd&lt;br /&gt;
&lt;br /&gt;
この設定で、ハードウェア乱数生成器からのデータがカーネルのエントロピープール ({{ic|/dev/random}}) に取り入れられるようになります。エントロピーを確認するには:&lt;br /&gt;
&lt;br /&gt;
 # cat /proc/sys/kernel/random/entropy_avail&lt;br /&gt;
&lt;br /&gt;
{{Note|古いイメージからカーネルを更新すると旧式の {{ic|bcm2708-rng}} を見つけられず &#039;&#039;&#039;systemd-modules-load.service&#039;&#039;&#039; の起動に失敗していることがあります。その場合には {{ic|/etc/modules-load.d/raspberrypi.conf}} を設定し直し、 &#039;&#039;&#039;systemd-modules-load.service&#039;&#039;&#039; を再起動すると解決します。 ([https://archlinuxarm.org/forum/viewtopic.php?f=64&amp;amp;t=10153 こちら] を参照) }}&lt;br /&gt;
&lt;br /&gt;
== GPIO ==&lt;br /&gt;
=== SPI ===&lt;br /&gt;
{{ic|/dev/spidev*}} デバイスを有効にするには、以下の行をアンコメントしてください:&lt;br /&gt;
{{hc|head=/boot/config.txt|output=&lt;br /&gt;
device_tree_param=spi=on&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
Python から GPIO ピンを使えるようにするために、[https://pypi.python.org/pypi/RPi.GPIO RPi.GPIO] ライブラリを使用することができます。[[AUR|AUR]] から {{AUR|python-raspberry-gpio}} か {{AUR|python2-raspberry-gpio}} のどちらかをインストールしてください。&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;i2c-tools&#039;&#039; と &#039;&#039;lm_sensors&#039;&#039; パッケージをインストールしてください。&lt;br /&gt;
&lt;br /&gt;
{{ic|/boot/config.txt}} に以下を追加することで i2c ハードウェアを有効にするようにブートローダーを設定します:&lt;br /&gt;
 dtparam=i2c_arm=on&lt;br /&gt;
&lt;br /&gt;
{{ic|i2c-dev}} と {{ic|i2c-bcm2708}} モジュールを起動時にロードするように設定:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/modules-load.d/raspberrypi.conf|i2c-dev&lt;br /&gt;
i2c-bcm2708}}&lt;br /&gt;
&lt;br /&gt;
Raspberry Pi を再起動してから次のコマンドを実行してハードウェアアドレスを取得:&lt;br /&gt;
 i2cdetect -y 0&lt;br /&gt;
&lt;br /&gt;
{{Note|I2C0 ではなく I2C1 ポートを使用する場合、{{ic|i2cdetect -y 1}} を実行して、以下のコマンドで使われている {{ic|i2c-0}} を {{ic|i2c-1}} に置き換える必要があります。}}&lt;br /&gt;
&lt;br /&gt;
そしてデバイスを初期化するように Linux を設定します。以下のコマンドのハードウェアアドレスは先のコマンドで取得したアドレスに置き換えてください (&#039;0x&#039; を前に付けます、例: 0x48)。デバイス名は自由に決めて下さい:&lt;br /&gt;
 echo &amp;lt;devicename&amp;gt; &amp;lt;hardware address&amp;gt; &amp;gt;/sys/class/i2c-adapter/i2c-0/new_device&lt;br /&gt;
&lt;br /&gt;
dmesg コマンドを使ってカーネルメッセージを確認すると、以下のような新しいエントリが追加されているはずです:&lt;br /&gt;
 i2c-0: new_device: Instantiated device ds1621 at 0x48&lt;br /&gt;
最後に、センサーの出力を読み出す:&lt;br /&gt;
 sensors&lt;br /&gt;
&lt;br /&gt;
== QEMU chroot ==&lt;br /&gt;
&lt;br /&gt;
場合によっては Raspberry Pi を動かすよりもディスクイメージを直接操作したほうが楽だということもあるでしょう。RPi の root パーティションが含まれている SD カードをマウントして、そこに chroot することで直接操作することができます。chroot からは、&#039;&#039;pacman&#039;&#039; を実行してパッケージをインストールしたり、巨大なライブラリをコンパイルすることが可能です。実行可能ファイルは ARM アーキテクチャ用のものなので、[[QEMU]] を使って x86 への変換を行う必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Note|2016年1月現在、ARM の QEMU で {{pkg|make}} が動作しないため、以下の方法でパッケージをビルドすることはできません。ARM パッケージのビルドが必要な場合は [https://archlinuxarm.org/wiki/Distcc_Cross-Compiling Arch Linux ARM ウェブサイトのガイド] に従ってクロスコンパイラをビルドしてください。}}&lt;br /&gt;
&lt;br /&gt;
[[AUR]] から {{AUR|binfmt-support}} と {{AUR|qemu-user-static}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
ARM から x86 への変換が有効かどうか確認:&lt;br /&gt;
&lt;br /&gt;
 # update-binfmts --importdir /var/lib/binfmts/ --import&lt;br /&gt;
 # update-binfmts --display qemu-arm&lt;br /&gt;
&lt;br /&gt;
ARM から x86 への変換が有効でない場合、update-binfmts を使って有効にしてください:&lt;br /&gt;
 # update-binfmts --enable qemu-arm&lt;br /&gt;
&lt;br /&gt;
SD カードを {{ic|mnt/}} にマウントします (デバイス名は適宜置き換えてください)。&lt;br /&gt;
&lt;br /&gt;
 # mkdir mnt&lt;br /&gt;
 # mount /dev/mmcblk0p2 mnt&lt;br /&gt;
&lt;br /&gt;
(ARM からの変換を処理する) QEMU の実行可能ファイルを SD カードの root にコピー:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/bin/qemu-arm-static mnt/usr/bin&lt;br /&gt;
&lt;br /&gt;
最後に [[Change Root#Change root]] に書かれているように SD カードの root に chroot してください。{{ic|qemu-arm-static}} コマンドは {{ic|chroot}} の中から呼び出す必要があります:&lt;br /&gt;
&lt;br /&gt;
 # chroot /mnt/arch /usr/bin/qemu-arm-static /bin/bash&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
* [https://www.raspberrypi.org Raspberry Pi] - 公式ウェブサイト&lt;br /&gt;
* [http://elinux.org/RPiconfig RPi Config] - ボンネットの下の設定に関連する情報がまとまっています&lt;br /&gt;
* [http://elinux.org/RPI_vcgencmd_usage RPi vcgencmd usage] - ファームウェアコマンドの vcgencmd の概要&lt;br /&gt;
* [http://archpi.dabase.com/ Arch Linux ARM on Raspberry PI] - RPi で Arch Linux を動かす時のヒントが書かれている FAQ スタイルのサイト&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;diff=5216</id>
		<title>セキュリティ</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;diff=5216"/>
		<updated>2016-04-09T13:55:57Z</updated>

		<summary type="html">&lt;p&gt;Fragment: /* pam_cracklibを用いた強力なパスワードの要求 */ 翻訳進行&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:セキュリティ]]&lt;br /&gt;
[[Category:ファイルシステム]]&lt;br /&gt;
[[Category:ネットワーク]]&lt;br /&gt;
[[en:Security]]&lt;br /&gt;
[[ru:Security]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|アプリケーション一覧/セキュリティ}}&lt;br /&gt;
{{Related|:カテゴリ:セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
この記事では Arch Linux システムを防御するための推奨事項とベストプラクティスを並べています。&lt;br /&gt;
&lt;br /&gt;
==概念==&lt;br /&gt;
*セキュリティを厳しくするあまりシステムが使い物にならなくなってしまう可能性があります。うまいやり方は度を越さない程度にセキュリティを強化します。&lt;br /&gt;
*セキュリティを高めるために出来ることは数多く存在しますが、一番の脅威はいつだってユーザー自身です。セキュリティを考える時は、多層防御を考える必要があります。ある層が突破されたとしても、他の層が攻撃を防御しなくてはなりません。ただし全てのネットワークからマシンを切断して、金庫にしまって決して使わないかぎり、システムを100%セキュアにすることは不可能です。&lt;br /&gt;
*少しだけ病的なまでの心配性 (パラノイド) になりましょう。それは役に立ちます。そして疑り深くなってください。話がうますぎるように聞こえたら、おそらくその通りです。&lt;br /&gt;
*[[Wikipedia:ja:最小権限の原則|最小権限の原則]]: システムの各部位は使用に必要なことにだけしかアクセスできないようにするべきで、それ以上は必要ありません。&lt;br /&gt;
&lt;br /&gt;
==パスワード==&lt;br /&gt;
パスワードは安全な linux システムのかぎです。パスワードは[[ユーザーとグループ|ユーザーアカウント]], [[ディスク暗号化|暗号化されたファイルシステム]], [[SSH 鍵|SSH]]/[[GPG]] 鍵などを守ります。コンピュータを使用する人を信頼するのに使う主要な手段なので、安全なパスワードを選んでそれを保護するというのがセキュリティの大部分と言っても過言ではありません。&lt;br /&gt;
&lt;br /&gt;
===強力なパスワードの選び方===&lt;br /&gt;
&lt;br /&gt;
パスワードは簡単に[[Wikipedia:ja:パスワードクラック|割り出されたり]]または個人情報から類推されないようにすることが重要です。そういうわけで、辞書に載っている単語やあなたの飼っている犬の名前などは使わないようにしましょう。パスワードは出来るだけ8文字以上で、小文字と大文字を混ぜてください。さらに数字や特殊文字も1文字以上含めると良いでしょう。当たり前ですが、長くて複雑なパスワードが基本的に良いパスワードとされます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|pwgen}} や {{Pkg|apg}} などのツールは安全なパスワードを生成するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
また、ある文章の各単語の一番最初を取ってパスワードを作ることもできます。&lt;br /&gt;
例えば “the girl is walking down the rainy street” なら “t6!WdtR5” とパスワードにすることができます。この方法はパスワードを覚えるのをずっと簡単にしてくれます。さらに、入力するのが面倒くさくなりますがパスワードを “The girl is walking down the rainy street&amp;quot; にすることも可能です。&lt;br /&gt;
&lt;br /&gt;
===パスワードの管理===&lt;br /&gt;
強固なパスワードを選び出したら、それを安全に保管してください。[[Wikipedia:ja:ソーシャル・エンジニアリング|心理操作]]や[[Wikipedia:Shoulder surfing (computer security)|ショルダーサーフィン]]に注意したり、セキュアでないサーバーから必要以上に情報が流出するのをふせぐためにパスワードを再利用しないようにしてください。{{Pkg|pass}}, {{Pkg|keepassx}}, {{Pkg|gnome-keyring}} などのツールは大量の複雑なパスワードを管理するのに役立ちます。[[Wikipedia:ja:LastPass|Lastpass]] はデバイス間で同期するためにオンラインで暗号化されたパスワードを保存するサービスですが、クローズドソースのコードと外部の企業の両方を信頼する必要があります。&lt;br /&gt;
&lt;br /&gt;
概して、安全なパスワードは覚えにくいからといって安全でないパスワードを使ってはいけません。パスワードはバランスを取る必要があります。弱いパスワードをたくさん作るよりは、安全なパスワードの暗号化されたデータベースを作り、一つの強いマスターパスワードで守るほうが良いでしょう。パスワードを紙に書くのも、物理的なセキュリティを必要としますがソフトウェアの脆弱性を防ぐ点では同じくらい有効です [https://www.schneier.com/blog/archives/2005/06/write_down_your.html]。&lt;br /&gt;
&lt;br /&gt;
===パスワードのハッシュ===&lt;br /&gt;
{{Warning|SHA512 は高速なハッシュ関数として設計されており、パスワードのハッシュ用には作られていません。bcrypt や scrypt などに比べて SHA512 によってハッシュ化されたパスワードには攻撃者は&#039;&#039;はるかに&#039;&#039;高速にブルートフォース攻撃をすることができます。}}&lt;br /&gt;
&lt;br /&gt;
デフォルトの Arch のハッシュ [[en2:SHA password hashes|sha512]] はとても強固で変更する必要はありません。デフォルトでは、{{ic|/etc/shadow}} にパスワードがハッシュ化されて保存され、root にだけ読み取り許可を与え、{{ic|/etc/passwd}} にはユーザー識別子だけが保存されます。従って、[[#root の制限|root ユーザーが安全]]である限り、ファイルが外部システムにコピーされたり解読されることはありえません。&lt;br /&gt;
&lt;br /&gt;
[http://www.slashroot.in/how-are-passwords-stored-linux-understanding-hashing-shadow-utils How are passwords stored in Linux (Understanding hashing with shadow utils)] も参照してください。&lt;br /&gt;
&lt;br /&gt;
=== pam_cracklibを用いた強力なパスワードの強制 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;pam_cracklib&#039;&#039; は [[Wikipedia:ja:辞書攻撃|辞書攻撃]] からの防御を提供し、システム全体で強制するパスワードポリシーの設定を補助します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;root&#039;&#039; アカウントはこのポリシーの影響を受けません。}}&lt;br /&gt;
{{Note|&#039;&#039;root&#039;&#039; アカウントを 望ましい/設定された ポリシーを迂回したユーザーにパスワードを設定するために利用できます。 これは一時的なパスワードを設定するときに便利です。}}&lt;br /&gt;
&lt;br /&gt;
例えば以下のようなポリシーを強制させたい場合:&lt;br /&gt;
* エラー時に2回パスワードプロンプト&lt;br /&gt;
* 最小で10文字の長さ(minlenオプション)&lt;br /&gt;
* 新しくパスワードを設定する場合、少なくとも6文字は古いパスワードと異なる(difokオプション)&lt;br /&gt;
* 少なくとも1文字数字を含む(dcreditオプション)&lt;br /&gt;
* 少なくとも1文字は大文字を含む(ucreditオプション)&lt;br /&gt;
* 少なくとも1文字は異なる文字を含む(ocreditオプション)&lt;br /&gt;
* 少なくとも1文字は小文字を含む(lcreditオプション)&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/pam.d/passwd}} ファイルを以下のように書き換えます:&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
password required pam_cracklib.so retry=2 minlen=10 difok=6 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1&lt;br /&gt;
password required pam_unix.so use_authtok sha512 shadow&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The {{ic|password required pam_unix.so use_authtok}} instructs the &#039;&#039;pam_unix&#039;&#039; module to not prompt for a password but rather to use the one provided by &#039;&#039;pam_cracklib&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
詳細な情報については pam_cracklib(8) と pam_unix(8) の man ページを参照してください。&lt;br /&gt;
&lt;br /&gt;
==パーティション==&lt;br /&gt;
&lt;br /&gt;
現在カーネルは {{ic|fs.protected_hardlinks}} や {{ic|fs.protected_symlinks}} sysctl スイッチが有効になっていればハードリンクやシンボリックリンクに関するセキュリティの問題を解決するので、world-writable なディレクトリを分離させるセキュリティ的な利点はもはや存在しません。&lt;br /&gt;
&lt;br /&gt;
それでもディスク容量が消耗したときのダメージを低減させる荒っぽい方法として world-writable なディレクトリを含むパーティションが分割されることがあります。しかしながら、サービスを落とすには {{ic|/var}} や {{ic|/tmp}} などのパーティションを一杯にするだけで十分です。この問題の対処についてはもっと柔軟性のある方法が存在します (クォータなど)、またファイルシステムによっては関連する機能を持っていることがあります (btrfs はサブボリュームにクォータを設定できます)。&lt;br /&gt;
&lt;br /&gt;
===マウントオプション===&lt;br /&gt;
&lt;br /&gt;
最小権限の原則に従って、パーティションは (機能性を失わない限りで) 最も制限的なマウントオプションを使ってマウントすると良いでしょう。&lt;br /&gt;
&lt;br /&gt;
====関連するマウントオプション====&lt;br /&gt;
&lt;br /&gt;
*{{ic|nodev}}: ファイルシステム上のキャラクタ・ブロック特殊デバイスを解釈しない。&lt;br /&gt;
*{{ic|nosuid}}: set-user-identifier や set-group-identifier ビットの効果を許可しない。&lt;br /&gt;
*{{ic|noexec}}: マウントされたファイルシステム上の全てのバイナリの直接実行を許可しない。&lt;br /&gt;
&lt;br /&gt;
====使用例====&lt;br /&gt;
&lt;br /&gt;
{{Note|データパーティションはいつでも {{ic|nodev}}, {{ic|nosuid}}, {{ic|noexec}} でマウントするべきです。}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |&#039;&#039;&#039;パーティション&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |{{ic|nodev}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |{{ic|nosuid}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |{{ic|noexec}}&lt;br /&gt;
|-&lt;br /&gt;
| {{ic|/var}}||yes||yes||yes &amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| {{ic|/home}}||yes||yes||yes, if you do not code, use wine or steam&lt;br /&gt;
|-&lt;br /&gt;
| {{ic|/dev/shm}}||yes||yes||yes&lt;br /&gt;
|-&lt;br /&gt;
| {{ic|/tmp}}||yes||yes||maybe, breaks compiling packages and various other things&lt;br /&gt;
|-&lt;br /&gt;
| {{ic|/boot}}||yes||yes||yes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt; パッケージによっては (例えば {{Pkg|nvidia-dkms}}) {{ic|/var}} で {{ic|exec}} を必要とすることがあるので注意してください。&lt;br /&gt;
&lt;br /&gt;
==ファイルシステムのパーミッション==&lt;br /&gt;
デフォルトのファイルシステムのパーミッションはほぼ全ての読み取りアクセスが許可されているため、パーミッションを変更することで http や nobody ユーザーなど root 以外のアカウントへのアクセスを手に入れた攻撃者から重要な情報を隠すことができます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
 # chmod 700 /boot /etc/{iptables,arptables}&lt;br /&gt;
&lt;br /&gt;
デフォルトの [[Umask]] を変更することで新しく作成したファイルのセキュリティを向上させることができます。[http://www.nsa.gov/ia/_files/os/redhat/rhel5-guide-i731.pdf NSA RHEL5 Security Guide] はセキュリティを最大化させるために {{ic|077}} の umask を提案しています、これは新しいファイルの所有者以外のユーザーによる読み取りを出来なくします。umask を変更するには、[[Umask#マスクの値を設定]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==ディスク暗号化==&lt;br /&gt;
&lt;br /&gt;
[[ディスク暗号化]]、特に[[#パスワード|強固なパスフレーズ]]による完全ディスク暗号化は、物理的なリカバリからデータを守る唯一の方法です。コンピュータの電源がオフになっていて問題のディスクがアンマウントされている時は完璧なセキュリティを提供します。&lt;br /&gt;
&lt;br /&gt;
しかしながら、コンピュータの電源が入れられてドライブがマウントされると、そのデータは暗号化されていないドライブと同じように無防備になります。そのためデータが必要なくなったときはすぐにデータのパーティションをアンマウントするのが最善です。&lt;br /&gt;
&lt;br /&gt;
[[Dm-crypt]] など特定のプログラムでは、ループファイルを物理ボリュームとして暗号化することができます。これはシステムの特定部分だけを守りたいときに完全なディスク暗号化の代わりの選択肢となりえます。&lt;br /&gt;
&lt;br /&gt;
==ユーザー設定==&lt;br /&gt;
インストールした後は日常の使用のために通常ユーザーを作成してください。root ユーザーを常用してはいけません。&lt;br /&gt;
&lt;br /&gt;
===3回ログインを失敗したユーザーをロックアウトする===&lt;br /&gt;
セキュリティをさらに高めるために、指定した回数ログインを失敗したユーザーをログインできなくすることが可能です。root ユーザーがロックを解除するまでそのユーザーアカウントにロックをかけるか、または設定した時間が経つと自動でロックが解除されるように設定できます。&lt;br /&gt;
3回ログインを失敗したユーザーを10分間ログインできないようにするには {{ic|/etc/pam.d/system-login}} を変更する必要があります:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/pam.d/system-login|&lt;br /&gt;
2=auth required pam_tally.so deny=2 unlock_time=600 onerr=succeed file=/var/log/faillog&lt;br /&gt;
#auth required pam_tally.so onerr=succeed file=/var/log/faillog&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
2行目のコメントを消すとログインの失敗ごとに2度カウントされるようになります。これだけです。冒険心を味わいたければ、ログインを3回失敗してみてください。それで何が起こるか分かるはずです。手動でユーザーのロックを解除するには次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # pam_tally --user &#039;&#039;username&#039;&#039; --reset&lt;br /&gt;
&lt;br /&gt;
3回ログインが失敗したユーザーを永遠にログインできないようにしたい場合 {{ic|unlock_time}} の部分を削除してください。こうすると root がアカウントをアンロックするまでログインできなくなります。&lt;br /&gt;
&lt;br /&gt;
=== プロセスの数を制限する ===&lt;br /&gt;
&lt;br /&gt;
信頼できないユーザーが大量に存在するシステムでは、一度に実行できるプロセスの数を制限して、[[Wikipedia:ja:Fork爆弾|フォーク爆弾]]などのサービス拒否攻撃を予防することが重要です。ユーザーやグループごとに実行できるプロセスの数は {{ic|/etc/security/limits.conf}} で定義することができ、デフォルトでは空になっています。以下の値をファイルに追加すると、実行できるプロセスが100個までに制限されます。ulimit コマンドを使って一時的に上げられる最大数も200個までに制限します。ユーザーが普段実行するプロセスの数や、管理するハードウェアにあわせて適切な値に変更してください。&lt;br /&gt;
&lt;br /&gt;
 * soft nproc 100&lt;br /&gt;
 * hard nproc 200&lt;br /&gt;
&lt;br /&gt;
== root の制限 ==&lt;br /&gt;
root ユーザーは、定義上、システムで最も強力なユーザーです。このため、root ユーザーの権限を維持しながら害を及ぼす力を制限する、もしくは root ユーザーの行動をもっと追跡できるようにする方法が多数存在します。&lt;br /&gt;
&lt;br /&gt;
===su の代わりに sudo を使う===&lt;br /&gt;
[[Su#セキュリティ|色々な理由]]から特権アクセスには [[su]] よりも [[sudo]] を使うほうが好ましいとされます。&lt;br /&gt;
&lt;br /&gt;
* 通常の権限しか持たないユーザーが実行した特権コマンドのログを保持します。&lt;br /&gt;
* root アクセスを必要とする各ユーザーに root ユーザーのパスワードを与える必要がありません。&lt;br /&gt;
* 完全な root ターミナルは作成されないため、{{ic|sudo}} は root アクセスが必要ないコマンドを偶発的に &#039;&#039;root&#039;&#039; で実行してしまうことを防止します。これは[[Wikipedia:ja:最小権限の原則|最小権限の原則]]と合っています。&lt;br /&gt;
* 一つのコマンドを実行するためだけに完全な root アクセスを与える代わりに、ユーザーごとに個々のプログラムを有効にすることができます。例えば、ユーザー &#039;&#039;alice&#039;&#039; に特定のプログラムへのアクセス権限を与えるには:&lt;br /&gt;
&lt;br /&gt;
 # visudo&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sudoers|&lt;br /&gt;
alice ALL &amp;amp;#61; NOPASSWD: /path/to/program}}&lt;br /&gt;
&lt;br /&gt;
また、全てのユーザーに個別のコマンドを許可することも可能です。通常ユーザーでサーバーから Samba 共有をマウントするには:&lt;br /&gt;
&lt;br /&gt;
 %users ALL=/sbin/mount.cifs,/sbin/umount.cifs&lt;br /&gt;
&lt;br /&gt;
これによって users グループのメンバーである全てのユーザーが全てのマシン (ALL) から {{ic|/sbin/mount.cifs}} や {{ic|/sbin/umount.cifs}} コマンドを実行できるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|visudo}} で {{ic|vi}} の代わりに {{ic|nano}} を使うには:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sudoers|&lt;br /&gt;
2=Defaults editor=/usr/bin/rnano&lt;br /&gt;
}}&lt;br /&gt;
{{ic|1=# EDITOR=nano visudo}} のエクスポートは何にでも {{ic|EDITOR}} として使うことができるためにセキュリティリスクとされています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
====sudo を使ってファイルを編集する====&lt;br /&gt;
root で {{ic|vim}} などのテキストエディタを使用するのはセキュリティ上の脆弱性になりえます。ユーザーは任意のシェルコマンドを実行でき、コマンドを実行したユーザーのログが残らないからです。これを解決するには、以下をシェルの設定ファイルに追加してください:&lt;br /&gt;
&lt;br /&gt;
 export SUDO_EDITOR=rvim&lt;br /&gt;
&lt;br /&gt;
ファイルの編集には {{ic|sudoedit filename}} または {{ic|sudo -e filename}} を使って下さい。自動的に {{ic|rvim}} によって {{ic|filename}} が編集されるようになり、テキストエディタからのシェルコマンドが無効になります。&lt;br /&gt;
&lt;br /&gt;
===root ログインの制限===&lt;br /&gt;
[[sudo]] を適切に設定することで、ユーザビリティをあまり下げることなく完全な root アクセスを大分制限することが可能です。&lt;br /&gt;
&lt;br /&gt;
====特定のユーザーだけに許可を与える====&lt;br /&gt;
[[Wikipedia:Pluggable authentication module|PAM]] の {{ic|pam_wheel.so}} は {{ic|wheel}} グループに入っているユーザーだけに {{ic|su}} を使用したログインを許可します。{{ic|/etc/pam.d/su}} と {{ic|/etc/pam.d/su-l}} の両方を編集して次の行をアンコメントしてください:&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Uncomment the following line to require a user to be in the &amp;quot;wheel&amp;quot; group.&lt;br /&gt;
auth		required	pam_wheel.so use_uid&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
特権コマンドを実行できる既存のユーザーだけが root でログインできるようになります。&lt;br /&gt;
&lt;br /&gt;
====ssh ログインを拒否する====&lt;br /&gt;
ローカルユーザーの root ログインを拒否したくない場合でも、[[SSH#root ログインを拒否する|SSH による root ログインを拒否]]するのがグッドプラクティスです。この目的は、ユーザーがリモートでシステムを完全に手にかける前にセキュリティ層を追加することにあります。&lt;br /&gt;
&lt;br /&gt;
==強制アクセス制御==&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:強制アクセス制御|強制アクセス制御]] (Mandatory Access Control, MAC) は Arch やほとんどの Linux ディストリビューションで使われている[[Wikipedia:ja:任意アクセス制御|任意アクセス制御]] (Discretionary Access Control, DAC) とは大きく異なるタイプのセキュリティポリシーです。原則的に MAC ではシステムに影響を与えるプログラムの行動は全てセキュリティルールセットによってチェックを受けます。このルールセットは、DAC とは対照的に、ユーザーが変更することは不可能です。実装方法は色々と異なるタイプが存在しますが、強制アクセス制御を使うことで実質的にコンピュータのセキュリティを著しく向上させることになります。&lt;br /&gt;
&lt;br /&gt;
===パス名 MAC===&lt;br /&gt;
パス名ベースのアクセス制御は指定されたファイルのパスに基づいてパーミッションを与えるというシンプルな形式のアクセス制御です。この形式のアクセス制御の欠点としてはファイルが移動されてもパーミッションはファイルと一緒に付いていかないということが挙げられます。プラス面となるのは、パス名ベースの MAC はラベルベースの MAC と異なり、幅広いファイルシステムに実装できることです。&lt;br /&gt;
&lt;br /&gt;
*[[AppArmor]] は [[Wikipedia:ja:カノニカル|Canonical]] によって開発されている MAC 実装で SELinux に比べて&amp;quot;簡単&amp;quot;になっています。&lt;br /&gt;
*[[TOMOYO Linux|Tomoyo]] はもうひとつのシンプルで、使いやすい強制アクセス制御を提供するシステムです。利用と実装の両面でシンプルになるように設計されており、依存するライブラリがとても少なくなっています。&lt;br /&gt;
&lt;br /&gt;
===ロールベースアクセス制御===&lt;br /&gt;
grsecurity がサポートしている MAC 実装はロールベースアクセス制御と呼ばれています。RBAC はユーザーごとにロールを割り当てます。それぞれのロールには特定のオブジェクトで実行できる操作を定義します。上手く記述されたロールと操作を使うことでユーザーに指定した作業しかできないように制限をかけることができます。デフォルトの &amp;quot;deny-all&amp;quot; では管理者が想定していない行動をユーザーは出来ません。&lt;br /&gt;
&lt;br /&gt;
*[[Grsecurity#RBAC|Grsecurity RBAC]] には設定を楽にするため AppArmor のような学習モードが備わっています。&lt;br /&gt;
*[[Grsecurity#RBAC|Grsecurity RBAC]] は SELinux のように付加的なメタデータを使いません。RBAC は SELinux よりもずっと高速です。&lt;br /&gt;
&lt;br /&gt;
===ラベル MAC===&lt;br /&gt;
ラベルベースのアクセス制御ではファイルの拡張属性を使ってセキュリティパーミッションを管理します。このシステムはセキュリティの機能においてパス名ベースの MAC よりも間違いなく柔軟性が高い一方、拡張属性をサポートしているファイルシステムでしか動作しません。&lt;br /&gt;
&lt;br /&gt;
*[[SELinux]] は、Linux セキュリティを向上させる [[Wikipedia:ja:アメリカ国家安全保障局|NSA]] プロジェクトに基づいており、システムユーザーやロールとは完全に独立して MAC を実装しています。成長してオリジナルの設定が変わっていくシステムのコントロールを簡単に維持できる、極めて強固なマルチレベル MAC ポリシー実装を提供します。&lt;br /&gt;
&lt;br /&gt;
=== アクセス制御リスト ===&lt;br /&gt;
[[Wikipedia:ja:アクセス制御リスト|アクセス制御リスト]] (Access Control List, ACL) は何らかの方法で直接ファイルシステムにルールを付加する代わりとなる手段です。ACL はプログラムの行動を許可された挙動のリストでチェックすることによりアクセス制御を実装しています。&lt;br /&gt;
&lt;br /&gt;
*[[grsecurity]] はセキュリティを向上させるための完全なカーネルパッチセットだけでなく、ACL アクセス制御も実装しています。メモリ割り当てのコントロールを拡張し、chroot 制限を改良、特定のネットワーク挙動に関係するルールを定めます。&lt;br /&gt;
&lt;br /&gt;
==カーネルの防御==&lt;br /&gt;
&lt;br /&gt;
===カーネルログへのアクセスを制限する===&lt;br /&gt;
&lt;br /&gt;
カーネルログにはカーネルの脆弱性を突こうとしている攻撃者にとって有益な情報、保護が必要なメモリーアドレスなどが含まれています。{{ic|kernel.dmesg_restrict}} フラグは  (デフォルトで root として実行しているプロセスしか持たない) {{ic|CAP_SYS_ADMIN}} ケイパビリティのないログへのアクセスを禁止します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/50-dmesg-restrict.conf|2=kernel.dmesg_restrict = 1}}&lt;br /&gt;
&lt;br /&gt;
===proc ファイルシステムのカーネルポインタへのアクセスを制限する===&lt;br /&gt;
&lt;br /&gt;
{{ic|kernel.kptr_restrict}} を有効にすると {{ic|CAP_SYSLOG}} のない通常ユーザーから {{ic|/proc/kallsyms}} のカーネルシンボルのアドレスが秘匿され、動的にアドレス・シンボルを解決するカーネル exploit が難しくなります。これは事前にコンパイルされた Arch Linux カーネルではあまり意味がありません、周到な攻撃者はカーネルパッケージをダウンロードしてそこから手動でシンボルを取得することができるからです。しかしながら自分でカーネルをコンパイルする場合は、ローカルの root 攻撃を減らす効果があります。ただし root 以外のユーザーで使用する場合いくつかの {{Pkg|perf}} コマンドが破壊されます (メインの {{Pkg|perf}} 機能には結局 root アクセスが必要になりますが)。詳しくは {{Bug|34323}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/50-kptr-restrict.conf|2=kernel.kptr_restrict = 1}}&lt;br /&gt;
&lt;br /&gt;
===BPF JIT コンパイラを無効にする===&lt;br /&gt;
&lt;br /&gt;
Linux カーネルにはパフォーマンス最適化のために BPF/Seccomp ルールセットをネイティブコードにコンパイルする機能が含まれています。最高レベルのセキュリティのために {{ic|net.core.bpf_jit_enable}} フラグは0にしておくべきです。&lt;br /&gt;
&lt;br /&gt;
コンパイラは特定の領域では有用ですが、通常は役に立ちません。JIT コンパイラは攻撃者がヒープスプレー攻撃を行う機会を与え、カーネルのヒープが悪意のあるコードで満たされるかもしれません。このコードは不正な関数へのポインタの間接参照など、他の脆弱性攻撃によって実行される危険性があります。&lt;br /&gt;
&lt;br /&gt;
{{note|[[grsecurity]] には BPF JIT コンパイラの JIT ハードニングが含まれており、攻撃のリスクを大幅に減らします。}}&lt;br /&gt;
&lt;br /&gt;
===ptrace スコープ===&lt;br /&gt;
&lt;br /&gt;
{{ic|kernel.yama.ptrace_scope}} フラグによって、Arch は Yama LSM をデフォルトで有効にしています。このフラグはプロセスが {{ic|CAP_SYS_PTRACE}} のないスコープの外で他のプロセスに {{ic|ptrace}} コールを実行するのを止めます。多くのデバッグツールがいくつかの機能を使うためにこれを必要としますが、セキュリティの面では飛躍的な改善になります。この機能がないと、名前空間のような外部レイヤーを適用しないかぎり同一ユーザーで動作するプロセスの分割は基本的に行われません。デバッガを既存プロセスにアタッチできることはこの欠点のデモンストレーションです。&lt;br /&gt;
&lt;br /&gt;
{{note|[[grsecurity]] では、この防護は {{ic|kernel.grsecurity.harden_ptrace}} フラグによって切り替えます。}}&lt;br /&gt;
&lt;br /&gt;
====破壊される機能の例====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|sudo}} を使って特定のユーザーに、パスワード有り無しで許可を与えたりすることで、root で以下のコマンドを実行することは可能です。}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|gdb -p $PID}}&lt;br /&gt;
* {{ic|strace -p $PID}}&lt;br /&gt;
* {{ic|perf trace -p $PID}}&lt;br /&gt;
* {{ic|reptyr $PID}}&lt;br /&gt;
&lt;br /&gt;
=== リンクの [[Wikipedia:TOCTOU|TOCTOU]] 攻撃を防止する ===&lt;br /&gt;
&lt;br /&gt;
この機能が追加された日時や根拠についてはこの [https://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commitdiff;h=800179c9b8a1e796e441674776d11cd4c05d61d7 commit メッセージ]を見て下さい。&lt;br /&gt;
&lt;br /&gt;
 fs.protected_hardlinks = 1&lt;br /&gt;
 fs.protected_symlinks = 1&lt;br /&gt;
&lt;br /&gt;
{{Note|現在は {{ic|/usr/lib/sysctl.d/50-default.conf}} によってデフォルトで有効にされています。}}&lt;br /&gt;
&lt;br /&gt;
===hidepid===&lt;br /&gt;
&lt;br /&gt;
カーネルには権限がないユーザーから他のユーザーのプロセスを秘匿させる機能が存在し、{{ic|proc}} ファイルシステムを {{ic|1=hidepid=1}} または {{ic|1=hidepid=2}} でマウントすることで有効になります。ただし、[http://lists.freedesktop.org/archives/systemd-devel/2012-October/006859.html この機能は現在 systemd を破壊します]。カーネルによるコンテナの cgroups ファイルシステムの仮想化サポートが欠けているために、その対応策が必要だからです。&lt;br /&gt;
&lt;br /&gt;
===grsecurity===&lt;br /&gt;
&lt;br /&gt;
標準の Linux カーネルは機密情報へのアクセスを必要以上に許可しておりメモリーの脆弱性攻撃への保護は最低限しか提供していません。[https://grsecurity.net/ Grsecurity] はこれを修正することを目指しています。Grsecurity には PaX のメモリーパッチがバンドルされています。PaX は ALSR を発明しており、強力な保護を提供します。Grsecurity はファイルシステムを防護し、高度なロールベースアクセス制御を提供して、せっかくの PaX のメモリー保護を無駄にするような情報漏洩を防ぎます。&lt;br /&gt;
&lt;br /&gt;
== アプリケーションのサンドボックス化 ==&lt;br /&gt;
&lt;br /&gt;
=== Firejail ===&lt;br /&gt;
&lt;br /&gt;
[[Firejail]] はアプリケーションやサーバーをサンドボックス化するためのシンプルで使いやすいツールです。Firejail はサーバーだけでなくブラウザなどのインターネットに接続するアプリケーションでも使うことができます。Grsecurity と一緒に使うことで Firejail はさらに強化することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== chroot ===&lt;br /&gt;
&lt;br /&gt;
手動で [[chroot]] 監獄を構築する方法もあります。&lt;br /&gt;
&lt;br /&gt;
=== Linux Containers ===&lt;br /&gt;
&lt;br /&gt;
他の手段 (KVM や Virtualbox) よりも強力な分離が必要なときは [[Linux Containers]] を選択するのもよいでしょう。LXC は仮想ハードウェアを使って擬似的な chroot で既存のカーネル上で動作します。&lt;br /&gt;
&lt;br /&gt;
=== 他の仮想化手段 ===&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]], [[KVM]], [[Xen]] などの完全な仮想化マシンを使うことでもセキュリティを向上させることができます。危険なアプリケーションを実行したり危険なウェブサイトを開いたりするときに役に立つでしょう。&lt;br /&gt;
&lt;br /&gt;
==ネットワークとファイアウォール==&lt;br /&gt;
&lt;br /&gt;
===ファイアウォール===&lt;br /&gt;
標準の Arch カーネルは [[Wikipedia:ja:iptables|Netfilter]] の [[iptables]] を使用する能力がありますが、デフォルトでは有効になっていません。[[公式リポジトリ]]から {{Pkg|iptables}} をインストールして、有効にし、ファイアウォールを設定することが強く推奨されます。&lt;br /&gt;
&lt;br /&gt;
*全般的な情報は [[iptables]] を見て下さい。&lt;br /&gt;
*iptables ファイアウォールを設定するガイドは[[シンプルなステートフルファイアウォール]]を見て下さい。&lt;br /&gt;
*netfilter を設定する他の方法は[[ファイアウォール]]を見て下さい。&lt;br /&gt;
*Bluetack などの IP アドレスのリストをブロックする方法は [[Ipset]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
===カーネルパラメータ===&lt;br /&gt;
ネットワークに影響を与えるカーネルパラメータは [[sysctl]] を使って設定できます。設定方法は [[sysctl#TCP/IP スタックの防御]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
===SSH===&lt;br /&gt;
[[SSH 鍵#パスワードログインの無効化|SSH 鍵を必要]]としない [[Secure Shell]] を使うのは避けましょう。これは[[Wikipedia:ja:総当たり攻撃|総当たり攻撃]]を防ぎます。また、[[Fail2ban]] や [[Sshguard]] はログを監視して [[iptables|iptables ルール]]を書き込む方式の保護を提供しますが、攻撃者がアドレスを識別して管理者からのパケットのように偽装することができるため、サービスの妨害が行われる危険性があります。&lt;br /&gt;
&lt;br /&gt;
[[Secure Shell#root ログインを拒否する|root ログインを拒否する]]のは、侵入追跡と root アクセス前のセキュリティレイヤを追加するという両方の面でグッドプラクティスです。&lt;br /&gt;
&lt;br /&gt;
===DNS===&lt;br /&gt;
&lt;br /&gt;
[[en2:DNSSEC|DNSSEC]] や [[DNSCrypt]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
==パッケージの認証==&lt;br /&gt;
パッケージの署名が適正に使われていないと [http://www.cs.arizona.edu/stork/packagemanagersecurity/attacks-on-package-managers.html#overview パッケージマネージャへの攻撃] が考えられ、さらに [http://www.cs.arizona.edu/stork/packagemanagersecurity/faq.html 適切な署名システム] を使っているパッケージマネージャにも影響を与える可能性があります。Arch はデフォルトでパッケージの署名を使用しており5つの信頼されたマスターキーによる web of trust を使っています。詳しくは [[Pacman-key]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
==物理セキュリティ==&lt;br /&gt;
{{Note|リモート攻撃からコンピュータを守りたいだけの場合はこのセクションは無視してかまいません。}}&lt;br /&gt;
&lt;br /&gt;
十分な時間とリソースさえあればコンピュータへの物理的なアクセスは root アクセスになります。しかしながら、十分な防御策を張ることで&#039;&#039;実用的で&#039;&#039;高いレベルのセキュリティを得ることができます。&lt;br /&gt;
&lt;br /&gt;
攻撃者は悪意のある IEEE 1394 (FireWire), Thunderbolt, PCI Express デバイスを取り付けることでメモリーへの完全なアクセスを手に入れることができ、次に起動した時には簡単にコンピュータの完全なコントロールを手中に収めることができます [http://www.breaknenter.org/projects/inception/]。これを防ぐために出来ることは限られており、悪意のあるファームウェアをドライブに書き込むなどハードウェア自体の改変に対処することは不可能です。ただし、攻撃者の大部分にはこうした知識がなく実行されることはほとんどありません。&lt;br /&gt;
&lt;br /&gt;
[[#ディスク暗号化|ディスク暗号化]]はコンピュータが盗まれた場合にデータへのアクセスを防止しますが、あなたが次にログインしたときにデータを取得するために悪意のあるファームウェアが能力のある攻撃者によってインストールされる可能性があります。&lt;br /&gt;
&lt;br /&gt;
===BIOS をロックダウンする===&lt;br /&gt;
&lt;br /&gt;
BIOS にパスワードを追加することによってリムーバルメディアから誰かが起動する (これはコンピュータへの root アクセスと基本的に同義です) のを予防します。使用しているドライブがブートの順番で一番最初に来ることを確認して、可能であれば他のドライブのブートを無効にしてください。&lt;br /&gt;
&lt;br /&gt;
===ブートローダー===&lt;br /&gt;
&lt;br /&gt;
ブートローダーの保護はとても重要です。{{ic|1=init=/bin/sh}} というたった一つのカーネルパラメータで、全てのユーザー・ログイン制限が全くの無に帰します。&lt;br /&gt;
&lt;br /&gt;
====Syslinux====&lt;br /&gt;
&lt;br /&gt;
Syslinux は[[Syslinux#セキュリティ|ブートローダーのパスワード保護]]をサポートしています。メニューのアイテムごとにパスワードを設定したり、ブートローダー全体にパスワードの保護を設定することが可能です。&lt;br /&gt;
&lt;br /&gt;
====GRUB====&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] も同じくブートローダーのパスワードをサポートしています。詳しくは [[GRUB/Tips and tricks#GRUB メニューのパスワード保護]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
===root でのコンソールログインを拒む===&lt;br /&gt;
コンソールからの root ログインを拒否するよう設定を変更すれば侵入者がシステムへのアクセスを取得するのを難しくすることができます。侵入者はシステムに存在するユーザーの名前とそのユーザーのパスワードを考えなくてはならなくなります。コンソールによって root がログインできるようになっている場合、侵入者が解き当てるのはパスワードだけで十分になります。&lt;br /&gt;
コンソールの root ログインのブロックは {{ic|/etc/securetty}} の tty 行をコメントアウトすることで行います。&lt;br /&gt;
{{hc|/etc/securetty|&lt;br /&gt;
#tty1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ブロックしたい tty 全てで同じようにコメントアウトしてください。&lt;br /&gt;
変更の効果を確認するには、一つの行だけをコメントアウトしてから特定のコンソールに移って root でのログインを試行してみてください。{{ic|Login incorrect}} というメッセージが表示されるはずです。ブロックされたことを確認したら、戻ってから残りの tty 行をコメントアウトしてください。&lt;br /&gt;
{{Note|If you see {{ic|ttyS0}} this is for a serial console. Similarly, on Xen virtualized systems {{ic|hvc0}} is for the administrator.}}&lt;br /&gt;
&lt;br /&gt;
=== 自動ログアウト ===&lt;br /&gt;
[[Bash]] または [[Zsh]] を使っている場合、{{ic|TMOUT}} によってタイムアウトによるシェルからの自動ログアウトを設定できます。&lt;br /&gt;
&lt;br /&gt;
例えば、以下は仮想コンソールから自動でログアウトします (X11 のターミナルエミュレータからはログアウトしません):&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/profile.d/shell-timeout.sh|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
TMOUT=&amp;quot;$(( 60*10 ))&amp;quot;;&lt;br /&gt;
[ -z &amp;quot;$DISPLAY&amp;quot; ] &amp;amp;&amp;amp; export TMOUT;&lt;br /&gt;
case $( /usr/bin/tty ) in&lt;br /&gt;
	/dev/tty[0-9]*) export TMOUT;;&lt;br /&gt;
esac&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
(X のコンソールも含めて) 全ての Bash/Zsh プロンプトでタイムアウトさせたい場合は、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ export TMOUT=&amp;quot;$(( 60*10 ))&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
シェルで何かコマンドが動作している間はこのタイムアウトは動作しないので注意してください (例: SSH セッションや {{ic|TMOUT}} をサポートしていない他のシェル)。しかしながら固まった GDM/Xorg を root で再起動するのに VC を使っているような場合は、とても有用です。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* ArchWiki のセキュリティアプリケーションのリスト: [[アプリケーション一覧/セキュリティ]]&lt;br /&gt;
* [http://www.puschitz.com/SecuringLinux.shtml Securing and Hardening Red Hat Linux Production Systems]&lt;br /&gt;
* [http://www.ibm.com/developerworks/linux/tutorials/l-harden-desktop/index.html Hardening the linux desktop]&lt;br /&gt;
* [http://www.ibm.com/developerworks/linux/tutorials/l-harden-server/index.html Hardening the linux server]&lt;br /&gt;
* [http://www.faqs.org/docs/securing/index.html Securing and Optimizing Linux]&lt;br /&gt;
* [http://www.auscert.org.au/5816 UNIX and Linux Security Checklist v3.0]&lt;br /&gt;
* [http://wiki.centos.org/HowTos/OS_Protection CentOS Wiki: OS Protection]&lt;br /&gt;
* [http://www.debian.org/doc/manuals/securing-debian-howto/securing-debian-howto.en.pdf Hardening Debian (pdf)]&lt;br /&gt;
* [http://crunchbang.org/forums/viewtopic.php?id=24722 The paranoid #! Security Guide]&lt;br /&gt;
* [https://github.com/lfit/itpol/blob/master/linux-workstation-security.md Linux Foundation&#039;s Linux workstation security checklist]&lt;br /&gt;
* [https://www.privacytools.io/ privacytools.io]&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;diff=5215</id>
		<title>セキュリティ</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;diff=5215"/>
		<updated>2016-04-09T13:28:41Z</updated>

		<summary type="html">&lt;p&gt;Fragment: /* パスワード */ 英語wikiから説のインポート&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:セキュリティ]]&lt;br /&gt;
[[Category:ファイルシステム]]&lt;br /&gt;
[[Category:ネットワーク]]&lt;br /&gt;
[[en:Security]]&lt;br /&gt;
[[ru:Security]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|アプリケーション一覧/セキュリティ}}&lt;br /&gt;
{{Related|:カテゴリ:セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
この記事では Arch Linux システムを防御するための推奨事項とベストプラクティスを並べています。&lt;br /&gt;
&lt;br /&gt;
==概念==&lt;br /&gt;
*セキュリティを厳しくするあまりシステムが使い物にならなくなってしまう可能性があります。うまいやり方は度を越さない程度にセキュリティを強化します。&lt;br /&gt;
*セキュリティを高めるために出来ることは数多く存在しますが、一番の脅威はいつだってユーザー自身です。セキュリティを考える時は、多層防御を考える必要があります。ある層が突破されたとしても、他の層が攻撃を防御しなくてはなりません。ただし全てのネットワークからマシンを切断して、金庫にしまって決して使わないかぎり、システムを100%セキュアにすることは不可能です。&lt;br /&gt;
*少しだけ病的なまでの心配性 (パラノイド) になりましょう。それは役に立ちます。そして疑り深くなってください。話がうますぎるように聞こえたら、おそらくその通りです。&lt;br /&gt;
*[[Wikipedia:ja:最小権限の原則|最小権限の原則]]: システムの各部位は使用に必要なことにだけしかアクセスできないようにするべきで、それ以上は必要ありません。&lt;br /&gt;
&lt;br /&gt;
==パスワード==&lt;br /&gt;
パスワードは安全な linux システムのかぎです。パスワードは[[ユーザーとグループ|ユーザーアカウント]], [[ディスク暗号化|暗号化されたファイルシステム]], [[SSH 鍵|SSH]]/[[GPG]] 鍵などを守ります。コンピュータを使用する人を信頼するのに使う主要な手段なので、安全なパスワードを選んでそれを保護するというのがセキュリティの大部分と言っても過言ではありません。&lt;br /&gt;
&lt;br /&gt;
===強力なパスワードの選び方===&lt;br /&gt;
&lt;br /&gt;
パスワードは簡単に[[Wikipedia:ja:パスワードクラック|割り出されたり]]または個人情報から類推されないようにすることが重要です。そういうわけで、辞書に載っている単語やあなたの飼っている犬の名前などは使わないようにしましょう。パスワードは出来るだけ8文字以上で、小文字と大文字を混ぜてください。さらに数字や特殊文字も1文字以上含めると良いでしょう。当たり前ですが、長くて複雑なパスワードが基本的に良いパスワードとされます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|pwgen}} や {{Pkg|apg}} などのツールは安全なパスワードを生成するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
また、ある文章の各単語の一番最初を取ってパスワードを作ることもできます。&lt;br /&gt;
例えば “the girl is walking down the rainy street” なら “t6!WdtR5” とパスワードにすることができます。この方法はパスワードを覚えるのをずっと簡単にしてくれます。さらに、入力するのが面倒くさくなりますがパスワードを “The girl is walking down the rainy street&amp;quot; にすることも可能です。&lt;br /&gt;
&lt;br /&gt;
===パスワードの管理===&lt;br /&gt;
強固なパスワードを選び出したら、それを安全に保管してください。[[Wikipedia:ja:ソーシャル・エンジニアリング|心理操作]]や[[Wikipedia:Shoulder surfing (computer security)|ショルダーサーフィン]]に注意したり、セキュアでないサーバーから必要以上に情報が流出するのをふせぐためにパスワードを再利用しないようにしてください。{{Pkg|pass}}, {{Pkg|keepassx}}, {{Pkg|gnome-keyring}} などのツールは大量の複雑なパスワードを管理するのに役立ちます。[[Wikipedia:ja:LastPass|Lastpass]] はデバイス間で同期するためにオンラインで暗号化されたパスワードを保存するサービスですが、クローズドソースのコードと外部の企業の両方を信頼する必要があります。&lt;br /&gt;
&lt;br /&gt;
概して、安全なパスワードは覚えにくいからといって安全でないパスワードを使ってはいけません。パスワードはバランスを取る必要があります。弱いパスワードをたくさん作るよりは、安全なパスワードの暗号化されたデータベースを作り、一つの強いマスターパスワードで守るほうが良いでしょう。パスワードを紙に書くのも、物理的なセキュリティを必要としますがソフトウェアの脆弱性を防ぐ点では同じくらい有効です [https://www.schneier.com/blog/archives/2005/06/write_down_your.html]。&lt;br /&gt;
&lt;br /&gt;
===パスワードのハッシュ===&lt;br /&gt;
{{Warning|SHA512 は高速なハッシュ関数として設計されており、パスワードのハッシュ用には作られていません。bcrypt や scrypt などに比べて SHA512 によってハッシュ化されたパスワードには攻撃者は&#039;&#039;はるかに&#039;&#039;高速にブルートフォース攻撃をすることができます。}}&lt;br /&gt;
&lt;br /&gt;
デフォルトの Arch のハッシュ [[en2:SHA password hashes|sha512]] はとても強固で変更する必要はありません。デフォルトでは、{{ic|/etc/shadow}} にパスワードがハッシュ化されて保存され、root にだけ読み取り許可を与え、{{ic|/etc/passwd}} にはユーザー識別子だけが保存されます。従って、[[#root の制限|root ユーザーが安全]]である限り、ファイルが外部システムにコピーされたり解読されることはありえません。&lt;br /&gt;
&lt;br /&gt;
[http://www.slashroot.in/how-are-passwords-stored-linux-understanding-hashing-shadow-utils How are passwords stored in Linux (Understanding hashing with shadow utils)] も参照してください。&lt;br /&gt;
&lt;br /&gt;
=== pam_cracklibを用いた強力なパスワードの要求 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;pam_cracklib&#039;&#039; provides protection against [[Wikipedia:Dictionary attack|Dictionary attacks]] and helps configure a password policy that can be enforced throughout the system.&lt;br /&gt;
&lt;br /&gt;
{{Warning|The &#039;&#039;root&#039;&#039; account is not affected by this policy.}}&lt;br /&gt;
{{Note|You can use the &#039;&#039;root&#039;&#039; account to set a password for a user that bypasses the desired/configured policy. This is useful when setting temporary passwords.}}&lt;br /&gt;
&lt;br /&gt;
If for example you want to enforce this policy:&lt;br /&gt;
* prompt 2 times for password in case of an error&lt;br /&gt;
* 10 characters minimum length (minlen option)&lt;br /&gt;
* at least 6 characters should be different from old password when entering a new one (difok option)&lt;br /&gt;
* at least 1 digit (dcredit option)&lt;br /&gt;
* at least 1 uppercase (ucredit option)&lt;br /&gt;
* at least 1 other character (ocredit option)&lt;br /&gt;
* at least 1 lowercase (lcredit option)&lt;br /&gt;
&lt;br /&gt;
Edit the {{ic|/etc/pam.d/passwd}} file to read as:&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
password required pam_cracklib.so retry=2 minlen=10 difok=6 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1&lt;br /&gt;
password required pam_unix.so use_authtok sha512 shadow&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The {{ic|password required pam_unix.so use_authtok}} instructs the &#039;&#039;pam_unix&#039;&#039; module to not prompt for a password but rather to use the one provided by &#039;&#039;pam_cracklib&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
You can refer to the pam_cracklib(8) and pam_unix(8) man pages for more information.&lt;br /&gt;
&lt;br /&gt;
==パーティション==&lt;br /&gt;
&lt;br /&gt;
現在カーネルは {{ic|fs.protected_hardlinks}} や {{ic|fs.protected_symlinks}} sysctl スイッチが有効になっていればハードリンクやシンボリックリンクに関するセキュリティの問題を解決するので、world-writable なディレクトリを分離させるセキュリティ的な利点はもはや存在しません。&lt;br /&gt;
&lt;br /&gt;
それでもディスク容量が消耗したときのダメージを低減させる荒っぽい方法として world-writable なディレクトリを含むパーティションが分割されることがあります。しかしながら、サービスを落とすには {{ic|/var}} や {{ic|/tmp}} などのパーティションを一杯にするだけで十分です。この問題の対処についてはもっと柔軟性のある方法が存在します (クォータなど)、またファイルシステムによっては関連する機能を持っていることがあります (btrfs はサブボリュームにクォータを設定できます)。&lt;br /&gt;
&lt;br /&gt;
===マウントオプション===&lt;br /&gt;
&lt;br /&gt;
最小権限の原則に従って、パーティションは (機能性を失わない限りで) 最も制限的なマウントオプションを使ってマウントすると良いでしょう。&lt;br /&gt;
&lt;br /&gt;
====関連するマウントオプション====&lt;br /&gt;
&lt;br /&gt;
*{{ic|nodev}}: ファイルシステム上のキャラクタ・ブロック特殊デバイスを解釈しない。&lt;br /&gt;
*{{ic|nosuid}}: set-user-identifier や set-group-identifier ビットの効果を許可しない。&lt;br /&gt;
*{{ic|noexec}}: マウントされたファイルシステム上の全てのバイナリの直接実行を許可しない。&lt;br /&gt;
&lt;br /&gt;
====使用例====&lt;br /&gt;
&lt;br /&gt;
{{Note|データパーティションはいつでも {{ic|nodev}}, {{ic|nosuid}}, {{ic|noexec}} でマウントするべきです。}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |&#039;&#039;&#039;パーティション&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |{{ic|nodev}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |{{ic|nosuid}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |{{ic|noexec}}&lt;br /&gt;
|-&lt;br /&gt;
| {{ic|/var}}||yes||yes||yes &amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| {{ic|/home}}||yes||yes||yes, if you do not code, use wine or steam&lt;br /&gt;
|-&lt;br /&gt;
| {{ic|/dev/shm}}||yes||yes||yes&lt;br /&gt;
|-&lt;br /&gt;
| {{ic|/tmp}}||yes||yes||maybe, breaks compiling packages and various other things&lt;br /&gt;
|-&lt;br /&gt;
| {{ic|/boot}}||yes||yes||yes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt; パッケージによっては (例えば {{Pkg|nvidia-dkms}}) {{ic|/var}} で {{ic|exec}} を必要とすることがあるので注意してください。&lt;br /&gt;
&lt;br /&gt;
==ファイルシステムのパーミッション==&lt;br /&gt;
デフォルトのファイルシステムのパーミッションはほぼ全ての読み取りアクセスが許可されているため、パーミッションを変更することで http や nobody ユーザーなど root 以外のアカウントへのアクセスを手に入れた攻撃者から重要な情報を隠すことができます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
 # chmod 700 /boot /etc/{iptables,arptables}&lt;br /&gt;
&lt;br /&gt;
デフォルトの [[Umask]] を変更することで新しく作成したファイルのセキュリティを向上させることができます。[http://www.nsa.gov/ia/_files/os/redhat/rhel5-guide-i731.pdf NSA RHEL5 Security Guide] はセキュリティを最大化させるために {{ic|077}} の umask を提案しています、これは新しいファイルの所有者以外のユーザーによる読み取りを出来なくします。umask を変更するには、[[Umask#マスクの値を設定]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==ディスク暗号化==&lt;br /&gt;
&lt;br /&gt;
[[ディスク暗号化]]、特に[[#パスワード|強固なパスフレーズ]]による完全ディスク暗号化は、物理的なリカバリからデータを守る唯一の方法です。コンピュータの電源がオフになっていて問題のディスクがアンマウントされている時は完璧なセキュリティを提供します。&lt;br /&gt;
&lt;br /&gt;
しかしながら、コンピュータの電源が入れられてドライブがマウントされると、そのデータは暗号化されていないドライブと同じように無防備になります。そのためデータが必要なくなったときはすぐにデータのパーティションをアンマウントするのが最善です。&lt;br /&gt;
&lt;br /&gt;
[[Dm-crypt]] など特定のプログラムでは、ループファイルを物理ボリュームとして暗号化することができます。これはシステムの特定部分だけを守りたいときに完全なディスク暗号化の代わりの選択肢となりえます。&lt;br /&gt;
&lt;br /&gt;
==ユーザー設定==&lt;br /&gt;
インストールした後は日常の使用のために通常ユーザーを作成してください。root ユーザーを常用してはいけません。&lt;br /&gt;
&lt;br /&gt;
===3回ログインを失敗したユーザーをロックアウトする===&lt;br /&gt;
セキュリティをさらに高めるために、指定した回数ログインを失敗したユーザーをログインできなくすることが可能です。root ユーザーがロックを解除するまでそのユーザーアカウントにロックをかけるか、または設定した時間が経つと自動でロックが解除されるように設定できます。&lt;br /&gt;
3回ログインを失敗したユーザーを10分間ログインできないようにするには {{ic|/etc/pam.d/system-login}} を変更する必要があります:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/pam.d/system-login|&lt;br /&gt;
2=auth required pam_tally.so deny=2 unlock_time=600 onerr=succeed file=/var/log/faillog&lt;br /&gt;
#auth required pam_tally.so onerr=succeed file=/var/log/faillog&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
2行目のコメントを消すとログインの失敗ごとに2度カウントされるようになります。これだけです。冒険心を味わいたければ、ログインを3回失敗してみてください。それで何が起こるか分かるはずです。手動でユーザーのロックを解除するには次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # pam_tally --user &#039;&#039;username&#039;&#039; --reset&lt;br /&gt;
&lt;br /&gt;
3回ログインが失敗したユーザーを永遠にログインできないようにしたい場合 {{ic|unlock_time}} の部分を削除してください。こうすると root がアカウントをアンロックするまでログインできなくなります。&lt;br /&gt;
&lt;br /&gt;
=== プロセスの数を制限する ===&lt;br /&gt;
&lt;br /&gt;
信頼できないユーザーが大量に存在するシステムでは、一度に実行できるプロセスの数を制限して、[[Wikipedia:ja:Fork爆弾|フォーク爆弾]]などのサービス拒否攻撃を予防することが重要です。ユーザーやグループごとに実行できるプロセスの数は {{ic|/etc/security/limits.conf}} で定義することができ、デフォルトでは空になっています。以下の値をファイルに追加すると、実行できるプロセスが100個までに制限されます。ulimit コマンドを使って一時的に上げられる最大数も200個までに制限します。ユーザーが普段実行するプロセスの数や、管理するハードウェアにあわせて適切な値に変更してください。&lt;br /&gt;
&lt;br /&gt;
 * soft nproc 100&lt;br /&gt;
 * hard nproc 200&lt;br /&gt;
&lt;br /&gt;
== root の制限 ==&lt;br /&gt;
root ユーザーは、定義上、システムで最も強力なユーザーです。このため、root ユーザーの権限を維持しながら害を及ぼす力を制限する、もしくは root ユーザーの行動をもっと追跡できるようにする方法が多数存在します。&lt;br /&gt;
&lt;br /&gt;
===su の代わりに sudo を使う===&lt;br /&gt;
[[Su#セキュリティ|色々な理由]]から特権アクセスには [[su]] よりも [[sudo]] を使うほうが好ましいとされます。&lt;br /&gt;
&lt;br /&gt;
* 通常の権限しか持たないユーザーが実行した特権コマンドのログを保持します。&lt;br /&gt;
* root アクセスを必要とする各ユーザーに root ユーザーのパスワードを与える必要がありません。&lt;br /&gt;
* 完全な root ターミナルは作成されないため、{{ic|sudo}} は root アクセスが必要ないコマンドを偶発的に &#039;&#039;root&#039;&#039; で実行してしまうことを防止します。これは[[Wikipedia:ja:最小権限の原則|最小権限の原則]]と合っています。&lt;br /&gt;
* 一つのコマンドを実行するためだけに完全な root アクセスを与える代わりに、ユーザーごとに個々のプログラムを有効にすることができます。例えば、ユーザー &#039;&#039;alice&#039;&#039; に特定のプログラムへのアクセス権限を与えるには:&lt;br /&gt;
&lt;br /&gt;
 # visudo&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sudoers|&lt;br /&gt;
alice ALL &amp;amp;#61; NOPASSWD: /path/to/program}}&lt;br /&gt;
&lt;br /&gt;
また、全てのユーザーに個別のコマンドを許可することも可能です。通常ユーザーでサーバーから Samba 共有をマウントするには:&lt;br /&gt;
&lt;br /&gt;
 %users ALL=/sbin/mount.cifs,/sbin/umount.cifs&lt;br /&gt;
&lt;br /&gt;
これによって users グループのメンバーである全てのユーザーが全てのマシン (ALL) から {{ic|/sbin/mount.cifs}} や {{ic|/sbin/umount.cifs}} コマンドを実行できるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|visudo}} で {{ic|vi}} の代わりに {{ic|nano}} を使うには:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sudoers|&lt;br /&gt;
2=Defaults editor=/usr/bin/rnano&lt;br /&gt;
}}&lt;br /&gt;
{{ic|1=# EDITOR=nano visudo}} のエクスポートは何にでも {{ic|EDITOR}} として使うことができるためにセキュリティリスクとされています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
====sudo を使ってファイルを編集する====&lt;br /&gt;
root で {{ic|vim}} などのテキストエディタを使用するのはセキュリティ上の脆弱性になりえます。ユーザーは任意のシェルコマンドを実行でき、コマンドを実行したユーザーのログが残らないからです。これを解決するには、以下をシェルの設定ファイルに追加してください:&lt;br /&gt;
&lt;br /&gt;
 export SUDO_EDITOR=rvim&lt;br /&gt;
&lt;br /&gt;
ファイルの編集には {{ic|sudoedit filename}} または {{ic|sudo -e filename}} を使って下さい。自動的に {{ic|rvim}} によって {{ic|filename}} が編集されるようになり、テキストエディタからのシェルコマンドが無効になります。&lt;br /&gt;
&lt;br /&gt;
===root ログインの制限===&lt;br /&gt;
[[sudo]] を適切に設定することで、ユーザビリティをあまり下げることなく完全な root アクセスを大分制限することが可能です。&lt;br /&gt;
&lt;br /&gt;
====特定のユーザーだけに許可を与える====&lt;br /&gt;
[[Wikipedia:Pluggable authentication module|PAM]] の {{ic|pam_wheel.so}} は {{ic|wheel}} グループに入っているユーザーだけに {{ic|su}} を使用したログインを許可します。{{ic|/etc/pam.d/su}} と {{ic|/etc/pam.d/su-l}} の両方を編集して次の行をアンコメントしてください:&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Uncomment the following line to require a user to be in the &amp;quot;wheel&amp;quot; group.&lt;br /&gt;
auth		required	pam_wheel.so use_uid&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
特権コマンドを実行できる既存のユーザーだけが root でログインできるようになります。&lt;br /&gt;
&lt;br /&gt;
====ssh ログインを拒否する====&lt;br /&gt;
ローカルユーザーの root ログインを拒否したくない場合でも、[[SSH#root ログインを拒否する|SSH による root ログインを拒否]]するのがグッドプラクティスです。この目的は、ユーザーがリモートでシステムを完全に手にかける前にセキュリティ層を追加することにあります。&lt;br /&gt;
&lt;br /&gt;
==強制アクセス制御==&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:強制アクセス制御|強制アクセス制御]] (Mandatory Access Control, MAC) は Arch やほとんどの Linux ディストリビューションで使われている[[Wikipedia:ja:任意アクセス制御|任意アクセス制御]] (Discretionary Access Control, DAC) とは大きく異なるタイプのセキュリティポリシーです。原則的に MAC ではシステムに影響を与えるプログラムの行動は全てセキュリティルールセットによってチェックを受けます。このルールセットは、DAC とは対照的に、ユーザーが変更することは不可能です。実装方法は色々と異なるタイプが存在しますが、強制アクセス制御を使うことで実質的にコンピュータのセキュリティを著しく向上させることになります。&lt;br /&gt;
&lt;br /&gt;
===パス名 MAC===&lt;br /&gt;
パス名ベースのアクセス制御は指定されたファイルのパスに基づいてパーミッションを与えるというシンプルな形式のアクセス制御です。この形式のアクセス制御の欠点としてはファイルが移動されてもパーミッションはファイルと一緒に付いていかないということが挙げられます。プラス面となるのは、パス名ベースの MAC はラベルベースの MAC と異なり、幅広いファイルシステムに実装できることです。&lt;br /&gt;
&lt;br /&gt;
*[[AppArmor]] は [[Wikipedia:ja:カノニカル|Canonical]] によって開発されている MAC 実装で SELinux に比べて&amp;quot;簡単&amp;quot;になっています。&lt;br /&gt;
*[[TOMOYO Linux|Tomoyo]] はもうひとつのシンプルで、使いやすい強制アクセス制御を提供するシステムです。利用と実装の両面でシンプルになるように設計されており、依存するライブラリがとても少なくなっています。&lt;br /&gt;
&lt;br /&gt;
===ロールベースアクセス制御===&lt;br /&gt;
grsecurity がサポートしている MAC 実装はロールベースアクセス制御と呼ばれています。RBAC はユーザーごとにロールを割り当てます。それぞれのロールには特定のオブジェクトで実行できる操作を定義します。上手く記述されたロールと操作を使うことでユーザーに指定した作業しかできないように制限をかけることができます。デフォルトの &amp;quot;deny-all&amp;quot; では管理者が想定していない行動をユーザーは出来ません。&lt;br /&gt;
&lt;br /&gt;
*[[Grsecurity#RBAC|Grsecurity RBAC]] には設定を楽にするため AppArmor のような学習モードが備わっています。&lt;br /&gt;
*[[Grsecurity#RBAC|Grsecurity RBAC]] は SELinux のように付加的なメタデータを使いません。RBAC は SELinux よりもずっと高速です。&lt;br /&gt;
&lt;br /&gt;
===ラベル MAC===&lt;br /&gt;
ラベルベースのアクセス制御ではファイルの拡張属性を使ってセキュリティパーミッションを管理します。このシステムはセキュリティの機能においてパス名ベースの MAC よりも間違いなく柔軟性が高い一方、拡張属性をサポートしているファイルシステムでしか動作しません。&lt;br /&gt;
&lt;br /&gt;
*[[SELinux]] は、Linux セキュリティを向上させる [[Wikipedia:ja:アメリカ国家安全保障局|NSA]] プロジェクトに基づいており、システムユーザーやロールとは完全に独立して MAC を実装しています。成長してオリジナルの設定が変わっていくシステムのコントロールを簡単に維持できる、極めて強固なマルチレベル MAC ポリシー実装を提供します。&lt;br /&gt;
&lt;br /&gt;
=== アクセス制御リスト ===&lt;br /&gt;
[[Wikipedia:ja:アクセス制御リスト|アクセス制御リスト]] (Access Control List, ACL) は何らかの方法で直接ファイルシステムにルールを付加する代わりとなる手段です。ACL はプログラムの行動を許可された挙動のリストでチェックすることによりアクセス制御を実装しています。&lt;br /&gt;
&lt;br /&gt;
*[[grsecurity]] はセキュリティを向上させるための完全なカーネルパッチセットだけでなく、ACL アクセス制御も実装しています。メモリ割り当てのコントロールを拡張し、chroot 制限を改良、特定のネットワーク挙動に関係するルールを定めます。&lt;br /&gt;
&lt;br /&gt;
==カーネルの防御==&lt;br /&gt;
&lt;br /&gt;
===カーネルログへのアクセスを制限する===&lt;br /&gt;
&lt;br /&gt;
カーネルログにはカーネルの脆弱性を突こうとしている攻撃者にとって有益な情報、保護が必要なメモリーアドレスなどが含まれています。{{ic|kernel.dmesg_restrict}} フラグは  (デフォルトで root として実行しているプロセスしか持たない) {{ic|CAP_SYS_ADMIN}} ケイパビリティのないログへのアクセスを禁止します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/50-dmesg-restrict.conf|2=kernel.dmesg_restrict = 1}}&lt;br /&gt;
&lt;br /&gt;
===proc ファイルシステムのカーネルポインタへのアクセスを制限する===&lt;br /&gt;
&lt;br /&gt;
{{ic|kernel.kptr_restrict}} を有効にすると {{ic|CAP_SYSLOG}} のない通常ユーザーから {{ic|/proc/kallsyms}} のカーネルシンボルのアドレスが秘匿され、動的にアドレス・シンボルを解決するカーネル exploit が難しくなります。これは事前にコンパイルされた Arch Linux カーネルではあまり意味がありません、周到な攻撃者はカーネルパッケージをダウンロードしてそこから手動でシンボルを取得することができるからです。しかしながら自分でカーネルをコンパイルする場合は、ローカルの root 攻撃を減らす効果があります。ただし root 以外のユーザーで使用する場合いくつかの {{Pkg|perf}} コマンドが破壊されます (メインの {{Pkg|perf}} 機能には結局 root アクセスが必要になりますが)。詳しくは {{Bug|34323}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/50-kptr-restrict.conf|2=kernel.kptr_restrict = 1}}&lt;br /&gt;
&lt;br /&gt;
===BPF JIT コンパイラを無効にする===&lt;br /&gt;
&lt;br /&gt;
Linux カーネルにはパフォーマンス最適化のために BPF/Seccomp ルールセットをネイティブコードにコンパイルする機能が含まれています。最高レベルのセキュリティのために {{ic|net.core.bpf_jit_enable}} フラグは0にしておくべきです。&lt;br /&gt;
&lt;br /&gt;
コンパイラは特定の領域では有用ですが、通常は役に立ちません。JIT コンパイラは攻撃者がヒープスプレー攻撃を行う機会を与え、カーネルのヒープが悪意のあるコードで満たされるかもしれません。このコードは不正な関数へのポインタの間接参照など、他の脆弱性攻撃によって実行される危険性があります。&lt;br /&gt;
&lt;br /&gt;
{{note|[[grsecurity]] には BPF JIT コンパイラの JIT ハードニングが含まれており、攻撃のリスクを大幅に減らします。}}&lt;br /&gt;
&lt;br /&gt;
===ptrace スコープ===&lt;br /&gt;
&lt;br /&gt;
{{ic|kernel.yama.ptrace_scope}} フラグによって、Arch は Yama LSM をデフォルトで有効にしています。このフラグはプロセスが {{ic|CAP_SYS_PTRACE}} のないスコープの外で他のプロセスに {{ic|ptrace}} コールを実行するのを止めます。多くのデバッグツールがいくつかの機能を使うためにこれを必要としますが、セキュリティの面では飛躍的な改善になります。この機能がないと、名前空間のような外部レイヤーを適用しないかぎり同一ユーザーで動作するプロセスの分割は基本的に行われません。デバッガを既存プロセスにアタッチできることはこの欠点のデモンストレーションです。&lt;br /&gt;
&lt;br /&gt;
{{note|[[grsecurity]] では、この防護は {{ic|kernel.grsecurity.harden_ptrace}} フラグによって切り替えます。}}&lt;br /&gt;
&lt;br /&gt;
====破壊される機能の例====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|sudo}} を使って特定のユーザーに、パスワード有り無しで許可を与えたりすることで、root で以下のコマンドを実行することは可能です。}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|gdb -p $PID}}&lt;br /&gt;
* {{ic|strace -p $PID}}&lt;br /&gt;
* {{ic|perf trace -p $PID}}&lt;br /&gt;
* {{ic|reptyr $PID}}&lt;br /&gt;
&lt;br /&gt;
=== リンクの [[Wikipedia:TOCTOU|TOCTOU]] 攻撃を防止する ===&lt;br /&gt;
&lt;br /&gt;
この機能が追加された日時や根拠についてはこの [https://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commitdiff;h=800179c9b8a1e796e441674776d11cd4c05d61d7 commit メッセージ]を見て下さい。&lt;br /&gt;
&lt;br /&gt;
 fs.protected_hardlinks = 1&lt;br /&gt;
 fs.protected_symlinks = 1&lt;br /&gt;
&lt;br /&gt;
{{Note|現在は {{ic|/usr/lib/sysctl.d/50-default.conf}} によってデフォルトで有効にされています。}}&lt;br /&gt;
&lt;br /&gt;
===hidepid===&lt;br /&gt;
&lt;br /&gt;
カーネルには権限がないユーザーから他のユーザーのプロセスを秘匿させる機能が存在し、{{ic|proc}} ファイルシステムを {{ic|1=hidepid=1}} または {{ic|1=hidepid=2}} でマウントすることで有効になります。ただし、[http://lists.freedesktop.org/archives/systemd-devel/2012-October/006859.html この機能は現在 systemd を破壊します]。カーネルによるコンテナの cgroups ファイルシステムの仮想化サポートが欠けているために、その対応策が必要だからです。&lt;br /&gt;
&lt;br /&gt;
===grsecurity===&lt;br /&gt;
&lt;br /&gt;
標準の Linux カーネルは機密情報へのアクセスを必要以上に許可しておりメモリーの脆弱性攻撃への保護は最低限しか提供していません。[https://grsecurity.net/ Grsecurity] はこれを修正することを目指しています。Grsecurity には PaX のメモリーパッチがバンドルされています。PaX は ALSR を発明しており、強力な保護を提供します。Grsecurity はファイルシステムを防護し、高度なロールベースアクセス制御を提供して、せっかくの PaX のメモリー保護を無駄にするような情報漏洩を防ぎます。&lt;br /&gt;
&lt;br /&gt;
== アプリケーションのサンドボックス化 ==&lt;br /&gt;
&lt;br /&gt;
=== Firejail ===&lt;br /&gt;
&lt;br /&gt;
[[Firejail]] はアプリケーションやサーバーをサンドボックス化するためのシンプルで使いやすいツールです。Firejail はサーバーだけでなくブラウザなどのインターネットに接続するアプリケーションでも使うことができます。Grsecurity と一緒に使うことで Firejail はさらに強化することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== chroot ===&lt;br /&gt;
&lt;br /&gt;
手動で [[chroot]] 監獄を構築する方法もあります。&lt;br /&gt;
&lt;br /&gt;
=== Linux Containers ===&lt;br /&gt;
&lt;br /&gt;
他の手段 (KVM や Virtualbox) よりも強力な分離が必要なときは [[Linux Containers]] を選択するのもよいでしょう。LXC は仮想ハードウェアを使って擬似的な chroot で既存のカーネル上で動作します。&lt;br /&gt;
&lt;br /&gt;
=== 他の仮想化手段 ===&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]], [[KVM]], [[Xen]] などの完全な仮想化マシンを使うことでもセキュリティを向上させることができます。危険なアプリケーションを実行したり危険なウェブサイトを開いたりするときに役に立つでしょう。&lt;br /&gt;
&lt;br /&gt;
==ネットワークとファイアウォール==&lt;br /&gt;
&lt;br /&gt;
===ファイアウォール===&lt;br /&gt;
標準の Arch カーネルは [[Wikipedia:ja:iptables|Netfilter]] の [[iptables]] を使用する能力がありますが、デフォルトでは有効になっていません。[[公式リポジトリ]]から {{Pkg|iptables}} をインストールして、有効にし、ファイアウォールを設定することが強く推奨されます。&lt;br /&gt;
&lt;br /&gt;
*全般的な情報は [[iptables]] を見て下さい。&lt;br /&gt;
*iptables ファイアウォールを設定するガイドは[[シンプルなステートフルファイアウォール]]を見て下さい。&lt;br /&gt;
*netfilter を設定する他の方法は[[ファイアウォール]]を見て下さい。&lt;br /&gt;
*Bluetack などの IP アドレスのリストをブロックする方法は [[Ipset]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
===カーネルパラメータ===&lt;br /&gt;
ネットワークに影響を与えるカーネルパラメータは [[sysctl]] を使って設定できます。設定方法は [[sysctl#TCP/IP スタックの防御]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
===SSH===&lt;br /&gt;
[[SSH 鍵#パスワードログインの無効化|SSH 鍵を必要]]としない [[Secure Shell]] を使うのは避けましょう。これは[[Wikipedia:ja:総当たり攻撃|総当たり攻撃]]を防ぎます。また、[[Fail2ban]] や [[Sshguard]] はログを監視して [[iptables|iptables ルール]]を書き込む方式の保護を提供しますが、攻撃者がアドレスを識別して管理者からのパケットのように偽装することができるため、サービスの妨害が行われる危険性があります。&lt;br /&gt;
&lt;br /&gt;
[[Secure Shell#root ログインを拒否する|root ログインを拒否する]]のは、侵入追跡と root アクセス前のセキュリティレイヤを追加するという両方の面でグッドプラクティスです。&lt;br /&gt;
&lt;br /&gt;
===DNS===&lt;br /&gt;
&lt;br /&gt;
[[en2:DNSSEC|DNSSEC]] や [[DNSCrypt]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
==パッケージの認証==&lt;br /&gt;
パッケージの署名が適正に使われていないと [http://www.cs.arizona.edu/stork/packagemanagersecurity/attacks-on-package-managers.html#overview パッケージマネージャへの攻撃] が考えられ、さらに [http://www.cs.arizona.edu/stork/packagemanagersecurity/faq.html 適切な署名システム] を使っているパッケージマネージャにも影響を与える可能性があります。Arch はデフォルトでパッケージの署名を使用しており5つの信頼されたマスターキーによる web of trust を使っています。詳しくは [[Pacman-key]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
==物理セキュリティ==&lt;br /&gt;
{{Note|リモート攻撃からコンピュータを守りたいだけの場合はこのセクションは無視してかまいません。}}&lt;br /&gt;
&lt;br /&gt;
十分な時間とリソースさえあればコンピュータへの物理的なアクセスは root アクセスになります。しかしながら、十分な防御策を張ることで&#039;&#039;実用的で&#039;&#039;高いレベルのセキュリティを得ることができます。&lt;br /&gt;
&lt;br /&gt;
攻撃者は悪意のある IEEE 1394 (FireWire), Thunderbolt, PCI Express デバイスを取り付けることでメモリーへの完全なアクセスを手に入れることができ、次に起動した時には簡単にコンピュータの完全なコントロールを手中に収めることができます [http://www.breaknenter.org/projects/inception/]。これを防ぐために出来ることは限られており、悪意のあるファームウェアをドライブに書き込むなどハードウェア自体の改変に対処することは不可能です。ただし、攻撃者の大部分にはこうした知識がなく実行されることはほとんどありません。&lt;br /&gt;
&lt;br /&gt;
[[#ディスク暗号化|ディスク暗号化]]はコンピュータが盗まれた場合にデータへのアクセスを防止しますが、あなたが次にログインしたときにデータを取得するために悪意のあるファームウェアが能力のある攻撃者によってインストールされる可能性があります。&lt;br /&gt;
&lt;br /&gt;
===BIOS をロックダウンする===&lt;br /&gt;
&lt;br /&gt;
BIOS にパスワードを追加することによってリムーバルメディアから誰かが起動する (これはコンピュータへの root アクセスと基本的に同義です) のを予防します。使用しているドライブがブートの順番で一番最初に来ることを確認して、可能であれば他のドライブのブートを無効にしてください。&lt;br /&gt;
&lt;br /&gt;
===ブートローダー===&lt;br /&gt;
&lt;br /&gt;
ブートローダーの保護はとても重要です。{{ic|1=init=/bin/sh}} というたった一つのカーネルパラメータで、全てのユーザー・ログイン制限が全くの無に帰します。&lt;br /&gt;
&lt;br /&gt;
====Syslinux====&lt;br /&gt;
&lt;br /&gt;
Syslinux は[[Syslinux#セキュリティ|ブートローダーのパスワード保護]]をサポートしています。メニューのアイテムごとにパスワードを設定したり、ブートローダー全体にパスワードの保護を設定することが可能です。&lt;br /&gt;
&lt;br /&gt;
====GRUB====&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] も同じくブートローダーのパスワードをサポートしています。詳しくは [[GRUB/Tips and tricks#GRUB メニューのパスワード保護]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
===root でのコンソールログインを拒む===&lt;br /&gt;
コンソールからの root ログインを拒否するよう設定を変更すれば侵入者がシステムへのアクセスを取得するのを難しくすることができます。侵入者はシステムに存在するユーザーの名前とそのユーザーのパスワードを考えなくてはならなくなります。コンソールによって root がログインできるようになっている場合、侵入者が解き当てるのはパスワードだけで十分になります。&lt;br /&gt;
コンソールの root ログインのブロックは {{ic|/etc/securetty}} の tty 行をコメントアウトすることで行います。&lt;br /&gt;
{{hc|/etc/securetty|&lt;br /&gt;
#tty1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ブロックしたい tty 全てで同じようにコメントアウトしてください。&lt;br /&gt;
変更の効果を確認するには、一つの行だけをコメントアウトしてから特定のコンソールに移って root でのログインを試行してみてください。{{ic|Login incorrect}} というメッセージが表示されるはずです。ブロックされたことを確認したら、戻ってから残りの tty 行をコメントアウトしてください。&lt;br /&gt;
{{Note|If you see {{ic|ttyS0}} this is for a serial console. Similarly, on Xen virtualized systems {{ic|hvc0}} is for the administrator.}}&lt;br /&gt;
&lt;br /&gt;
=== 自動ログアウト ===&lt;br /&gt;
[[Bash]] または [[Zsh]] を使っている場合、{{ic|TMOUT}} によってタイムアウトによるシェルからの自動ログアウトを設定できます。&lt;br /&gt;
&lt;br /&gt;
例えば、以下は仮想コンソールから自動でログアウトします (X11 のターミナルエミュレータからはログアウトしません):&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/profile.d/shell-timeout.sh|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
TMOUT=&amp;quot;$(( 60*10 ))&amp;quot;;&lt;br /&gt;
[ -z &amp;quot;$DISPLAY&amp;quot; ] &amp;amp;&amp;amp; export TMOUT;&lt;br /&gt;
case $( /usr/bin/tty ) in&lt;br /&gt;
	/dev/tty[0-9]*) export TMOUT;;&lt;br /&gt;
esac&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
(X のコンソールも含めて) 全ての Bash/Zsh プロンプトでタイムアウトさせたい場合は、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ export TMOUT=&amp;quot;$(( 60*10 ))&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
シェルで何かコマンドが動作している間はこのタイムアウトは動作しないので注意してください (例: SSH セッションや {{ic|TMOUT}} をサポートしていない他のシェル)。しかしながら固まった GDM/Xorg を root で再起動するのに VC を使っているような場合は、とても有用です。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* ArchWiki のセキュリティアプリケーションのリスト: [[アプリケーション一覧/セキュリティ]]&lt;br /&gt;
* [http://www.puschitz.com/SecuringLinux.shtml Securing and Hardening Red Hat Linux Production Systems]&lt;br /&gt;
* [http://www.ibm.com/developerworks/linux/tutorials/l-harden-desktop/index.html Hardening the linux desktop]&lt;br /&gt;
* [http://www.ibm.com/developerworks/linux/tutorials/l-harden-server/index.html Hardening the linux server]&lt;br /&gt;
* [http://www.faqs.org/docs/securing/index.html Securing and Optimizing Linux]&lt;br /&gt;
* [http://www.auscert.org.au/5816 UNIX and Linux Security Checklist v3.0]&lt;br /&gt;
* [http://wiki.centos.org/HowTos/OS_Protection CentOS Wiki: OS Protection]&lt;br /&gt;
* [http://www.debian.org/doc/manuals/securing-debian-howto/securing-debian-howto.en.pdf Hardening Debian (pdf)]&lt;br /&gt;
* [http://crunchbang.org/forums/viewtopic.php?id=24722 The paranoid #! Security Guide]&lt;br /&gt;
* [https://github.com/lfit/itpol/blob/master/linux-workstation-security.md Linux Foundation&#039;s Linux workstation security checklist]&lt;br /&gt;
* [https://www.privacytools.io/ privacytools.io]&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;diff=5214</id>
		<title>セキュリティ</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;diff=5214"/>
		<updated>2016-04-09T13:26:14Z</updated>

		<summary type="html">&lt;p&gt;Fragment: /* パスワード */ 英語wikiに倣い，節を追加&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:セキュリティ]]&lt;br /&gt;
[[Category:ファイルシステム]]&lt;br /&gt;
[[Category:ネットワーク]]&lt;br /&gt;
[[en:Security]]&lt;br /&gt;
[[ru:Security]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|アプリケーション一覧/セキュリティ}}&lt;br /&gt;
{{Related|:カテゴリ:セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
この記事では Arch Linux システムを防御するための推奨事項とベストプラクティスを並べています。&lt;br /&gt;
&lt;br /&gt;
==概念==&lt;br /&gt;
*セキュリティを厳しくするあまりシステムが使い物にならなくなってしまう可能性があります。うまいやり方は度を越さない程度にセキュリティを強化します。&lt;br /&gt;
*セキュリティを高めるために出来ることは数多く存在しますが、一番の脅威はいつだってユーザー自身です。セキュリティを考える時は、多層防御を考える必要があります。ある層が突破されたとしても、他の層が攻撃を防御しなくてはなりません。ただし全てのネットワークからマシンを切断して、金庫にしまって決して使わないかぎり、システムを100%セキュアにすることは不可能です。&lt;br /&gt;
*少しだけ病的なまでの心配性 (パラノイド) になりましょう。それは役に立ちます。そして疑り深くなってください。話がうますぎるように聞こえたら、おそらくその通りです。&lt;br /&gt;
*[[Wikipedia:ja:最小権限の原則|最小権限の原則]]: システムの各部位は使用に必要なことにだけしかアクセスできないようにするべきで、それ以上は必要ありません。&lt;br /&gt;
&lt;br /&gt;
==パスワード==&lt;br /&gt;
パスワードは安全な linux システムのかぎです。パスワードは[[ユーザーとグループ|ユーザーアカウント]], [[ディスク暗号化|暗号化されたファイルシステム]], [[SSH 鍵|SSH]]/[[GPG]] 鍵などを守ります。コンピュータを使用する人を信頼するのに使う主要な手段なので、安全なパスワードを選んでそれを保護するというのがセキュリティの大部分と言っても過言ではありません。&lt;br /&gt;
&lt;br /&gt;
===強力なパスワードの選び方===&lt;br /&gt;
&lt;br /&gt;
パスワードは簡単に[[Wikipedia:ja:パスワードクラック|割り出されたり]]または個人情報から類推されないようにすることが重要です。そういうわけで、辞書に載っている単語やあなたの飼っている犬の名前などは使わないようにしましょう。パスワードは出来るだけ8文字以上で、小文字と大文字を混ぜてください。さらに数字や特殊文字も1文字以上含めると良いでしょう。当たり前ですが、長くて複雑なパスワードが基本的に良いパスワードとされます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|pwgen}} や {{Pkg|apg}} などのツールは安全なパスワードを生成するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
また、ある文章の各単語の一番最初を取ってパスワードを作ることもできます。&lt;br /&gt;
例えば “the girl is walking down the rainy street” なら “t6!WdtR5” とパスワードにすることができます。この方法はパスワードを覚えるのをずっと簡単にしてくれます。さらに、入力するのが面倒くさくなりますがパスワードを “The girl is walking down the rainy street&amp;quot; にすることも可能です。&lt;br /&gt;
&lt;br /&gt;
===パスワードの管理===&lt;br /&gt;
強固なパスワードを選び出したら、それを安全に保管してください。[[Wikipedia:ja:ソーシャル・エンジニアリング|心理操作]]や[[Wikipedia:Shoulder surfing (computer security)|ショルダーサーフィン]]に注意したり、セキュアでないサーバーから必要以上に情報が流出するのをふせぐためにパスワードを再利用しないようにしてください。{{Pkg|pass}}, {{Pkg|keepassx}}, {{Pkg|gnome-keyring}} などのツールは大量の複雑なパスワードを管理するのに役立ちます。[[Wikipedia:ja:LastPass|Lastpass]] はデバイス間で同期するためにオンラインで暗号化されたパスワードを保存するサービスですが、クローズドソースのコードと外部の企業の両方を信頼する必要があります。&lt;br /&gt;
&lt;br /&gt;
概して、安全なパスワードは覚えにくいからといって安全でないパスワードを使ってはいけません。パスワードはバランスを取る必要があります。弱いパスワードをたくさん作るよりは、安全なパスワードの暗号化されたデータベースを作り、一つの強いマスターパスワードで守るほうが良いでしょう。パスワードを紙に書くのも、物理的なセキュリティを必要としますがソフトウェアの脆弱性を防ぐ点では同じくらい有効です [https://www.schneier.com/blog/archives/2005/06/write_down_your.html]。&lt;br /&gt;
&lt;br /&gt;
===パスワードのハッシュ===&lt;br /&gt;
{{Warning|SHA512 は高速なハッシュ関数として設計されており、パスワードのハッシュ用には作られていません。bcrypt や scrypt などに比べて SHA512 によってハッシュ化されたパスワードには攻撃者は&#039;&#039;はるかに&#039;&#039;高速にブルートフォース攻撃をすることができます。}}&lt;br /&gt;
&lt;br /&gt;
デフォルトの Arch のハッシュ [[en2:SHA password hashes|sha512]] はとても強固で変更する必要はありません。デフォルトでは、{{ic|/etc/shadow}} にパスワードがハッシュ化されて保存され、root にだけ読み取り許可を与え、{{ic|/etc/passwd}} にはユーザー識別子だけが保存されます。従って、[[#root の制限|root ユーザーが安全]]である限り、ファイルが外部システムにコピーされたり解読されることはありえません。&lt;br /&gt;
&lt;br /&gt;
[http://www.slashroot.in/how-are-passwords-stored-linux-understanding-hashing-shadow-utils How are passwords stored in Linux (Understanding hashing with shadow utils)] も参照してください。&lt;br /&gt;
&lt;br /&gt;
==パーティション==&lt;br /&gt;
&lt;br /&gt;
現在カーネルは {{ic|fs.protected_hardlinks}} や {{ic|fs.protected_symlinks}} sysctl スイッチが有効になっていればハードリンクやシンボリックリンクに関するセキュリティの問題を解決するので、world-writable なディレクトリを分離させるセキュリティ的な利点はもはや存在しません。&lt;br /&gt;
&lt;br /&gt;
それでもディスク容量が消耗したときのダメージを低減させる荒っぽい方法として world-writable なディレクトリを含むパーティションが分割されることがあります。しかしながら、サービスを落とすには {{ic|/var}} や {{ic|/tmp}} などのパーティションを一杯にするだけで十分です。この問題の対処についてはもっと柔軟性のある方法が存在します (クォータなど)、またファイルシステムによっては関連する機能を持っていることがあります (btrfs はサブボリュームにクォータを設定できます)。&lt;br /&gt;
&lt;br /&gt;
===マウントオプション===&lt;br /&gt;
&lt;br /&gt;
最小権限の原則に従って、パーティションは (機能性を失わない限りで) 最も制限的なマウントオプションを使ってマウントすると良いでしょう。&lt;br /&gt;
&lt;br /&gt;
====関連するマウントオプション====&lt;br /&gt;
&lt;br /&gt;
*{{ic|nodev}}: ファイルシステム上のキャラクタ・ブロック特殊デバイスを解釈しない。&lt;br /&gt;
*{{ic|nosuid}}: set-user-identifier や set-group-identifier ビットの効果を許可しない。&lt;br /&gt;
*{{ic|noexec}}: マウントされたファイルシステム上の全てのバイナリの直接実行を許可しない。&lt;br /&gt;
&lt;br /&gt;
====使用例====&lt;br /&gt;
&lt;br /&gt;
{{Note|データパーティションはいつでも {{ic|nodev}}, {{ic|nosuid}}, {{ic|noexec}} でマウントするべきです。}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |&#039;&#039;&#039;パーティション&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |{{ic|nodev}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |{{ic|nosuid}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |{{ic|noexec}}&lt;br /&gt;
|-&lt;br /&gt;
| {{ic|/var}}||yes||yes||yes &amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| {{ic|/home}}||yes||yes||yes, if you do not code, use wine or steam&lt;br /&gt;
|-&lt;br /&gt;
| {{ic|/dev/shm}}||yes||yes||yes&lt;br /&gt;
|-&lt;br /&gt;
| {{ic|/tmp}}||yes||yes||maybe, breaks compiling packages and various other things&lt;br /&gt;
|-&lt;br /&gt;
| {{ic|/boot}}||yes||yes||yes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt; パッケージによっては (例えば {{Pkg|nvidia-dkms}}) {{ic|/var}} で {{ic|exec}} を必要とすることがあるので注意してください。&lt;br /&gt;
&lt;br /&gt;
==ファイルシステムのパーミッション==&lt;br /&gt;
デフォルトのファイルシステムのパーミッションはほぼ全ての読み取りアクセスが許可されているため、パーミッションを変更することで http や nobody ユーザーなど root 以外のアカウントへのアクセスを手に入れた攻撃者から重要な情報を隠すことができます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
 # chmod 700 /boot /etc/{iptables,arptables}&lt;br /&gt;
&lt;br /&gt;
デフォルトの [[Umask]] を変更することで新しく作成したファイルのセキュリティを向上させることができます。[http://www.nsa.gov/ia/_files/os/redhat/rhel5-guide-i731.pdf NSA RHEL5 Security Guide] はセキュリティを最大化させるために {{ic|077}} の umask を提案しています、これは新しいファイルの所有者以外のユーザーによる読み取りを出来なくします。umask を変更するには、[[Umask#マスクの値を設定]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==ディスク暗号化==&lt;br /&gt;
&lt;br /&gt;
[[ディスク暗号化]]、特に[[#パスワード|強固なパスフレーズ]]による完全ディスク暗号化は、物理的なリカバリからデータを守る唯一の方法です。コンピュータの電源がオフになっていて問題のディスクがアンマウントされている時は完璧なセキュリティを提供します。&lt;br /&gt;
&lt;br /&gt;
しかしながら、コンピュータの電源が入れられてドライブがマウントされると、そのデータは暗号化されていないドライブと同じように無防備になります。そのためデータが必要なくなったときはすぐにデータのパーティションをアンマウントするのが最善です。&lt;br /&gt;
&lt;br /&gt;
[[Dm-crypt]] など特定のプログラムでは、ループファイルを物理ボリュームとして暗号化することができます。これはシステムの特定部分だけを守りたいときに完全なディスク暗号化の代わりの選択肢となりえます。&lt;br /&gt;
&lt;br /&gt;
==ユーザー設定==&lt;br /&gt;
インストールした後は日常の使用のために通常ユーザーを作成してください。root ユーザーを常用してはいけません。&lt;br /&gt;
&lt;br /&gt;
===3回ログインを失敗したユーザーをロックアウトする===&lt;br /&gt;
セキュリティをさらに高めるために、指定した回数ログインを失敗したユーザーをログインできなくすることが可能です。root ユーザーがロックを解除するまでそのユーザーアカウントにロックをかけるか、または設定した時間が経つと自動でロックが解除されるように設定できます。&lt;br /&gt;
3回ログインを失敗したユーザーを10分間ログインできないようにするには {{ic|/etc/pam.d/system-login}} を変更する必要があります:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/pam.d/system-login|&lt;br /&gt;
2=auth required pam_tally.so deny=2 unlock_time=600 onerr=succeed file=/var/log/faillog&lt;br /&gt;
#auth required pam_tally.so onerr=succeed file=/var/log/faillog&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
2行目のコメントを消すとログインの失敗ごとに2度カウントされるようになります。これだけです。冒険心を味わいたければ、ログインを3回失敗してみてください。それで何が起こるか分かるはずです。手動でユーザーのロックを解除するには次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # pam_tally --user &#039;&#039;username&#039;&#039; --reset&lt;br /&gt;
&lt;br /&gt;
3回ログインが失敗したユーザーを永遠にログインできないようにしたい場合 {{ic|unlock_time}} の部分を削除してください。こうすると root がアカウントをアンロックするまでログインできなくなります。&lt;br /&gt;
&lt;br /&gt;
=== プロセスの数を制限する ===&lt;br /&gt;
&lt;br /&gt;
信頼できないユーザーが大量に存在するシステムでは、一度に実行できるプロセスの数を制限して、[[Wikipedia:ja:Fork爆弾|フォーク爆弾]]などのサービス拒否攻撃を予防することが重要です。ユーザーやグループごとに実行できるプロセスの数は {{ic|/etc/security/limits.conf}} で定義することができ、デフォルトでは空になっています。以下の値をファイルに追加すると、実行できるプロセスが100個までに制限されます。ulimit コマンドを使って一時的に上げられる最大数も200個までに制限します。ユーザーが普段実行するプロセスの数や、管理するハードウェアにあわせて適切な値に変更してください。&lt;br /&gt;
&lt;br /&gt;
 * soft nproc 100&lt;br /&gt;
 * hard nproc 200&lt;br /&gt;
&lt;br /&gt;
== root の制限 ==&lt;br /&gt;
root ユーザーは、定義上、システムで最も強力なユーザーです。このため、root ユーザーの権限を維持しながら害を及ぼす力を制限する、もしくは root ユーザーの行動をもっと追跡できるようにする方法が多数存在します。&lt;br /&gt;
&lt;br /&gt;
===su の代わりに sudo を使う===&lt;br /&gt;
[[Su#セキュリティ|色々な理由]]から特権アクセスには [[su]] よりも [[sudo]] を使うほうが好ましいとされます。&lt;br /&gt;
&lt;br /&gt;
* 通常の権限しか持たないユーザーが実行した特権コマンドのログを保持します。&lt;br /&gt;
* root アクセスを必要とする各ユーザーに root ユーザーのパスワードを与える必要がありません。&lt;br /&gt;
* 完全な root ターミナルは作成されないため、{{ic|sudo}} は root アクセスが必要ないコマンドを偶発的に &#039;&#039;root&#039;&#039; で実行してしまうことを防止します。これは[[Wikipedia:ja:最小権限の原則|最小権限の原則]]と合っています。&lt;br /&gt;
* 一つのコマンドを実行するためだけに完全な root アクセスを与える代わりに、ユーザーごとに個々のプログラムを有効にすることができます。例えば、ユーザー &#039;&#039;alice&#039;&#039; に特定のプログラムへのアクセス権限を与えるには:&lt;br /&gt;
&lt;br /&gt;
 # visudo&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sudoers|&lt;br /&gt;
alice ALL &amp;amp;#61; NOPASSWD: /path/to/program}}&lt;br /&gt;
&lt;br /&gt;
また、全てのユーザーに個別のコマンドを許可することも可能です。通常ユーザーでサーバーから Samba 共有をマウントするには:&lt;br /&gt;
&lt;br /&gt;
 %users ALL=/sbin/mount.cifs,/sbin/umount.cifs&lt;br /&gt;
&lt;br /&gt;
これによって users グループのメンバーである全てのユーザーが全てのマシン (ALL) から {{ic|/sbin/mount.cifs}} や {{ic|/sbin/umount.cifs}} コマンドを実行できるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|visudo}} で {{ic|vi}} の代わりに {{ic|nano}} を使うには:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sudoers|&lt;br /&gt;
2=Defaults editor=/usr/bin/rnano&lt;br /&gt;
}}&lt;br /&gt;
{{ic|1=# EDITOR=nano visudo}} のエクスポートは何にでも {{ic|EDITOR}} として使うことができるためにセキュリティリスクとされています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
====sudo を使ってファイルを編集する====&lt;br /&gt;
root で {{ic|vim}} などのテキストエディタを使用するのはセキュリティ上の脆弱性になりえます。ユーザーは任意のシェルコマンドを実行でき、コマンドを実行したユーザーのログが残らないからです。これを解決するには、以下をシェルの設定ファイルに追加してください:&lt;br /&gt;
&lt;br /&gt;
 export SUDO_EDITOR=rvim&lt;br /&gt;
&lt;br /&gt;
ファイルの編集には {{ic|sudoedit filename}} または {{ic|sudo -e filename}} を使って下さい。自動的に {{ic|rvim}} によって {{ic|filename}} が編集されるようになり、テキストエディタからのシェルコマンドが無効になります。&lt;br /&gt;
&lt;br /&gt;
===root ログインの制限===&lt;br /&gt;
[[sudo]] を適切に設定することで、ユーザビリティをあまり下げることなく完全な root アクセスを大分制限することが可能です。&lt;br /&gt;
&lt;br /&gt;
====特定のユーザーだけに許可を与える====&lt;br /&gt;
[[Wikipedia:Pluggable authentication module|PAM]] の {{ic|pam_wheel.so}} は {{ic|wheel}} グループに入っているユーザーだけに {{ic|su}} を使用したログインを許可します。{{ic|/etc/pam.d/su}} と {{ic|/etc/pam.d/su-l}} の両方を編集して次の行をアンコメントしてください:&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Uncomment the following line to require a user to be in the &amp;quot;wheel&amp;quot; group.&lt;br /&gt;
auth		required	pam_wheel.so use_uid&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
特権コマンドを実行できる既存のユーザーだけが root でログインできるようになります。&lt;br /&gt;
&lt;br /&gt;
====ssh ログインを拒否する====&lt;br /&gt;
ローカルユーザーの root ログインを拒否したくない場合でも、[[SSH#root ログインを拒否する|SSH による root ログインを拒否]]するのがグッドプラクティスです。この目的は、ユーザーがリモートでシステムを完全に手にかける前にセキュリティ層を追加することにあります。&lt;br /&gt;
&lt;br /&gt;
==強制アクセス制御==&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:強制アクセス制御|強制アクセス制御]] (Mandatory Access Control, MAC) は Arch やほとんどの Linux ディストリビューションで使われている[[Wikipedia:ja:任意アクセス制御|任意アクセス制御]] (Discretionary Access Control, DAC) とは大きく異なるタイプのセキュリティポリシーです。原則的に MAC ではシステムに影響を与えるプログラムの行動は全てセキュリティルールセットによってチェックを受けます。このルールセットは、DAC とは対照的に、ユーザーが変更することは不可能です。実装方法は色々と異なるタイプが存在しますが、強制アクセス制御を使うことで実質的にコンピュータのセキュリティを著しく向上させることになります。&lt;br /&gt;
&lt;br /&gt;
===パス名 MAC===&lt;br /&gt;
パス名ベースのアクセス制御は指定されたファイルのパスに基づいてパーミッションを与えるというシンプルな形式のアクセス制御です。この形式のアクセス制御の欠点としてはファイルが移動されてもパーミッションはファイルと一緒に付いていかないということが挙げられます。プラス面となるのは、パス名ベースの MAC はラベルベースの MAC と異なり、幅広いファイルシステムに実装できることです。&lt;br /&gt;
&lt;br /&gt;
*[[AppArmor]] は [[Wikipedia:ja:カノニカル|Canonical]] によって開発されている MAC 実装で SELinux に比べて&amp;quot;簡単&amp;quot;になっています。&lt;br /&gt;
*[[TOMOYO Linux|Tomoyo]] はもうひとつのシンプルで、使いやすい強制アクセス制御を提供するシステムです。利用と実装の両面でシンプルになるように設計されており、依存するライブラリがとても少なくなっています。&lt;br /&gt;
&lt;br /&gt;
===ロールベースアクセス制御===&lt;br /&gt;
grsecurity がサポートしている MAC 実装はロールベースアクセス制御と呼ばれています。RBAC はユーザーごとにロールを割り当てます。それぞれのロールには特定のオブジェクトで実行できる操作を定義します。上手く記述されたロールと操作を使うことでユーザーに指定した作業しかできないように制限をかけることができます。デフォルトの &amp;quot;deny-all&amp;quot; では管理者が想定していない行動をユーザーは出来ません。&lt;br /&gt;
&lt;br /&gt;
*[[Grsecurity#RBAC|Grsecurity RBAC]] には設定を楽にするため AppArmor のような学習モードが備わっています。&lt;br /&gt;
*[[Grsecurity#RBAC|Grsecurity RBAC]] は SELinux のように付加的なメタデータを使いません。RBAC は SELinux よりもずっと高速です。&lt;br /&gt;
&lt;br /&gt;
===ラベル MAC===&lt;br /&gt;
ラベルベースのアクセス制御ではファイルの拡張属性を使ってセキュリティパーミッションを管理します。このシステムはセキュリティの機能においてパス名ベースの MAC よりも間違いなく柔軟性が高い一方、拡張属性をサポートしているファイルシステムでしか動作しません。&lt;br /&gt;
&lt;br /&gt;
*[[SELinux]] は、Linux セキュリティを向上させる [[Wikipedia:ja:アメリカ国家安全保障局|NSA]] プロジェクトに基づいており、システムユーザーやロールとは完全に独立して MAC を実装しています。成長してオリジナルの設定が変わっていくシステムのコントロールを簡単に維持できる、極めて強固なマルチレベル MAC ポリシー実装を提供します。&lt;br /&gt;
&lt;br /&gt;
=== アクセス制御リスト ===&lt;br /&gt;
[[Wikipedia:ja:アクセス制御リスト|アクセス制御リスト]] (Access Control List, ACL) は何らかの方法で直接ファイルシステムにルールを付加する代わりとなる手段です。ACL はプログラムの行動を許可された挙動のリストでチェックすることによりアクセス制御を実装しています。&lt;br /&gt;
&lt;br /&gt;
*[[grsecurity]] はセキュリティを向上させるための完全なカーネルパッチセットだけでなく、ACL アクセス制御も実装しています。メモリ割り当てのコントロールを拡張し、chroot 制限を改良、特定のネットワーク挙動に関係するルールを定めます。&lt;br /&gt;
&lt;br /&gt;
==カーネルの防御==&lt;br /&gt;
&lt;br /&gt;
===カーネルログへのアクセスを制限する===&lt;br /&gt;
&lt;br /&gt;
カーネルログにはカーネルの脆弱性を突こうとしている攻撃者にとって有益な情報、保護が必要なメモリーアドレスなどが含まれています。{{ic|kernel.dmesg_restrict}} フラグは  (デフォルトで root として実行しているプロセスしか持たない) {{ic|CAP_SYS_ADMIN}} ケイパビリティのないログへのアクセスを禁止します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/50-dmesg-restrict.conf|2=kernel.dmesg_restrict = 1}}&lt;br /&gt;
&lt;br /&gt;
===proc ファイルシステムのカーネルポインタへのアクセスを制限する===&lt;br /&gt;
&lt;br /&gt;
{{ic|kernel.kptr_restrict}} を有効にすると {{ic|CAP_SYSLOG}} のない通常ユーザーから {{ic|/proc/kallsyms}} のカーネルシンボルのアドレスが秘匿され、動的にアドレス・シンボルを解決するカーネル exploit が難しくなります。これは事前にコンパイルされた Arch Linux カーネルではあまり意味がありません、周到な攻撃者はカーネルパッケージをダウンロードしてそこから手動でシンボルを取得することができるからです。しかしながら自分でカーネルをコンパイルする場合は、ローカルの root 攻撃を減らす効果があります。ただし root 以外のユーザーで使用する場合いくつかの {{Pkg|perf}} コマンドが破壊されます (メインの {{Pkg|perf}} 機能には結局 root アクセスが必要になりますが)。詳しくは {{Bug|34323}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/50-kptr-restrict.conf|2=kernel.kptr_restrict = 1}}&lt;br /&gt;
&lt;br /&gt;
===BPF JIT コンパイラを無効にする===&lt;br /&gt;
&lt;br /&gt;
Linux カーネルにはパフォーマンス最適化のために BPF/Seccomp ルールセットをネイティブコードにコンパイルする機能が含まれています。最高レベルのセキュリティのために {{ic|net.core.bpf_jit_enable}} フラグは0にしておくべきです。&lt;br /&gt;
&lt;br /&gt;
コンパイラは特定の領域では有用ですが、通常は役に立ちません。JIT コンパイラは攻撃者がヒープスプレー攻撃を行う機会を与え、カーネルのヒープが悪意のあるコードで満たされるかもしれません。このコードは不正な関数へのポインタの間接参照など、他の脆弱性攻撃によって実行される危険性があります。&lt;br /&gt;
&lt;br /&gt;
{{note|[[grsecurity]] には BPF JIT コンパイラの JIT ハードニングが含まれており、攻撃のリスクを大幅に減らします。}}&lt;br /&gt;
&lt;br /&gt;
===ptrace スコープ===&lt;br /&gt;
&lt;br /&gt;
{{ic|kernel.yama.ptrace_scope}} フラグによって、Arch は Yama LSM をデフォルトで有効にしています。このフラグはプロセスが {{ic|CAP_SYS_PTRACE}} のないスコープの外で他のプロセスに {{ic|ptrace}} コールを実行するのを止めます。多くのデバッグツールがいくつかの機能を使うためにこれを必要としますが、セキュリティの面では飛躍的な改善になります。この機能がないと、名前空間のような外部レイヤーを適用しないかぎり同一ユーザーで動作するプロセスの分割は基本的に行われません。デバッガを既存プロセスにアタッチできることはこの欠点のデモンストレーションです。&lt;br /&gt;
&lt;br /&gt;
{{note|[[grsecurity]] では、この防護は {{ic|kernel.grsecurity.harden_ptrace}} フラグによって切り替えます。}}&lt;br /&gt;
&lt;br /&gt;
====破壊される機能の例====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|sudo}} を使って特定のユーザーに、パスワード有り無しで許可を与えたりすることで、root で以下のコマンドを実行することは可能です。}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|gdb -p $PID}}&lt;br /&gt;
* {{ic|strace -p $PID}}&lt;br /&gt;
* {{ic|perf trace -p $PID}}&lt;br /&gt;
* {{ic|reptyr $PID}}&lt;br /&gt;
&lt;br /&gt;
=== リンクの [[Wikipedia:TOCTOU|TOCTOU]] 攻撃を防止する ===&lt;br /&gt;
&lt;br /&gt;
この機能が追加された日時や根拠についてはこの [https://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commitdiff;h=800179c9b8a1e796e441674776d11cd4c05d61d7 commit メッセージ]を見て下さい。&lt;br /&gt;
&lt;br /&gt;
 fs.protected_hardlinks = 1&lt;br /&gt;
 fs.protected_symlinks = 1&lt;br /&gt;
&lt;br /&gt;
{{Note|現在は {{ic|/usr/lib/sysctl.d/50-default.conf}} によってデフォルトで有効にされています。}}&lt;br /&gt;
&lt;br /&gt;
===hidepid===&lt;br /&gt;
&lt;br /&gt;
カーネルには権限がないユーザーから他のユーザーのプロセスを秘匿させる機能が存在し、{{ic|proc}} ファイルシステムを {{ic|1=hidepid=1}} または {{ic|1=hidepid=2}} でマウントすることで有効になります。ただし、[http://lists.freedesktop.org/archives/systemd-devel/2012-October/006859.html この機能は現在 systemd を破壊します]。カーネルによるコンテナの cgroups ファイルシステムの仮想化サポートが欠けているために、その対応策が必要だからです。&lt;br /&gt;
&lt;br /&gt;
===grsecurity===&lt;br /&gt;
&lt;br /&gt;
標準の Linux カーネルは機密情報へのアクセスを必要以上に許可しておりメモリーの脆弱性攻撃への保護は最低限しか提供していません。[https://grsecurity.net/ Grsecurity] はこれを修正することを目指しています。Grsecurity には PaX のメモリーパッチがバンドルされています。PaX は ALSR を発明しており、強力な保護を提供します。Grsecurity はファイルシステムを防護し、高度なロールベースアクセス制御を提供して、せっかくの PaX のメモリー保護を無駄にするような情報漏洩を防ぎます。&lt;br /&gt;
&lt;br /&gt;
== アプリケーションのサンドボックス化 ==&lt;br /&gt;
&lt;br /&gt;
=== Firejail ===&lt;br /&gt;
&lt;br /&gt;
[[Firejail]] はアプリケーションやサーバーをサンドボックス化するためのシンプルで使いやすいツールです。Firejail はサーバーだけでなくブラウザなどのインターネットに接続するアプリケーションでも使うことができます。Grsecurity と一緒に使うことで Firejail はさらに強化することが可能です。&lt;br /&gt;
&lt;br /&gt;
=== chroot ===&lt;br /&gt;
&lt;br /&gt;
手動で [[chroot]] 監獄を構築する方法もあります。&lt;br /&gt;
&lt;br /&gt;
=== Linux Containers ===&lt;br /&gt;
&lt;br /&gt;
他の手段 (KVM や Virtualbox) よりも強力な分離が必要なときは [[Linux Containers]] を選択するのもよいでしょう。LXC は仮想ハードウェアを使って擬似的な chroot で既存のカーネル上で動作します。&lt;br /&gt;
&lt;br /&gt;
=== 他の仮想化手段 ===&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]], [[KVM]], [[Xen]] などの完全な仮想化マシンを使うことでもセキュリティを向上させることができます。危険なアプリケーションを実行したり危険なウェブサイトを開いたりするときに役に立つでしょう。&lt;br /&gt;
&lt;br /&gt;
==ネットワークとファイアウォール==&lt;br /&gt;
&lt;br /&gt;
===ファイアウォール===&lt;br /&gt;
標準の Arch カーネルは [[Wikipedia:ja:iptables|Netfilter]] の [[iptables]] を使用する能力がありますが、デフォルトでは有効になっていません。[[公式リポジトリ]]から {{Pkg|iptables}} をインストールして、有効にし、ファイアウォールを設定することが強く推奨されます。&lt;br /&gt;
&lt;br /&gt;
*全般的な情報は [[iptables]] を見て下さい。&lt;br /&gt;
*iptables ファイアウォールを設定するガイドは[[シンプルなステートフルファイアウォール]]を見て下さい。&lt;br /&gt;
*netfilter を設定する他の方法は[[ファイアウォール]]を見て下さい。&lt;br /&gt;
*Bluetack などの IP アドレスのリストをブロックする方法は [[Ipset]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
===カーネルパラメータ===&lt;br /&gt;
ネットワークに影響を与えるカーネルパラメータは [[sysctl]] を使って設定できます。設定方法は [[sysctl#TCP/IP スタックの防御]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
===SSH===&lt;br /&gt;
[[SSH 鍵#パスワードログインの無効化|SSH 鍵を必要]]としない [[Secure Shell]] を使うのは避けましょう。これは[[Wikipedia:ja:総当たり攻撃|総当たり攻撃]]を防ぎます。また、[[Fail2ban]] や [[Sshguard]] はログを監視して [[iptables|iptables ルール]]を書き込む方式の保護を提供しますが、攻撃者がアドレスを識別して管理者からのパケットのように偽装することができるため、サービスの妨害が行われる危険性があります。&lt;br /&gt;
&lt;br /&gt;
[[Secure Shell#root ログインを拒否する|root ログインを拒否する]]のは、侵入追跡と root アクセス前のセキュリティレイヤを追加するという両方の面でグッドプラクティスです。&lt;br /&gt;
&lt;br /&gt;
===DNS===&lt;br /&gt;
&lt;br /&gt;
[[en2:DNSSEC|DNSSEC]] や [[DNSCrypt]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
==パッケージの認証==&lt;br /&gt;
パッケージの署名が適正に使われていないと [http://www.cs.arizona.edu/stork/packagemanagersecurity/attacks-on-package-managers.html#overview パッケージマネージャへの攻撃] が考えられ、さらに [http://www.cs.arizona.edu/stork/packagemanagersecurity/faq.html 適切な署名システム] を使っているパッケージマネージャにも影響を与える可能性があります。Arch はデフォルトでパッケージの署名を使用しており5つの信頼されたマスターキーによる web of trust を使っています。詳しくは [[Pacman-key]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
==物理セキュリティ==&lt;br /&gt;
{{Note|リモート攻撃からコンピュータを守りたいだけの場合はこのセクションは無視してかまいません。}}&lt;br /&gt;
&lt;br /&gt;
十分な時間とリソースさえあればコンピュータへの物理的なアクセスは root アクセスになります。しかしながら、十分な防御策を張ることで&#039;&#039;実用的で&#039;&#039;高いレベルのセキュリティを得ることができます。&lt;br /&gt;
&lt;br /&gt;
攻撃者は悪意のある IEEE 1394 (FireWire), Thunderbolt, PCI Express デバイスを取り付けることでメモリーへの完全なアクセスを手に入れることができ、次に起動した時には簡単にコンピュータの完全なコントロールを手中に収めることができます [http://www.breaknenter.org/projects/inception/]。これを防ぐために出来ることは限られており、悪意のあるファームウェアをドライブに書き込むなどハードウェア自体の改変に対処することは不可能です。ただし、攻撃者の大部分にはこうした知識がなく実行されることはほとんどありません。&lt;br /&gt;
&lt;br /&gt;
[[#ディスク暗号化|ディスク暗号化]]はコンピュータが盗まれた場合にデータへのアクセスを防止しますが、あなたが次にログインしたときにデータを取得するために悪意のあるファームウェアが能力のある攻撃者によってインストールされる可能性があります。&lt;br /&gt;
&lt;br /&gt;
===BIOS をロックダウンする===&lt;br /&gt;
&lt;br /&gt;
BIOS にパスワードを追加することによってリムーバルメディアから誰かが起動する (これはコンピュータへの root アクセスと基本的に同義です) のを予防します。使用しているドライブがブートの順番で一番最初に来ることを確認して、可能であれば他のドライブのブートを無効にしてください。&lt;br /&gt;
&lt;br /&gt;
===ブートローダー===&lt;br /&gt;
&lt;br /&gt;
ブートローダーの保護はとても重要です。{{ic|1=init=/bin/sh}} というたった一つのカーネルパラメータで、全てのユーザー・ログイン制限が全くの無に帰します。&lt;br /&gt;
&lt;br /&gt;
====Syslinux====&lt;br /&gt;
&lt;br /&gt;
Syslinux は[[Syslinux#セキュリティ|ブートローダーのパスワード保護]]をサポートしています。メニューのアイテムごとにパスワードを設定したり、ブートローダー全体にパスワードの保護を設定することが可能です。&lt;br /&gt;
&lt;br /&gt;
====GRUB====&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] も同じくブートローダーのパスワードをサポートしています。詳しくは [[GRUB/Tips and tricks#GRUB メニューのパスワード保護]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
===root でのコンソールログインを拒む===&lt;br /&gt;
コンソールからの root ログインを拒否するよう設定を変更すれば侵入者がシステムへのアクセスを取得するのを難しくすることができます。侵入者はシステムに存在するユーザーの名前とそのユーザーのパスワードを考えなくてはならなくなります。コンソールによって root がログインできるようになっている場合、侵入者が解き当てるのはパスワードだけで十分になります。&lt;br /&gt;
コンソールの root ログインのブロックは {{ic|/etc/securetty}} の tty 行をコメントアウトすることで行います。&lt;br /&gt;
{{hc|/etc/securetty|&lt;br /&gt;
#tty1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ブロックしたい tty 全てで同じようにコメントアウトしてください。&lt;br /&gt;
変更の効果を確認するには、一つの行だけをコメントアウトしてから特定のコンソールに移って root でのログインを試行してみてください。{{ic|Login incorrect}} というメッセージが表示されるはずです。ブロックされたことを確認したら、戻ってから残りの tty 行をコメントアウトしてください。&lt;br /&gt;
{{Note|If you see {{ic|ttyS0}} this is for a serial console. Similarly, on Xen virtualized systems {{ic|hvc0}} is for the administrator.}}&lt;br /&gt;
&lt;br /&gt;
=== 自動ログアウト ===&lt;br /&gt;
[[Bash]] または [[Zsh]] を使っている場合、{{ic|TMOUT}} によってタイムアウトによるシェルからの自動ログアウトを設定できます。&lt;br /&gt;
&lt;br /&gt;
例えば、以下は仮想コンソールから自動でログアウトします (X11 のターミナルエミュレータからはログアウトしません):&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/profile.d/shell-timeout.sh|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
TMOUT=&amp;quot;$(( 60*10 ))&amp;quot;;&lt;br /&gt;
[ -z &amp;quot;$DISPLAY&amp;quot; ] &amp;amp;&amp;amp; export TMOUT;&lt;br /&gt;
case $( /usr/bin/tty ) in&lt;br /&gt;
	/dev/tty[0-9]*) export TMOUT;;&lt;br /&gt;
esac&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
(X のコンソールも含めて) 全ての Bash/Zsh プロンプトでタイムアウトさせたい場合は、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ export TMOUT=&amp;quot;$(( 60*10 ))&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
シェルで何かコマンドが動作している間はこのタイムアウトは動作しないので注意してください (例: SSH セッションや {{ic|TMOUT}} をサポートしていない他のシェル)。しかしながら固まった GDM/Xorg を root で再起動するのに VC を使っているような場合は、とても有用です。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* ArchWiki のセキュリティアプリケーションのリスト: [[アプリケーション一覧/セキュリティ]]&lt;br /&gt;
* [http://www.puschitz.com/SecuringLinux.shtml Securing and Hardening Red Hat Linux Production Systems]&lt;br /&gt;
* [http://www.ibm.com/developerworks/linux/tutorials/l-harden-desktop/index.html Hardening the linux desktop]&lt;br /&gt;
* [http://www.ibm.com/developerworks/linux/tutorials/l-harden-server/index.html Hardening the linux server]&lt;br /&gt;
* [http://www.faqs.org/docs/securing/index.html Securing and Optimizing Linux]&lt;br /&gt;
* [http://www.auscert.org.au/5816 UNIX and Linux Security Checklist v3.0]&lt;br /&gt;
* [http://wiki.centos.org/HowTos/OS_Protection CentOS Wiki: OS Protection]&lt;br /&gt;
* [http://www.debian.org/doc/manuals/securing-debian-howto/securing-debian-howto.en.pdf Hardening Debian (pdf)]&lt;br /&gt;
* [http://crunchbang.org/forums/viewtopic.php?id=24722 The paranoid #! Security Guide]&lt;br /&gt;
* [https://github.com/lfit/itpol/blob/master/linux-workstation-security.md Linux Foundation&#039;s Linux workstation security checklist]&lt;br /&gt;
* [https://www.privacytools.io/ privacytools.io]&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Certbot&amp;diff=5213</id>
		<title>Certbot</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Certbot&amp;diff=5213"/>
		<updated>2016-04-08T15:26:09Z</updated>

		<summary type="html">&lt;p&gt;Fragment: /* 自動更新 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ネットワーク]]&lt;br /&gt;
[[Category:セキュリティ]]&lt;br /&gt;
[[en:Let’s Encrypt]]&lt;br /&gt;
[https://letsencrypt.org/ Let’s Encrypt] はフリーかつ自動化されたオープンな認証局です。コマンドラインから有効な ssl 証明書を取得できるツールが提供されています。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|letsencrypt}} パッケージを[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
A minimal client with manual CSR creation is available at {{AUR|acme-tiny}}. More integrated clients suitable for scripts are e.g. {{AUR|simp_le-git}} and {{AUR|letsencrypt-cli}}.&lt;br /&gt;
&lt;br /&gt;
公式クライアントを用いて発行された証明書はプラグインを使ってウェブサーバーに自動的に設定・インストールできます:&lt;br /&gt;
* [[Nginx]] 用の実験的なプラグインは {{Pkg|letsencrypt-nginx}} パッケージに入っています。&lt;br /&gt;
* {{Pkg|letsencrypt-apache}} パッケージも存在していますが、[[Apache HTTP Server]] を使っている場合の自動インストールは現在 Debian の派生ディストリビューションでしかサポートされていません。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
証明を作成・インストールする方法は [https://letsencrypt.readthedocs.org/en/latest/ Let’s Encrypt クライアントのドキュメント] を参照してください。証明書の作成方法がはっきりしたら、この wiki にも記載します。&lt;br /&gt;
&lt;br /&gt;
=== 手動 ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法では、一時的にウェブサーバーを停止する必要があります。[[#Webroot]] の方法ではウェブサーバーを実行しながらでも認証が行えます。}}&lt;br /&gt;
&lt;br /&gt;
ウェブサーバーのプラグインが存在しない場合、次のコマンドを使って下さい:&lt;br /&gt;
 # letsencrypt certonly --manual&lt;br /&gt;
&lt;br /&gt;
上記のコマンドで自動的にドメインが認証されて秘密鍵と証明書のペアが作成されます。秘密鍵と証明書は {{ic|/etc/letsencrypt/live/&#039;&#039;your.domain&#039;&#039;/}} に保存されます。&lt;br /&gt;
&lt;br /&gt;
上記のディレクトリに入っている秘密鍵と証明書を使用するように手動でウェブサーバーを設定します。&lt;br /&gt;
&lt;br /&gt;
=== Webroot ===&lt;br /&gt;
&lt;br /&gt;
webroot を使うことでウェブサーバー (例: Apache/nginx) を止めることなく証明書を取得・更新できます。&lt;br /&gt;
&lt;br /&gt;
 # letsencrypt certonly --email &#039;&#039;email@example.com&#039;&#039; --webroot -w &#039;&#039;/path/to/html/&#039;&#039; -d &#039;&#039;your.domain&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
サーバーの設定で {{ic|/etc/letsencrypt/live/&#039;&#039;your.domain&#039;&#039;/}} の証明書を使うようにしてください。&lt;br /&gt;
&lt;br /&gt;
==== 自動更新 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|letsencrypt certonly}} を実行するとき、letsencryptはドメインとwebrootディレクトリを  {{ic|/etc/letsencrypt/renewal}} に記録します。次回からは {{ic|letsencrypt renew}} を実行することで証明書を自動更新することができます。&lt;br /&gt;
&lt;br /&gt;
以下の {{ic|.service}} ファイルを作成することで完全に自動化することが可能です:&lt;br /&gt;
&lt;br /&gt;
{{hc|1=/etc/systemd/system/letsencrypt.service|&lt;br /&gt;
2=[Unit]&lt;br /&gt;
Description=Let&#039;s Encrypt renewal&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/usr/bin/letsencrypt renew}}&lt;br /&gt;
&lt;br /&gt;
[[systemd/タイマー|タイマー]]を追加する前に、サービスが正しく動作すること、何も入力が要求されないことを確認してください。&lt;br /&gt;
&lt;br /&gt;
それから、タイマーを追加することで毎月証明書を更新できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|1=/etc/systemd/system/letsencrypt.timer|&lt;br /&gt;
2=[Unit]&lt;br /&gt;
Description=Monthly renewal of Let&#039;s Encrypt&#039;s certificates&lt;br /&gt;
&lt;br /&gt;
[Timer]&lt;br /&gt;
OnCalendar=monthly&lt;br /&gt;
Persistent=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=timers.target}}&lt;br /&gt;
&lt;br /&gt;
{{ic|letsencrypt.timer}} を[[起動]]・[[有効化]]してください。また、証明書をいますぐ更新したい場合は {{ic|letsencrypt.service}} を[[起動]]してください。&lt;br /&gt;
&lt;br /&gt;
証明書を更新するたびにウェブサーバーを再起動させることもできます。{{ic|letsencrypt.service}} ファイルに以下のどちらかの行を追加してください:&lt;br /&gt;
&lt;br /&gt;
* Apache: {{ic|1=ExecStartPost=/usr/sbin/systemctl restart httpd.service}}&lt;br /&gt;
* nginx: {{ic|1=ExecStartPost=/usr/sbin/systemctl restart nginx.service}}&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://community.letsencrypt.org/t/list-of-client-implementations/2103 List of ACME clients]&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Certbot&amp;diff=5212</id>
		<title>Certbot</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Certbot&amp;diff=5212"/>
		<updated>2016-04-08T15:19:12Z</updated>

		<summary type="html">&lt;p&gt;Fragment: 「参照」項目追加&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ネットワーク]]&lt;br /&gt;
[[Category:セキュリティ]]&lt;br /&gt;
[[en:Let’s Encrypt]]&lt;br /&gt;
[https://letsencrypt.org/ Let’s Encrypt] はフリーかつ自動化されたオープンな認証局です。コマンドラインから有効な ssl 証明書を取得できるツールが提供されています。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|letsencrypt}} パッケージを[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
A minimal client with manual CSR creation is available at {{AUR|acme-tiny}}. More integrated clients suitable for scripts are e.g. {{AUR|simp_le-git}} and {{AUR|letsencrypt-cli}}.&lt;br /&gt;
&lt;br /&gt;
公式クライアントを用いて発行された証明書はプラグインを使ってウェブサーバーに自動的に設定・インストールできます:&lt;br /&gt;
* [[Nginx]] 用の実験的なプラグインは {{Pkg|letsencrypt-nginx}} パッケージに入っています。&lt;br /&gt;
* {{Pkg|letsencrypt-apache}} パッケージも存在していますが、[[Apache HTTP Server]] を使っている場合の自動インストールは現在 Debian の派生ディストリビューションでしかサポートされていません。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
証明を作成・インストールする方法は [https://letsencrypt.readthedocs.org/en/latest/ Let’s Encrypt クライアントのドキュメント] を参照してください。証明書の作成方法がはっきりしたら、この wiki にも記載します。&lt;br /&gt;
&lt;br /&gt;
=== 手動 ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法では、一時的にウェブサーバーを停止する必要があります。[[#Webroot]] の方法ではウェブサーバーを実行しながらでも認証が行えます。}}&lt;br /&gt;
&lt;br /&gt;
ウェブサーバーのプラグインが存在しない場合、次のコマンドを使って下さい:&lt;br /&gt;
 # letsencrypt certonly --manual&lt;br /&gt;
&lt;br /&gt;
上記のコマンドで自動的にドメインが認証されて秘密鍵と証明書のペアが作成されます。秘密鍵と証明書は {{ic|/etc/letsencrypt/live/&#039;&#039;your.domain&#039;&#039;/}} に保存されます。&lt;br /&gt;
&lt;br /&gt;
上記のディレクトリに入っている秘密鍵と証明書を使用するように手動でウェブサーバーを設定します。&lt;br /&gt;
&lt;br /&gt;
=== Webroot ===&lt;br /&gt;
&lt;br /&gt;
webroot を使うことでウェブサーバー (例: Apache/nginx) を止めることなく証明書を取得・更新できます。&lt;br /&gt;
&lt;br /&gt;
 # letsencrypt certonly --email &#039;&#039;email@example.com&#039;&#039; --webroot -w &#039;&#039;/path/to/html/&#039;&#039; -d &#039;&#039;your.domain&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
サーバーの設定で {{ic|/etc/letsencrypt/live/&#039;&#039;your.domain&#039;&#039;/}} の証明書を使うようにしてください。&lt;br /&gt;
&lt;br /&gt;
==== 自動更新 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|letsencrypt certonly}} を実行するとき、letsencryptはドメインとwebrootディレクトリを  {{ic|/etc/letsencrypt/renewal}} に記録します。なので次回からは {{ic|letsencrypt renew}} を実行することで証明書を自動更新することができます。&lt;br /&gt;
&lt;br /&gt;
以下の {{ic|.service}} ファイルを作成することで完全に自動化することが可能です:&lt;br /&gt;
&lt;br /&gt;
{{hc|1=/etc/systemd/system/letsencrypt.service|&lt;br /&gt;
2=[Unit]&lt;br /&gt;
Description=Let&#039;s Encrypt renewal&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/usr/bin/letsencrypt renew}}&lt;br /&gt;
&lt;br /&gt;
[[systemd/タイマー|タイマー]]を追加する前に、サービスが正しく動作すること、何も入力が要求されないことを確認してください。&lt;br /&gt;
&lt;br /&gt;
それから、タイマーを追加することで毎月証明書を更新できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|1=/etc/systemd/system/letsencrypt.timer|&lt;br /&gt;
2=[Unit]&lt;br /&gt;
Description=Monthly renewal of Let&#039;s Encrypt&#039;s certificates&lt;br /&gt;
&lt;br /&gt;
[Timer]&lt;br /&gt;
OnCalendar=monthly&lt;br /&gt;
Persistent=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=timers.target}}&lt;br /&gt;
&lt;br /&gt;
{{ic|letsencrypt.timer}} を[[起動]]・[[有効化]]してください。また、証明書をいますぐ更新したい場合は {{ic|letsencrypt.service}} を[[起動]]してください。&lt;br /&gt;
&lt;br /&gt;
証明書を更新するたびにウェブサーバーを再起動させることもできます。{{ic|letsencrypt.service}} ファイルに以下のどちらかの行を追加してください:&lt;br /&gt;
&lt;br /&gt;
* Apache: {{ic|1=ExecStartPost=/usr/sbin/systemctl restart httpd.service}}&lt;br /&gt;
* nginx: {{ic|1=ExecStartPost=/usr/sbin/systemctl restart nginx.service}}&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://community.letsencrypt.org/t/list-of-client-implementations/2103 List of ACME clients]&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Certbot&amp;diff=5211</id>
		<title>Certbot</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Certbot&amp;diff=5211"/>
		<updated>2016-04-08T15:16:05Z</updated>

		<summary type="html">&lt;p&gt;Fragment: /* Webroot */ インポートと翻訳&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ネットワーク]]&lt;br /&gt;
[[Category:セキュリティ]]&lt;br /&gt;
[[en:Let’s Encrypt]]&lt;br /&gt;
[https://letsencrypt.org/ Let’s Encrypt] はフリーかつ自動化されたオープンな認証局です。コマンドラインから有効な ssl 証明書を取得できるツールが提供されています。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|letsencrypt}} パッケージを[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
A minimal client with manual CSR creation is available at {{AUR|acme-tiny}}. More integrated clients suitable for scripts are e.g. {{AUR|simp_le-git}} and {{AUR|letsencrypt-cli}}.&lt;br /&gt;
&lt;br /&gt;
公式クライアントを用いて発行された証明書はプラグインを使ってウェブサーバーに自動的に設定・インストールできます:&lt;br /&gt;
* [[Nginx]] 用の実験的なプラグインは {{Pkg|letsencrypt-nginx}} パッケージに入っています。&lt;br /&gt;
* {{Pkg|letsencrypt-apache}} パッケージも存在していますが、[[Apache HTTP Server]] を使っている場合の自動インストールは現在 Debian の派生ディストリビューションでしかサポートされていません。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
証明を作成・インストールする方法は [https://letsencrypt.readthedocs.org/en/latest/ Let’s Encrypt クライアントのドキュメント] を参照してください。証明書の作成方法がはっきりしたら、この wiki にも記載します。&lt;br /&gt;
&lt;br /&gt;
=== 手動 ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法では、一時的にウェブサーバーを停止する必要があります。[[#Webroot]] の方法ではウェブサーバーを実行しながらでも認証が行えます。}}&lt;br /&gt;
&lt;br /&gt;
ウェブサーバーのプラグインが存在しない場合、次のコマンドを使って下さい:&lt;br /&gt;
 # letsencrypt certonly --manual&lt;br /&gt;
&lt;br /&gt;
上記のコマンドで自動的にドメインが認証されて秘密鍵と証明書のペアが作成されます。秘密鍵と証明書は {{ic|/etc/letsencrypt/live/&#039;&#039;your.domain&#039;&#039;/}} に保存されます。&lt;br /&gt;
&lt;br /&gt;
上記のディレクトリに入っている秘密鍵と証明書を使用するように手動でウェブサーバーを設定します。&lt;br /&gt;
&lt;br /&gt;
=== Webroot ===&lt;br /&gt;
&lt;br /&gt;
webroot を使うことでウェブサーバー (例: Apache/nginx) を止めることなく証明書を取得・更新できます。&lt;br /&gt;
&lt;br /&gt;
 # letsencrypt certonly --email &#039;&#039;email@example.com&#039;&#039; --webroot -w &#039;&#039;/path/to/html/&#039;&#039; -d &#039;&#039;your.domain&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
サーバーの設定で {{ic|/etc/letsencrypt/live/&#039;&#039;your.domain&#039;&#039;/}} の証明書を使うようにしてください。&lt;br /&gt;
&lt;br /&gt;
==== 自動更新 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|letsencrypt certonly}} を実行するとき、letsencryptはドメインとwebrootディレクトリを  {{ic|/etc/letsencrypt/renewal}} に記録します。なので次回からは {{ic|letsencrypt renew}} を実行することで証明書を自動更新することができます。&lt;br /&gt;
&lt;br /&gt;
以下の {{ic|.service}} ファイルを作成することで完全に自動化することが可能です:&lt;br /&gt;
&lt;br /&gt;
{{hc|1=/etc/systemd/system/letsencrypt.service|&lt;br /&gt;
2=[Unit]&lt;br /&gt;
Description=Let&#039;s Encrypt renewal&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/usr/bin/letsencrypt renew}}&lt;br /&gt;
&lt;br /&gt;
[[systemd/タイマー|タイマー]]を追加する前に、サービスが正しく動作すること、何も入力が要求されないことを確認してください。&lt;br /&gt;
&lt;br /&gt;
それから、タイマーを追加することで毎月証明書を更新できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|1=/etc/systemd/system/letsencrypt.timer|&lt;br /&gt;
2=[Unit]&lt;br /&gt;
Description=Monthly renewal of Let&#039;s Encrypt&#039;s certificates&lt;br /&gt;
&lt;br /&gt;
[Timer]&lt;br /&gt;
OnCalendar=monthly&lt;br /&gt;
Persistent=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=timers.target}}&lt;br /&gt;
&lt;br /&gt;
{{ic|letsencrypt.timer}} を[[起動]]・[[有効化]]してください。また、証明書をいますぐ更新したい場合は {{ic|letsencrypt.service}} を[[起動]]してください。&lt;br /&gt;
&lt;br /&gt;
証明書を更新するたびにウェブサーバーを再起動させることもできます。{{ic|letsencrypt.service}} ファイルに以下のどちらかの行を追加してください:&lt;br /&gt;
&lt;br /&gt;
* Apache: {{ic|1=ExecStartPost=/usr/sbin/systemctl restart httpd.service}}&lt;br /&gt;
* nginx: {{ic|1=ExecStartPost=/usr/sbin/systemctl restart nginx.service}}&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Certbot&amp;diff=5210</id>
		<title>Certbot</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Certbot&amp;diff=5210"/>
		<updated>2016-04-08T15:05:05Z</updated>

		<summary type="html">&lt;p&gt;Fragment: /* インストール */ インポートとそれに伴う細部の変更&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ネットワーク]]&lt;br /&gt;
[[Category:セキュリティ]]&lt;br /&gt;
[[en:Let’s Encrypt]]&lt;br /&gt;
[https://letsencrypt.org/ Let’s Encrypt] はフリーかつ自動化されたオープンな認証局です。コマンドラインから有効な ssl 証明書を取得できるツールが提供されています。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{Pkg|letsencrypt}} パッケージを[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
A minimal client with manual CSR creation is available at {{AUR|acme-tiny}}. More integrated clients suitable for scripts are e.g. {{AUR|simp_le-git}} and {{AUR|letsencrypt-cli}}.&lt;br /&gt;
&lt;br /&gt;
公式クライアントを用いて発行された証明書はプラグインを使ってウェブサーバーに自動的に設定・インストールできます:&lt;br /&gt;
* [[Nginx]] 用の実験的なプラグインは {{Pkg|letsencrypt-nginx}} パッケージに入っています。&lt;br /&gt;
* {{Pkg|letsencrypt-apache}} パッケージも存在していますが、[[Apache HTTP Server]] を使っている場合の自動インストールは現在 Debian の派生ディストリビューションでしかサポートされていません。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
証明を作成・インストールする方法は [https://letsencrypt.readthedocs.org/en/latest/ Let’s Encrypt クライアントのドキュメント] を参照してください。証明書の作成方法がはっきりしたら、この wiki にも記載します。&lt;br /&gt;
&lt;br /&gt;
=== 手動 ===&lt;br /&gt;
&lt;br /&gt;
{{Note|この方法では、一時的にウェブサーバーを停止する必要があります。[[#Webroot]] の方法ではウェブサーバーを実行しながらでも認証が行えます。}}&lt;br /&gt;
&lt;br /&gt;
ウェブサーバーのプラグインが存在しない場合、次のコマンドを使って下さい:&lt;br /&gt;
 # letsencrypt certonly --manual&lt;br /&gt;
&lt;br /&gt;
上記のコマンドで自動的にドメインが認証されて秘密鍵と証明書のペアが作成されます。秘密鍵と証明書は {{ic|/etc/letsencrypt/live/&#039;&#039;your.domain&#039;&#039;/}} に保存されます。&lt;br /&gt;
&lt;br /&gt;
上記のディレクトリに入っている秘密鍵と証明書を使用するように手動でウェブサーバーを設定します。&lt;br /&gt;
&lt;br /&gt;
=== Webroot ===&lt;br /&gt;
&lt;br /&gt;
webroot を使うことでウェブサーバー (例: Apache/nginx) を止めることなく証明書を取得・更新できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|1=/etc/systemd/system/letsencrypt.service|&lt;br /&gt;
2=[Unit]&lt;br /&gt;
Description=Let&#039;s Encrypt renewal&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/usr/bin/letsencrypt certonly --agree-tos --renew-by-default --email &#039;&#039;email@example.com&#039;&#039; --webroot -w &#039;&#039;/path/to/html/&#039;&#039; -d &#039;&#039;your.domain&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
サーバーの設定で {{ic|/etc/letsencrypt/live/&#039;&#039;your.domain&#039;&#039;/}} の証明書を使うようにしてください。&lt;br /&gt;
&lt;br /&gt;
[[systemd/タイマー|タイマー]]を追加する前に、サービスが正しく動作すること、何も入力が要求されないことを確認してください。&lt;br /&gt;
&lt;br /&gt;
それから、タイマーを追加することで毎月証明書を更新できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|1=/etc/systemd/system/letsencrypt.timer|&lt;br /&gt;
2=[Unit]&lt;br /&gt;
Description=Monthly renewal of Let&#039;s Encrypt&#039;s certificates&lt;br /&gt;
&lt;br /&gt;
[Timer]&lt;br /&gt;
OnCalendar=monthly&lt;br /&gt;
Persistent=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=timers.target}}&lt;br /&gt;
&lt;br /&gt;
{{ic|letsencrypt.timer}} を[[起動]]・[[有効化]]してください。また、証明書をいますぐ更新したい場合は {{ic|letsencrypt.service}} を[[起動]]してください。&lt;br /&gt;
&lt;br /&gt;
証明書を更新するたびにウェブサーバーを再起動させることもできます。{{ic|letsencrypt.service}} ファイルに以下のどちらかの行を追加してください:&lt;br /&gt;
&lt;br /&gt;
* Apache: {{ic|1=ExecStartPost=/usr/sbin/systemctl restart httpd.service}}&lt;br /&gt;
* nginx: {{ic|1=ExecStartPost=/usr/sbin/systemctl restart nginx.service}}&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Nginx&amp;diff=5209</id>
		<title>Nginx</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Nginx&amp;diff=5209"/>
		<updated>2016-04-08T15:00:20Z</updated>

		<summary type="html">&lt;p&gt;Fragment: /* TLS/SSL */ 翻訳進行&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Lowercase title}}&lt;br /&gt;
[[Category:ウェブサーバー]]&lt;br /&gt;
[[de:Nginx]]&lt;br /&gt;
[[en:Nginx]]&lt;br /&gt;
[[ru:Nginx]]&lt;br /&gt;
[[zh-CN:Nginx]]&lt;br /&gt;
[[Wikipedia:ja:nginx|nginx]] (&amp;quot;エンジンエックス&amp;quot;と発音します)は2005年から Igor Sysoev（ロシア）によって開発されている、フリーでオープンソースかつハイパフォーマンスな HTTP サーバーかつリバースプロクシで、IMAP/POP3 プロクシサーバーとしても機能します。Netcraft の [http://news.netcraft.com/archives/2014/01/03/january-2014-web-server-survey.html January 2014 Web Server Survey] によると、世界中の全てのドメインのうち 14.4% は Nginx によってホストされています。一方、[[Apache]] は41.64%をホストしています。Nginx は主に、その安定性・多機能・単純な設定・低リソース消費によって知られています。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
[[公式リポジトリ]]から {{Pkg|nginx}} パッケージを[[Pacman|インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ruby on Rails&#039;&#039; のためにインストールするには、[[Ruby on Rails#Rails パーフェクトセットアップ]]を参照してください。&lt;br /&gt;
&lt;br /&gt;
セキュリティを向上させるために chroot によるインストールをするには、[[#chroot でインストール]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== サービスの開始 ==&lt;br /&gt;
&lt;br /&gt;
Nginx サービスを走らせるには:&lt;br /&gt;
 # systemctl start nginx&lt;br /&gt;
&lt;br /&gt;
スタートアップ時に Nginx サービスを起動するには:&lt;br /&gt;
 # systemctl enable nginx&lt;br /&gt;
&lt;br /&gt;
http://127.0.0.1 にデフォルトで表示されるページは:&lt;br /&gt;
 /usr/share/nginx/html/index.html&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
nginx における最初の手順は [http://nginx.org/en/docs/beginners_guide.html 公式のビギナーズガイド] で説明されています。{{ic|/etc/nginx/}} にあるファイルを編集することで Nginx の設定ができます。メインの設定ファイルは {{ic|/etc/nginx/nginx.conf}} です。&lt;br /&gt;
&lt;br /&gt;
より詳しい解説はこちら: 公式の [http://nginx.org/en/docs/ ドキュメント] にある [http://wiki.nginx.org/Configuration Nginx Configuration Examples]。&lt;br /&gt;
&lt;br /&gt;
=== 一般設定 ===&lt;br /&gt;
&lt;br /&gt;
{{ic|worker_processes}} の適当な値を探って下さい。この設定は最終的に nginx が受け入れる接続の数と利用できるプロセスの数を定義します。通常、システムのハードウェアのスレッド数にすると良いでしょう。また、バージョン 1.3.8 と 1.2.5 から {{ic|worker_processes}} には {{ic|auto}} と設定することができ、最適な値を自動的に検出します ([http://nginx.org/en/docs/ngx_core_module.html#worker_processes ソース])。&lt;br /&gt;
&lt;br /&gt;
nginx が受け入れる最大接続数は {{ic|1=max_clients = worker_processes * worker_connections}} で計算できます。&lt;br /&gt;
&lt;br /&gt;
==== サーバーブロック ====&lt;br /&gt;
&lt;br /&gt;
{{ic|server}} ブロックを使うことで複数のドメインを利用することができます。&amp;quot;バーチャルホスト&amp;quot;とも呼ばれますが、これは [[Apache]] の用語です。{{ic|server}} ブロックの利用方法は [http://wiki.nginx.org/ServerBlockExample Apache] とは異なっています。&lt;br /&gt;
&lt;br /&gt;
以下の例では2つのドメインの接続をサーバーが待機します: {{ic|domainname1.dom}} と {{ic|domainname2.dom}}:&lt;br /&gt;
{{hc|/etc/nginx/nginx.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
server {&lt;br /&gt;
        listen 80;&lt;br /&gt;
        server_name domainname1.dom;&lt;br /&gt;
        root /usr/share/nginx/domainname1.dom/html;&lt;br /&gt;
        location / {&lt;br /&gt;
           index index.php index.html index.htm;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
server {&lt;br /&gt;
        listen 80;&lt;br /&gt;
        server_name domainname2.dom;&lt;br /&gt;
        root /usr/share/nginx/domainname2.dom/html;&lt;br /&gt;
        ...&lt;br /&gt;
}&lt;br /&gt;
...&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|nginx.service}} を[[再起動]]して変更を適用します。&lt;br /&gt;
&lt;br /&gt;
クライアントからの接続時にこれらのドメイン名を解決するには、[[BIND]] や [[dnsmasq]] などのDNSサーバーを設定する必要があります。&lt;br /&gt;
&lt;br /&gt;
ローカルマシンでバーチャルホストをテストするには、{{ic|/etc/hosts}} ファイルにバーチャルネームを追加してください:&lt;br /&gt;
 127.0.0.1 domainname1.dom &lt;br /&gt;
 127.0.0.1 domainname2.dom&lt;br /&gt;
&lt;br /&gt;
==== TLS/SSL ====&lt;br /&gt;
SSL を使用するには、{{pkg|openssl}} をインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|You may want to read the [http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_certificate ngx_http_ssl_module] docs first before configuring SSL}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[Let’s Encrypt]] is a free, automated, and open certificate authority. A nginx plugin is available by installing {{Pkg|letsencrypt-nginx}} to request valid ssl certificates straight from the command line and automatic configuration.}}&lt;br /&gt;
&lt;br /&gt;
自己署名証明書を作成してください (キーのサイズや効力の日数は変更できます):&lt;br /&gt;
 # cd /etc/nginx/&lt;br /&gt;
 # openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out cert.key&lt;br /&gt;
 # chmod 600 cert.key&lt;br /&gt;
 # openssl req -new -key cert.key -out cert.csr&lt;br /&gt;
 # openssl x509 -req -days 365 -in cert.csr -signkey cert.key -out cert.crt&lt;br /&gt;
&lt;br /&gt;
{{Note|その他の &#039;&#039;openssl&#039;&#039; オプションに関しては、 OpenSSLの [https://www.openssl.org/docs/apps/openssl.html man page] か [https://www.openssl.org/docs/ extensive documentation] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|If you plan on implementing SSL/TLS, know that some variations and implementations are [https://weakdh.org/#affected still] [[wikipedia:Transport_Layer_Security#Attacks_against_TLS.2FSSL|vulnerable to attack]]. For details on these current vulnerabilities within SSL/TLS and how to apply appropriate changes to nginx, visit http://disablessl3.com/ and https://weakdh.org/sysadmin.html}}&lt;br /&gt;
&lt;br /&gt;
TLS/SSLを用いる場合の {{ic|nginx.conf}} 設定サンプル:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/nginx/nginx.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
http {&lt;br /&gt;
        ssl_ciphers &amp;quot;EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH&amp;quot;;&lt;br /&gt;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;&lt;br /&gt;
        ssl_prefer_server_ciphers on;&lt;br /&gt;
        ssl_session_cache shared:SSL:10m;&lt;br /&gt;
        add_header Strict-Transport-Security &amp;quot;max-age=63072000; includeSubdomains; preload&amp;quot;;&lt;br /&gt;
        add_header X-Frame-Options DENY;&lt;br /&gt;
        add_header X-Content-Type-Options nosniff;&lt;br /&gt;
        ssl_session_tickets off;&lt;br /&gt;
        ssl_stapling on;&lt;br /&gt;
        ssl_stapling_verify on;&lt;br /&gt;
        resolver 8.8.8.8 8.8.4.4 valid=300s; # Google DNS Servers&lt;br /&gt;
        resolver_timeout 5s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
server {&lt;br /&gt;
        #listen 80; # Uncomment to also listen for HTTP requests&lt;br /&gt;
        listen 443 ssl;&lt;br /&gt;
        server_name localhost;&lt;br /&gt;
&lt;br /&gt;
        ssl_certificate ssl/server.crt;&lt;br /&gt;
        ssl_certificate_key ssl/server.key;&lt;br /&gt;
&lt;br /&gt;
        root /usr/share/nginx/html;&lt;br /&gt;
        location / {&lt;br /&gt;
            index  index.html index.htm;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* Mozilla has a useful [https://wiki.mozilla.org/Security/Server_Side_TLS SSL/TLS article] which includes [https://wiki.mozilla.org/Security/Server_Side_TLS#Nginx nginx specific] configuration guidelines as well as an [https://mozilla.github.io/server-side-tls/ssl-config-generator/ automated tool] to help create a more secure configuration.&lt;br /&gt;
* [https://cipherli.st Cipherli.st] は大半のモダンなサーバーに対して強力なSSL実装例とチュートリアルを提供します。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|nginx.service}} を再起動して変更を適用します。&lt;br /&gt;
&lt;br /&gt;
=== FastCGI ===&lt;br /&gt;
&lt;br /&gt;
FastCGI、または FCGI はウェブサーバーでインタラクティブなプログラムを動作させるためのプロトコルです。FastCGI は Common Gateway Interface (CGI) の変種で、ウェブサーバーと CGI プログラムのオーバーヘッドを減らすよう設計されていて、サーバーはより多くのウェブページのリクエストを一度に捌くことができます。&lt;br /&gt;
&lt;br /&gt;
Nginx には FastCGI が組み込まれており多くの外部ツールが動きます、例えば Perl、[[PHP]]、[[Python]] など。これらを使うためにはまず FastCGI サーバーを動かす必要があります。&lt;br /&gt;
&lt;br /&gt;
==== PHP を動かす ====&lt;br /&gt;
&lt;br /&gt;
PHP のために FastCGI サーバーを動かす方法は複数あります。ここでは推奨方法として php-fpm を使う方法を記載しています。&lt;br /&gt;
&lt;br /&gt;
===== 手順1: PHP の設定 =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|php}} をインストールしてください。{{ic|/etc/php/php.ini}} の中にある {{Ic|open_basedir}} に PHP ファイルが含まれているベースディレクトリを （{{ic|/srv/http/}} や {{ic|/usr/share/webapps/}} のような感じで）指定しなくてはなりません:&lt;br /&gt;
 open_basedir = /usr/share/webapps/:/srv/http/:/home/:/tmp/:/usr/share/pear/&lt;br /&gt;
&lt;br /&gt;
そうしたら必要なモジュールを設定しましょう。例えば sqlite3 を使うなら {{Pkg|php-sqlite}} をインストールして、{{ic|/etc/php/php.ini}} の次の行をアンコメントして有効にします:&lt;br /&gt;
 extension=sqlite3.so&lt;br /&gt;
&lt;br /&gt;
{{Note|chroot 環境で nginx を動かしている場合 (chroot は {{ic|/srv/nginx-jail}} で、ウェブページは {{ic|/srv/nginx-jail/www}}) です。{{ic|/etc/php/php-fpm.conf}} ファイルを編集して {{ic|chroot /srv/nginx-jail}} と {{ic|1=listen = /srv/nginx-jail/run/php-fpm/php-fpm.sock}} ディレクティブを pool セクション (デフォルトは {{ic|[www]}}) の中に記述する必要があります。ソケットファイルのディレクトリが存在しない場合は作成してください。}}&lt;br /&gt;
&lt;br /&gt;
====== MariaDB ======&lt;br /&gt;
[[MariaDB]] で説明されているようにして MySQL/MariaDB を設定してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/php/php.ini}} の以下の行の [http://www.php.net/manual/en/mysqlinfo.api.choosing.php 少なくともどれか一つ] をアンコメント:&lt;br /&gt;
 extension=pdo_mysql.so&lt;br /&gt;
 extension=mysqli.so&lt;br /&gt;
{{Warning|PHP 5.5 から、{{ic|mysql.so}} は [http://www.php.net/manual/de/migration55.deprecated.php 廃止] されログファイルにエラーが表示されます。}}&lt;br /&gt;
&lt;br /&gt;
ウェブスクリプトのために最小権限の MySQL ユーザーを追加することができます。また、{{ic|/etc/mysql/my.cnf}} を編集して {{ic|skip-networking}} 行をアンコメントすると MySQL サーバーはローカルホストからしかアクセスできなくなります。変更を適用するには MySQL を再起動する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|データベースを利用するために [[phpMyAdmin]], [[Adminer]], {{Pkg|mysql-workbench}} などのツールをインストールしても良いでしょう。}}&lt;br /&gt;
&lt;br /&gt;
===== 手順2: php-fpm =====&lt;br /&gt;
&lt;br /&gt;
* http://php-fpm.org&lt;br /&gt;
&lt;br /&gt;
{{Pkg|php-fpm}} をインストールします:&lt;br /&gt;
 # pacman -S php-fpm&lt;br /&gt;
&lt;br /&gt;
設定ファイルは {{ic|/etc/php/php-fpm.conf}} です。&lt;br /&gt;
&lt;br /&gt;
サービスを動かします:&lt;br /&gt;
 # systemctl start php-fpm&lt;br /&gt;
&lt;br /&gt;
{{Ic|php-fpm}} をスタートアップ時に有効にします:&lt;br /&gt;
 # systemctl enable php-fpm.service&lt;br /&gt;
&lt;br /&gt;
===== 手順3: Nginx の設定 =====&lt;br /&gt;
&lt;br /&gt;
それぞれの {{ic|server}} ブロックの中の {{ic|location}} ブロックに PHP アプリケーションを次のように記述します: &lt;br /&gt;
&lt;br /&gt;
 location ~ \.php$ {&lt;br /&gt;
      fastcgi_pass   unix:/run/php-fpm/php-fpm.sock;&lt;br /&gt;
      fastcgi_index  index.php;&lt;br /&gt;
      include        fastcgi.conf;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
{{Ic|/etc/nginx/php.conf}} を作って設定をそこに書く場合、このファイルを {{Ic|server}} ブロックに入れて下さい。&lt;br /&gt;
 server = {&lt;br /&gt;
     ...&lt;br /&gt;
     include  php.conf;&lt;br /&gt;
     ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
.html や .htm ファイルを PHP として処理したい場合は、以下のようにしてください:&lt;br /&gt;
 location ~ \.(php&#039;&#039;&#039;|html|htm&#039;&#039;&#039;)$ {&lt;br /&gt;
      fastcgi_pass  unix:/run/php-fpm/php-fpm.sock;&lt;br /&gt;
      fastcgi_index  index.php;&lt;br /&gt;
      include        fastcgi.conf;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
拡張子が .php でないファイルを php-fpm で動かすことを {{Ic|/etc/php/php-fpm.conf}} で有効にする必要があります:&lt;br /&gt;
 security.limit_extensions = .php .html .htm&lt;br /&gt;
&lt;br /&gt;
設定を変えた後は php-fpm デーモンを再起動してください。&lt;br /&gt;
 # systemctl restart php-fpm&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Ic|fastcgi_pass}} 引数に&#039;&#039;&#039;注意を払って下さい&#039;&#039;&#039;、FastCGI サーバーの設定ファイルで定義された TCP や Unix ソケットでなくてはなりません。&#039;&#039;&#039;デフォルトの&#039;&#039;&#039; {{Ic|php-fpm}} (Unix) ソケットは&lt;br /&gt;
 fastcgi_pass unix:/run/php-fpm/php-fpm.sock;&lt;br /&gt;
&#039;&#039;&#039;デフォルトの代わりに&#039;&#039;&#039;、通常の TCP ソケットを使うこともできます&lt;br /&gt;
 fastcgi_pass 127.0.0.1:9000;&lt;br /&gt;
ただし Unix ドメインソケットの方が高速です。}}&lt;br /&gt;
&lt;br /&gt;
Nginx のための FastCGI 設定がある {{Ic|fastcgi.conf}} か {{Ic|fastcgi_params}} が含まれていますが、後者は使われなくなりました。これらのファイルは Nginx をインストールしたときに作られます。&lt;br /&gt;
&lt;br /&gt;
最後に、Nginx が動作している場合は再起動してください:&lt;br /&gt;
 # systemctl restart nginx&lt;br /&gt;
&lt;br /&gt;
FastCGI をテストしたい場合は、{{ic|/usr/share/nginx/html/index.php}} を次の内容で作成して&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
   phpinfo();&lt;br /&gt;
 ?&amp;gt; &lt;br /&gt;
ブラウザで http://127.0.0.1/index.php を開いて下さい。&lt;br /&gt;
&lt;br /&gt;
以下は実際の設定例です。例の中では {{ic|root}} パスは {{ic|server}} の下に直接指定されており (デフォルト設定のように) {{ic|location}} の中には置いていません。&lt;br /&gt;
&lt;br /&gt;
 server {&lt;br /&gt;
     listen 80;&lt;br /&gt;
     server_name localhost;&lt;br /&gt;
     root /usr/share/nginx/html;&lt;br /&gt;
     location / {&lt;br /&gt;
         index index.html index.htm index.php;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     location ~ \.php$ {&lt;br /&gt;
         #fastcgi_pass 127.0.0.1:9000; (depending on your php-fpm socket configuration)&lt;br /&gt;
         fastcgi_pass unix:/run/php-fpm/php-fpm.sock;&lt;br /&gt;
         fastcgi_index index.php;&lt;br /&gt;
         include fastcgi.conf;&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== CGI を動かす ====&lt;br /&gt;
&lt;br /&gt;
この実装は CGI アプリケーションに必要です。&lt;br /&gt;
&lt;br /&gt;
===== 手順1: fcgiwrap =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|fcgiwrap}} をインストールしてください。&lt;br /&gt;
設定ファイルは {{ic|/usr/lib/systemd/system/fcgiwrap.socket}} です。&lt;br /&gt;
[[systemd]] の &#039;&#039;fcgiwrap.socket&#039;&#039; を有効化・起動します。&lt;br /&gt;
&lt;br /&gt;
この systemd ユニットファイルは現在 [https://bugs.archlinux.org/task/31696 ArchLinux のタスクページ]で議論されています。思い通りに動くか確認するためにユニットファイルを自分で検査すると良いでしょう。&lt;br /&gt;
&lt;br /&gt;
====== マルチワーカースレッド ======&lt;br /&gt;
&lt;br /&gt;
複数のワーカースレッドを生成したい場合は、{{AUR|multiwatch}} を使用するのが推奨されています。これはクラッシュした子スレッドの再起動の面倒をみてくれます。multiwatch は systemd が作成したソケットを管理できないため、unix ソケットを作成するには {{ic|spawn-fcgi}} を使う必要がありますが、ユニットファイルから直接実行した場合は fcgiwrap には問題が生じません。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/lib/systemd/system/fcgiwrap.service}} から {{ic|/etc/systemd/system/fcgiwrap.service}} にユニットファイルをコピーして (存在する場合は {{ic|fcgiwrap.socket}} ユニットも)、{{ic|ExecStart}} 行を必要に応じて修正してください。以下は {{AUR|multiwatch}} を使用するユニットファイルです。{{ic|fcgiwrap.socket}} が実行中だったり有効になっていないことを確認してください、このユニットと衝突してしまうからです:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/fcgiwrap.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Simple CGI Server&lt;br /&gt;
After=nss-user-lookup.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
ExecStartPre=/bin/rm -f /run/fcgiwrap.socket&lt;br /&gt;
ExecStart=/usr/bin/spawn-fcgi -u http -g http -s /run/fcgiwrap.sock -n -- /usr/bin/multiwatch -f 10 -- /usr/sbin/fcgiwrap&lt;br /&gt;
ExecStartPost=/usr/bin/chmod 660 /run/fcgiwrap.sock&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
Restart=on-failure&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|-f 10}} は生成する子スレッドの数に変更してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|The ExecStartPost line is required because of strange behaviour I&#039;m seeing when I use the {{ic|-M 660}} option for {{ic|spawn-fcgi}}.  The wrong mode is set.  This may be a bug?}}&lt;br /&gt;
&lt;br /&gt;
===== 手順2: Nginx の設定 =====&lt;br /&gt;
&lt;br /&gt;
CGI ウェブアプリケーションを置くそれぞれの {{Ic|server}} ブロックには以下のような {{Ic|location}} ブロックを記述します:&lt;br /&gt;
&lt;br /&gt;
 location ~ \.cgi$ {&lt;br /&gt;
      root           /path/to/server/cgi-bin;&lt;br /&gt;
      fastcgi_pass   unix:/run/fcgiwrap.sock;&lt;br /&gt;
      include        fastcgi.conf;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
{{Ic|fcgiwrap}} の&#039;&#039;&#039;デフォルト&#039;&#039;&#039; (Unix) ソケットは &#039;&#039;/run/fcgiwrap.sock&#039;&#039; です。&lt;br /&gt;
&lt;br /&gt;
== chroot でインストール ==&lt;br /&gt;
&lt;br /&gt;
[[chroot]] に Nginx をインストールすることでセキュリティレイヤーを追加することができます。セキュリティを最大限に高めるために、Nginx サーバーを動かすのに必要なファイルだけを入れて、全てのファイルは出来る限り最小限の権限にします。例えば、なるべく root が所有するようにして、{{ic|/usr/bin}} などのディレクトリは読み書きできないようにするなど。&lt;br /&gt;
&lt;br /&gt;
Arch はデフォルトでサーバーを実行するための {{ic|http}} ユーザーとグループが設定されています。chroot は {{ic|/srv/http}} で動作させます。&lt;br /&gt;
&lt;br /&gt;
この牢獄を作るための perl スクリプトが [https://gist.github.com/4365696 jail.pl gist] にあります。このスクリプトを使用するか、またはこの記事の指示に従って作成するか選ぶことができます。スクリプトは root で実行してください。変更を適用する前に行をアンコメントする必要があります。&lt;br /&gt;
&lt;br /&gt;
=== 必要なデバイスを作成 ===&lt;br /&gt;
&lt;br /&gt;
Nginx には {{ic|/dev/null}}, {{ic|/dev/random}}, {{ic|/dev/urandom}} が必要です。これらを chroot にインストールするために {{ic|/dev/}} フォルダを作成してデバイスを mknod で追加します。chroot が危険になったときでも、攻撃者が {{ic|/dev/sda1}} などの重要なデバイスにアクセスするには chroot から脱出しなくてはならないようにするために、{{ic|/dev/}} を全てマウントはしません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|mknod の引数については {{ic|man mknod}} や {{ic|&amp;lt;nowiki&amp;gt;ls -l /dev/{null,random,urandom}&amp;lt;/nowiki&amp;gt;}} を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
 # export JAIL=/srv/http&lt;br /&gt;
 # mkdir $JAIL/dev&lt;br /&gt;
 # mknod -m 0666 $JAIL/dev/null c 1 3&lt;br /&gt;
 # mknod -m 0666 $JAIL/dev/random c 1 8&lt;br /&gt;
 # mknod -m 0444 $JAIL/dev/urandom c 1 9&lt;br /&gt;
&lt;br /&gt;
=== 必要なフォルダを作成 ===&lt;br /&gt;
&lt;br /&gt;
Nginx を適切に実行するためにはたくさんのファイルが必要になります。それらをコピーする前に、ファイルを保存するためのフォルダを作成してください。ここでは Nginx のドキュメントルートが {{ic|/srv/http/www}} であると仮定します。&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p $JAIL/etc/nginx/logs&lt;br /&gt;
 # mkdir -p $JAIL/usr/{lib,bin}&lt;br /&gt;
 # mkdir -p $JAIL/usr/share/nginx&lt;br /&gt;
 # mkdir -p $JAIL/var/{log,lib}/nginx&lt;br /&gt;
 # mkdir -p $JAIL/www/cgi-bin&lt;br /&gt;
 # mkdir -p $JAIL/{run,tmp}&lt;br /&gt;
 # cd $JAIL; ln -s usr/lib lib &lt;br /&gt;
&lt;br /&gt;
{{Note|64ビットのカーネルを使っている場合 {{ic|usr/lib}} に {{ic|lib64}} と {{ic|usr/lib64}} のシンボリックリンクを作成する必要があります: {{ic|cd $JAIL; ln -s usr/lib lib64}} と {{ic|cd $JAIL/usr; ln -s lib lib64}}。}}&lt;br /&gt;
&lt;br /&gt;
そして {{ic|$JAIL/tmp}} と {{ic|$JAIL/run}} を tmpfs でマウントします。攻撃者が RAM を全て喰いつくせないようにサイズを制限すると良いでしょう。&lt;br /&gt;
&lt;br /&gt;
 # mount -t tmpfs none $JAIL/run -o &#039;noexec,size=1M&#039;&lt;br /&gt;
 # mount -t tmpfs none $JAIL/tmp -o &#039;noexec,size=100M&#039;&lt;br /&gt;
&lt;br /&gt;
再起動してもマウントが維持されるように、以下のエントリを {{ic|/etc/fstab}} に追加します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/fstab|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
 tmpfs   /srv/http/run   tmpfs   rw,noexec,relatime,size=1024k   0       0&lt;br /&gt;
 tmpfs   /srv/http/tmp   tmpfs   rw,noexec,relatime,size=102400k 0       0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== chroot に移住 ===&lt;br /&gt;
&lt;br /&gt;
まず平易なファイルをコピーします。&lt;br /&gt;
&lt;br /&gt;
 # cp -r /usr/share/nginx/* $JAIL/usr/share/nginx&lt;br /&gt;
 # cp -r /usr/share/nginx/html/* $JAIL/www&lt;br /&gt;
 # cp /usr/bin/nginx $JAIL/usr/bin/&lt;br /&gt;
 # cp -r /var/lib/nginx $JAIL/var/lib/nginx&lt;br /&gt;
&lt;br /&gt;
そして必要なライブラリをコピーします。ldd を使ってライブラリを確認して適当な場所にコピーして下さい。ハードリンクよりはコピーが推奨されます。攻撃者が書き込み権限を得たときに本当のシステムファイルが破壊されたり改変される可能性があるためです。&lt;br /&gt;
&lt;br /&gt;
 {{hc|$ ldd /usr/bin/nginx|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
   linux-vdso.so.1 (0x00007fffc41fe000)&lt;br /&gt;
   libpthread.so.0 =&amp;gt; /usr/lib/libpthread.so.0 (0x00007f57ec3e8000)&lt;br /&gt;
   libcrypt.so.1 =&amp;gt; /usr/lib/libcrypt.so.1 (0x00007f57ec1b1000)&lt;br /&gt;
   libstdc++.so.6 =&amp;gt; /usr/lib/libstdc++.so.6 (0x00007f57ebead000)&lt;br /&gt;
   libm.so.6 =&amp;gt; /usr/lib/libm.so.6 (0x00007f57ebbaf000)&lt;br /&gt;
   libpcre.so.1 =&amp;gt; /usr/lib/libpcre.so.1 (0x00007f57eb94c000)&lt;br /&gt;
   libssl.so.1.0.0 =&amp;gt; /usr/lib/libssl.so.1.0.0 (0x00007f57eb6e0000)&lt;br /&gt;
   libcrypto.so.1.0.0 =&amp;gt; /usr/lib/libcrypto.so.1.0.0 (0x00007f57eb2d6000)&lt;br /&gt;
   libdl.so.2 =&amp;gt; /usr/lib/libdl.so.2 (0x00007f57eb0d2000)&lt;br /&gt;
   libz.so.1 =&amp;gt; /usr/lib/libz.so.1 (0x00007f57eaebc000)&lt;br /&gt;
   libGeoIP.so.1 =&amp;gt; /usr/lib/libGeoIP.so.1 (0x00007f57eac8d000)&lt;br /&gt;
   libgcc_s.so.1 =&amp;gt; /usr/lib/libgcc_s.so.1 (0x00007f57eaa77000)&lt;br /&gt;
   libc.so.6 =&amp;gt; /usr/lib/libc.so.6 (0x00007f57ea6ca000)&lt;br /&gt;
   /lib64/ld-linux-x86-64.so.2 (0x00007f57ec604000)&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
 # cp /lib64/ld-linux-x86-64.so.2 $JAIL/lib&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/lib}} の中にあるファイルについては次のワンライナーが使えます:&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;# cp $(ldd /usr/bin/nginx | grep /usr/lib | sed -sre &#039;s/(.+)(\/usr\/lib\/\S+).+/\2/g&#039;) $JAIL/usr/lib&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|linux-vdso.so}} をコピーしないでください – 実際のライブラリではなく {{ic|/usr/lib}} には存在しません。64ビット環境の場合 {{ic|ld-linux-x86-64.so}} も {{ic|/lib64}} にあるように表示されます。}}&lt;br /&gt;
&lt;br /&gt;
必要なライブラリとシステムファイル以外のファイルをコピーします。&lt;br /&gt;
&lt;br /&gt;
{{bc|# cp /usr/lib/libnss_* $JAIL/usr/lib&lt;br /&gt;
# cp -rfvL /etc/{services,localtime,nsswitch.conf,nscd.conf,protocols,hosts,ld.so.cache,ld.so.conf,resolv.conf,host.conf,nginx} $JAIL/etc}}&lt;br /&gt;
 &lt;br /&gt;
Create restricted user/group files for the chroot. This way only the&lt;br /&gt;
users needed for the chroot to function exist as far as the chroot&lt;br /&gt;
knows, and none of the system users/groups are leaked to attackers&lt;br /&gt;
should they gain access to the chroot.&lt;br /&gt;
&lt;br /&gt;
{{hc|$JAIL/etc/group|&lt;br /&gt;
http:x:33:&lt;br /&gt;
nobody:x:99:&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$JAIL/etc/passwd|&lt;br /&gt;
http:x:33:33:http:/:/bin/false&lt;br /&gt;
nobody:x:99:99:nobody:/:/bin/false&lt;br /&gt;
}}&lt;br /&gt;
  &lt;br /&gt;
{{hc|$JAIL/etc/shadow|&lt;br /&gt;
http:x:14871::::::&lt;br /&gt;
nobody:x:14871::::::&lt;br /&gt;
}}&lt;br /&gt;
  &lt;br /&gt;
{{hc|$JAIL/etc/gshadow|&lt;br /&gt;
http:::&lt;br /&gt;
nobody:::&lt;br /&gt;
}}&lt;br /&gt;
  &lt;br /&gt;
 # touch $JAIL/etc/shells&lt;br /&gt;
 # touch $JAIL/run/nginx.pid&lt;br /&gt;
&lt;br /&gt;
Finally make set very restrictive permissions. As much as possible&lt;br /&gt;
should be owned by root and set unwritable.&lt;br /&gt;
&lt;br /&gt;
 # chown -R root:root $JAIL/&lt;br /&gt;
  &lt;br /&gt;
 # chown -R http:http $JAIL/www&lt;br /&gt;
 # chown -R http:http $JAIL/etc/nginx&lt;br /&gt;
 # chown -R http:http $JAIL/var/{log,lib}/nginx&lt;br /&gt;
 # chown http:http $JAIL/run/nginx.pid&lt;br /&gt;
  &lt;br /&gt;
 # find $JAIL/ -gid 0 -uid 0 -type d -print | xargs sudo chmod -rw&lt;br /&gt;
 # find $JAIL/ -gid 0 -uid 0 -type d -print | xargs sudo chmod +x&lt;br /&gt;
 # find $JAIL/etc -gid 0 -uid 0 -type f -print | xargs sudo chmod -x&lt;br /&gt;
 # find $JAIL/usr/bin -type f -print | xargs sudo chmod ug+rx&lt;br /&gt;
 # find $JAIL/ -group http -user http -print | xargs sudo chmod o-rwx&lt;br /&gt;
 # chmod +rw $JAIL/tmp&lt;br /&gt;
 # chmod +rw $JAIL/run&lt;br /&gt;
&lt;br /&gt;
If your server will bind port 80 (or any port 0-1024), give the&lt;br /&gt;
chrooted executable permission to bind these ports without root.&lt;br /&gt;
&lt;br /&gt;
 # setcap &#039;cap_net_bind_service=+ep&#039; $JAIL/usr/bin/nginx&lt;br /&gt;
&lt;br /&gt;
=== nginx.service を変更して chroot を起動 ===&lt;br /&gt;
&lt;br /&gt;
Before modifying the nginx.service unit file, it may be a good idea to copy it to&lt;br /&gt;
{{ic|/etc/systemd/system/}} since the unit files there take priority over those in {{ic|/usr/lib/systemd/system/}}. &lt;br /&gt;
This means upgrading nginx would not modify your custom .service file. &lt;br /&gt;
 # cp /usr/lib/systemd/system/nginx.service /etc/systemd/system/nginx.service&lt;br /&gt;
&lt;br /&gt;
The systemd unit must be changed to start up Nginx in the chroot, as&lt;br /&gt;
the http user, and store the pid file in the chroot &lt;br /&gt;
{{Note|I&#039;m not sure if the pid file needs to be stored in the chroot jail.}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/nginx.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=A high performance web server and a reverse proxy server&lt;br /&gt;
 After=syslog.target network.target&lt;br /&gt;
 &lt;br /&gt;
 [Service]&lt;br /&gt;
 Type=forking&lt;br /&gt;
 PIDFile=/srv/http/run/nginx.pid&lt;br /&gt;
 ExecStartPre=/usr/bin/chroot --userspec=http:http /srv/http /usr/bin/nginx -t -q -g &#039;pid /run/nginx.pid; daemon on; master_process on;&#039;&lt;br /&gt;
 ExecStart=/usr/bin/chroot --userspec=http:http /srv/http /usr/bin/nginx -g &#039;pid /run/nginx.pid; daemon on; master_process on;&#039;&lt;br /&gt;
 ExecReload=/usr/bin/chroot --userspec=http:http /srv/http /usr/bin/nginx -g &#039;pid /run/nginx.pid; daemon on; master_process on;&#039; -s reload&lt;br /&gt;
 ExecStop=/usr/bin/chroot --userspec=http:http /srv/http /usr/bin/nginx -g &#039;pid /run/nginx.pid;&#039; -s quit&lt;br /&gt;
 &lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=multi-user.target&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Note|Upgrading nginx with pacman will not upgrade the chrooted nginx installation. You have to take care of the updates manually by repeating some of the steps above. Do not forget to also update the libraries it links against. }}&lt;br /&gt;
&lt;br /&gt;
You can now safely get rid of the non-chrooted nginx installation. &lt;br /&gt;
 # pacman -Rsc nginx&lt;br /&gt;
&lt;br /&gt;
If you do not remove the non-chrooted nginx installation, you may want to make sure that the running nginx process is in fact the chrooted one. You can do so by checking where {{ic|/proc/{PID}/root}} symmlinks to. If should link to {{ic|/srv/http}} instead of {{ic|/}}. &lt;br /&gt;
 # ps -C nginx | awk &#039;{print $1}&#039; | sed 1d | while read -r PID; do ls -l /proc/$PID/root; done&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== 設定の確認 ===&lt;br /&gt;
 # nginx -t&lt;br /&gt;
&lt;br /&gt;
結果:&lt;br /&gt;
&lt;br /&gt;
 nginx: the configuration file /etc/nginx/nginx.conf syntax is ok&lt;br /&gt;
 nginx: configuration file /etc/nginx/nginx.conf test is successful&lt;br /&gt;
&lt;br /&gt;
=== ローカル IP へのアクセスが localhost にリダイレクトされる ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux [https://bbs.archlinux.org/viewtopic.php?pid=780561#p780561 フォーラム]からの解決法があります。&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/nginx/nginx.conf}} を開き、&amp;quot;server_name localhost&amp;quot; の前の # を取り除き、以下を付け加えます:&lt;br /&gt;
 server_name_in_redirect off;&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、nginx は設定にある server_name へのリクエストをすべてリダイレクトします。&lt;br /&gt;
&lt;br /&gt;
=== Error: 403 (Permission error) ===&lt;br /&gt;
&lt;br /&gt;
This is most likely a permission error. Are you sure whatever user configured in the Nginx configuration is able to read the correct files?&lt;br /&gt;
&lt;br /&gt;
If the files are located within a home directory, (e.g. {{ic|/home/arch/public/webapp}}) and you are sure the user running Nginx has the right permissions (you can temporarily chmod all the files to 777 in order to determine this), {{ic|/home/arch}} might be &#039;&#039;&#039;chmod 750&#039;&#039;&#039;, simply {{Ic|chmod}} it to &#039;&#039;751&#039;&#039;, and it should work.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If you have changed your document root&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you are sure that permissions are as they should be, make sure that your document root directory is not empty. Try creating index.html in there.&lt;br /&gt;
&lt;br /&gt;
=== Error: 404 (Pathinfo error) ===&lt;br /&gt;
&lt;br /&gt;
いくつかのフレームワーク （thinkphp、cakephp など）や CMS では pathinfo が必要です。&lt;br /&gt;
&lt;br /&gt;
1. {{ic|/etc/php/php.ini}} ファイルを開き、次のように付け加えます&lt;br /&gt;
 cgi.fix_pathinfo=1&lt;br /&gt;
2. {{ic|/etc/nginx/nginx.conf}} を開き、次の部分をコメントアウトします&lt;br /&gt;
&lt;br /&gt;
 location ~ \.php$ {&lt;br /&gt;
 ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
を&lt;br /&gt;
&lt;br /&gt;
 #location ~ \.php$ {&lt;br /&gt;
 #...&lt;br /&gt;
 #}&lt;br /&gt;
&lt;br /&gt;
そして以下を加えます&lt;br /&gt;
 location ~ ^(.+\.php)(.*)$ {&lt;br /&gt;
   root   /srv/http/nginx;&lt;br /&gt;
   fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock; 	&lt;br /&gt;
   #fastcgi_pass   127.0.0.1:9000; #Un-comment this and comment &amp;quot;fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;&amp;quot; if you are not using php-fpm.&lt;br /&gt;
   fastcgi_index  index.php;&lt;br /&gt;
   set $document_root2 $document_root;&lt;br /&gt;
   if ($document_root2 ~ &amp;quot;^(.*\\\\).*?[\\\\|\/]\.\.\/(.*)$&amp;quot;) { set $document_root2 $1$2; }&lt;br /&gt;
   if ($document_root2 ~ &amp;quot;^(.*\\\\).*?[\\\\|\/]\.\.\/(.*)$&amp;quot;) {	set $document_root2 $1$2; }&lt;br /&gt;
   if ($document_root2 ~ &amp;quot;^(.*\\\\).*?[\\\\|\/]\.\.\/(.*)$&amp;quot;) {	set $document_root2 $1$2; }&lt;br /&gt;
   if ($document_root2 ~ &amp;quot;^(.*\\\\).*?[\\\\|\/]\.\.\/(.*)$&amp;quot;) {	set $document_root2 $1$2; }&lt;br /&gt;
   if ($document_root2 ~ &amp;quot;^(.*\\\\).*?[\\\\|\/]\.\.\/(.*)$&amp;quot;) {	set $document_root2 $1$2; }&lt;br /&gt;
   fastcgi_split_path_info ^(.+\.php)(.*)$;&lt;br /&gt;
   fastcgi_param	SCRIPT_FILENAME	$document_root2$fastcgi_script_name;&lt;br /&gt;
   fastcgi_param	PATH_INFO	$fastcgi_path_info;&lt;br /&gt;
   fastcgi_param	PATH_TRANSLATED	$document_root2$fastcgi_path_info;&lt;br /&gt;
   include	fastcgi_params;&lt;br /&gt;
   fastcgi_param  DOCUMENT_ROOT      $document_root2;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
try_files を使う方法もあります:&lt;br /&gt;
 server {&lt;br /&gt;
 ..&lt;br /&gt;
    root /usr/share/nginx/html;&lt;br /&gt;
    index index.php;&lt;br /&gt;
    location / {&lt;br /&gt;
      try_files $uri $uri/ /index.php?$args;&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Error: The page you are looking for is temporarily unavailable. Please try again later. ===&lt;br /&gt;
&lt;br /&gt;
FastCGI サーバーが動作していないか、ソケットが間違ったパーミッションに設定されています。&lt;br /&gt;
&lt;br /&gt;
=== Error: No input file specified ===&lt;br /&gt;
&lt;br /&gt;
おそらくスクリプトのフルパスを含んだ SCRIPT_FILENAME がありません。&lt;br /&gt;
nginx の設定 (fastcgi_param  SCRIPT_FILENAME) が完全でも、このエラーは php が requestd スクリプトをロードできないことを意味しています。これは単純にパーミッションの問題であることが普通で、root で php-cgi を実行するか&lt;br /&gt;
 # spawn-fcgi -a 127.0.0.1 -p 9000 -f /usr/bin/php-cgi&lt;br /&gt;
php-cgi を起動するグループとユーザーを作成する必要があります。例えば:&lt;br /&gt;
 # groupadd www&lt;br /&gt;
 # useradd -g www www&lt;br /&gt;
 # chmod +w /srv/www/nginx/html&lt;br /&gt;
 # chown -R www:www /srv/www/nginx/html&lt;br /&gt;
 # spawn-fcgi -a 127.0.0.1 -p 9000 -u www -g www -f /usr/bin/php-cgi&lt;br /&gt;
&lt;br /&gt;
他の可能性としては、{{ic|nginx.conf}} 内の &amp;quot;location ~ \.php$&amp;quot; セクションの &amp;quot;root&amp;quot; 引数が間違っていることがありえます。&amp;quot;root&amp;quot; が同じサーバーの &amp;quot;location /&amp;quot; と同じディレクトリを示しているか確認してください。もしくは root をグローバルに設定するには、location セクションで定義しないでください。&lt;br /&gt;
&lt;br /&gt;
Also keep in mind that your php script path was defined as {{ic|/srv/http}} by default using the variable &amp;quot;open_basedir&amp;quot; in {{ic|/etc/php/php.ini}}; you can change them if you need.&lt;br /&gt;
&lt;br /&gt;
Also notice that not only php script should have read permission, but also the entire directory structure should have execute permission so that PHP user can traverse the path.&lt;br /&gt;
&lt;br /&gt;
=== Error: FastCGI で空のページが表示される ===&lt;br /&gt;
&lt;br /&gt;
access.log にエラーが表示されず、コード200が返されるのに以下のような空のページが表示される場合:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;html&amp;gt;&lt;br /&gt;
   &amp;lt;head&amp;gt;&amp;lt;/head&amp;gt;&lt;br /&gt;
   &amp;lt;body&amp;gt;&amp;lt;/body&amp;gt;&lt;br /&gt;
  &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://beutelevision.com/blog2/2013/08/26/nginx-with-php-fpm-generating-blank-page/ Thomas Beutel のブログ] に書かれた解決方法:&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/nginx/nginx.conf}} を編集して php の {{ic|location}} セクションに {{ic|fastcgi_param}} という行を追加:&lt;br /&gt;
&lt;br /&gt;
     location ~ \.php$ {&lt;br /&gt;
          ...&lt;br /&gt;
          include fastcgi_params;&lt;br /&gt;
          fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;&lt;br /&gt;
          ...&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
php_fpm では PHP ファイルのパスを認識するために以上のように設定する必要があります。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
* [http://nginx.org/ Nginx 公式サイト]&lt;br /&gt;
* [http://calomel.org/nginx.html Nginx HowTo]&lt;br /&gt;
* [http://wiki.gotux.net/config:nginx Easy Config Files]&lt;br /&gt;
* [http://www.tecmint.com/install-nginx-php-mysql-with-mariadb-engine-and-phpmyadmin-in-arch-linux/ Installing LEMP (Nginx, PHP, MySQL with MariaDB engine and PhpMyAdmin) in Arch Linux]&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Nginx&amp;diff=5208</id>
		<title>Nginx</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Nginx&amp;diff=5208"/>
		<updated>2016-04-08T14:49:01Z</updated>

		<summary type="html">&lt;p&gt;Fragment: /* SSL */ 英語wikiよりインポート&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Lowercase title}}&lt;br /&gt;
[[Category:ウェブサーバー]]&lt;br /&gt;
[[de:Nginx]]&lt;br /&gt;
[[en:Nginx]]&lt;br /&gt;
[[ru:Nginx]]&lt;br /&gt;
[[zh-CN:Nginx]]&lt;br /&gt;
[[Wikipedia:ja:nginx|nginx]] (&amp;quot;エンジンエックス&amp;quot;と発音します)は2005年から Igor Sysoev（ロシア）によって開発されている、フリーでオープンソースかつハイパフォーマンスな HTTP サーバーかつリバースプロクシで、IMAP/POP3 プロクシサーバーとしても機能します。Netcraft の [http://news.netcraft.com/archives/2014/01/03/january-2014-web-server-survey.html January 2014 Web Server Survey] によると、世界中の全てのドメインのうち 14.4% は Nginx によってホストされています。一方、[[Apache]] は41.64%をホストしています。Nginx は主に、その安定性・多機能・単純な設定・低リソース消費によって知られています。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
[[公式リポジトリ]]から {{Pkg|nginx}} パッケージを[[Pacman|インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ruby on Rails&#039;&#039; のためにインストールするには、[[Ruby on Rails#Rails パーフェクトセットアップ]]を参照してください。&lt;br /&gt;
&lt;br /&gt;
セキュリティを向上させるために chroot によるインストールをするには、[[#chroot でインストール]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== サービスの開始 ==&lt;br /&gt;
&lt;br /&gt;
Nginx サービスを走らせるには:&lt;br /&gt;
 # systemctl start nginx&lt;br /&gt;
&lt;br /&gt;
スタートアップ時に Nginx サービスを起動するには:&lt;br /&gt;
 # systemctl enable nginx&lt;br /&gt;
&lt;br /&gt;
http://127.0.0.1 にデフォルトで表示されるページは:&lt;br /&gt;
 /usr/share/nginx/html/index.html&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
nginx における最初の手順は [http://nginx.org/en/docs/beginners_guide.html 公式のビギナーズガイド] で説明されています。{{ic|/etc/nginx/}} にあるファイルを編集することで Nginx の設定ができます。メインの設定ファイルは {{ic|/etc/nginx/nginx.conf}} です。&lt;br /&gt;
&lt;br /&gt;
より詳しい解説はこちら: 公式の [http://nginx.org/en/docs/ ドキュメント] にある [http://wiki.nginx.org/Configuration Nginx Configuration Examples]。&lt;br /&gt;
&lt;br /&gt;
=== 一般設定 ===&lt;br /&gt;
&lt;br /&gt;
{{ic|worker_processes}} の適当な値を探って下さい。この設定は最終的に nginx が受け入れる接続の数と利用できるプロセスの数を定義します。通常、システムのハードウェアのスレッド数にすると良いでしょう。また、バージョン 1.3.8 と 1.2.5 から {{ic|worker_processes}} には {{ic|auto}} と設定することができ、最適な値を自動的に検出します ([http://nginx.org/en/docs/ngx_core_module.html#worker_processes ソース])。&lt;br /&gt;
&lt;br /&gt;
nginx が受け入れる最大接続数は {{ic|1=max_clients = worker_processes * worker_connections}} で計算できます。&lt;br /&gt;
&lt;br /&gt;
==== サーバーブロック ====&lt;br /&gt;
&lt;br /&gt;
{{ic|server}} ブロックを使うことで複数のドメインを利用することができます。&amp;quot;バーチャルホスト&amp;quot;とも呼ばれますが、これは [[Apache]] の用語です。{{ic|server}} ブロックの利用方法は [http://wiki.nginx.org/ServerBlockExample Apache] とは異なっています。&lt;br /&gt;
&lt;br /&gt;
以下の例では2つのドメインの接続をサーバーが待機します: {{ic|domainname1.dom}} と {{ic|domainname2.dom}}:&lt;br /&gt;
{{hc|/etc/nginx/nginx.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
server {&lt;br /&gt;
        listen 80;&lt;br /&gt;
        server_name domainname1.dom;&lt;br /&gt;
        root /usr/share/nginx/domainname1.dom/html;&lt;br /&gt;
        location / {&lt;br /&gt;
           index index.php index.html index.htm;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
server {&lt;br /&gt;
        listen 80;&lt;br /&gt;
        server_name domainname2.dom;&lt;br /&gt;
        root /usr/share/nginx/domainname2.dom/html;&lt;br /&gt;
        ...&lt;br /&gt;
}&lt;br /&gt;
...&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|nginx.service}} を[[再起動]]して変更を適用します。&lt;br /&gt;
&lt;br /&gt;
クライアントからの接続時にこれらのドメイン名を解決するには、[[BIND]] や [[dnsmasq]] などのDNSサーバーを設定する必要があります。&lt;br /&gt;
&lt;br /&gt;
ローカルマシンでバーチャルホストをテストするには、{{ic|/etc/hosts}} ファイルにバーチャルネームを追加してください:&lt;br /&gt;
 127.0.0.1 domainname1.dom &lt;br /&gt;
 127.0.0.1 domainname2.dom&lt;br /&gt;
&lt;br /&gt;
==== TLS/SSL ====&lt;br /&gt;
SSL を使用するには、{{pkg|openssl}} をインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|You may want to read the [http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_certificate ngx_http_ssl_module] docs first before configuring SSL}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[Let’s Encrypt]] is a free, automated, and open certificate authority. A nginx plugin is available by installing {{Pkg|letsencrypt-nginx}} to request valid ssl certificates straight from the command line and automatic configuration.}}&lt;br /&gt;
&lt;br /&gt;
自己署名証明書を作成してください (キーのサイズや効力の日数は変更できます):&lt;br /&gt;
 # cd /etc/nginx/&lt;br /&gt;
 # openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out cert.key&lt;br /&gt;
 # chmod 600 cert.key&lt;br /&gt;
 # openssl req -new -key cert.key -out cert.csr&lt;br /&gt;
 # openssl x509 -req -days 365 -in cert.csr -signkey cert.key -out cert.crt&lt;br /&gt;
&lt;br /&gt;
{{Note|For more &#039;&#039;openssl&#039;&#039; options, read its [https://www.openssl.org/docs/apps/openssl.html man page] or peruse its [https://www.openssl.org/docs/ extensive documentation].}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|If you plan on implementing SSL/TLS, know that some variations and implementations are [https://weakdh.org/#affected still] [[wikipedia:Transport_Layer_Security#Attacks_against_TLS.2FSSL|vulnerable to attack]]. For details on these current vulnerabilities within SSL/TLS and how to apply appropriate changes to nginx, visit http://disablessl3.com/ and https://weakdh.org/sysadmin.html}}&lt;br /&gt;
&lt;br /&gt;
Example of a {{ic|nginx.conf}} using SSL:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/nginx/nginx.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
http {&lt;br /&gt;
        ssl_ciphers &amp;quot;EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH&amp;quot;;&lt;br /&gt;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;&lt;br /&gt;
        ssl_prefer_server_ciphers on;&lt;br /&gt;
        ssl_session_cache shared:SSL:10m;&lt;br /&gt;
        add_header Strict-Transport-Security &amp;quot;max-age=63072000; includeSubdomains; preload&amp;quot;;&lt;br /&gt;
        add_header X-Frame-Options DENY;&lt;br /&gt;
        add_header X-Content-Type-Options nosniff;&lt;br /&gt;
        ssl_session_tickets off;&lt;br /&gt;
        ssl_stapling on;&lt;br /&gt;
        ssl_stapling_verify on;&lt;br /&gt;
        resolver 8.8.8.8 8.8.4.4 valid=300s; # Google DNS Servers&lt;br /&gt;
        resolver_timeout 5s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
server {&lt;br /&gt;
        #listen 80; # Uncomment to also listen for HTTP requests&lt;br /&gt;
        listen 443 ssl;&lt;br /&gt;
        server_name localhost;&lt;br /&gt;
&lt;br /&gt;
        ssl_certificate ssl/server.crt;&lt;br /&gt;
        ssl_certificate_key ssl/server.key;&lt;br /&gt;
&lt;br /&gt;
        root /usr/share/nginx/html;&lt;br /&gt;
        location / {&lt;br /&gt;
            index  index.html index.htm;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* Mozilla has a useful [https://wiki.mozilla.org/Security/Server_Side_TLS SSL/TLS article] which includes [https://wiki.mozilla.org/Security/Server_Side_TLS#Nginx nginx specific] configuration guidelines as well as an [https://mozilla.github.io/server-side-tls/ssl-config-generator/ automated tool] to help create a more secure configuration.&lt;br /&gt;
* [https://cipherli.st Cipherli.st] provides strong SSL implementation examples and tutorial for most modern webservers.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|nginx.service}} を再起動して変更を適用します。&lt;br /&gt;
&lt;br /&gt;
=== FastCGI ===&lt;br /&gt;
&lt;br /&gt;
FastCGI、または FCGI はウェブサーバーでインタラクティブなプログラムを動作させるためのプロトコルです。FastCGI は Common Gateway Interface (CGI) の変種で、ウェブサーバーと CGI プログラムのオーバーヘッドを減らすよう設計されていて、サーバーはより多くのウェブページのリクエストを一度に捌くことができます。&lt;br /&gt;
&lt;br /&gt;
Nginx には FastCGI が組み込まれており多くの外部ツールが動きます、例えば Perl、[[PHP]]、[[Python]] など。これらを使うためにはまず FastCGI サーバーを動かす必要があります。&lt;br /&gt;
&lt;br /&gt;
==== PHP を動かす ====&lt;br /&gt;
&lt;br /&gt;
PHP のために FastCGI サーバーを動かす方法は複数あります。ここでは推奨方法として php-fpm を使う方法を記載しています。&lt;br /&gt;
&lt;br /&gt;
===== 手順1: PHP の設定 =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|php}} をインストールしてください。{{ic|/etc/php/php.ini}} の中にある {{Ic|open_basedir}} に PHP ファイルが含まれているベースディレクトリを （{{ic|/srv/http/}} や {{ic|/usr/share/webapps/}} のような感じで）指定しなくてはなりません:&lt;br /&gt;
 open_basedir = /usr/share/webapps/:/srv/http/:/home/:/tmp/:/usr/share/pear/&lt;br /&gt;
&lt;br /&gt;
そうしたら必要なモジュールを設定しましょう。例えば sqlite3 を使うなら {{Pkg|php-sqlite}} をインストールして、{{ic|/etc/php/php.ini}} の次の行をアンコメントして有効にします:&lt;br /&gt;
 extension=sqlite3.so&lt;br /&gt;
&lt;br /&gt;
{{Note|chroot 環境で nginx を動かしている場合 (chroot は {{ic|/srv/nginx-jail}} で、ウェブページは {{ic|/srv/nginx-jail/www}}) です。{{ic|/etc/php/php-fpm.conf}} ファイルを編集して {{ic|chroot /srv/nginx-jail}} と {{ic|1=listen = /srv/nginx-jail/run/php-fpm/php-fpm.sock}} ディレクティブを pool セクション (デフォルトは {{ic|[www]}}) の中に記述する必要があります。ソケットファイルのディレクトリが存在しない場合は作成してください。}}&lt;br /&gt;
&lt;br /&gt;
====== MariaDB ======&lt;br /&gt;
[[MariaDB]] で説明されているようにして MySQL/MariaDB を設定してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/php/php.ini}} の以下の行の [http://www.php.net/manual/en/mysqlinfo.api.choosing.php 少なくともどれか一つ] をアンコメント:&lt;br /&gt;
 extension=pdo_mysql.so&lt;br /&gt;
 extension=mysqli.so&lt;br /&gt;
{{Warning|PHP 5.5 から、{{ic|mysql.so}} は [http://www.php.net/manual/de/migration55.deprecated.php 廃止] されログファイルにエラーが表示されます。}}&lt;br /&gt;
&lt;br /&gt;
ウェブスクリプトのために最小権限の MySQL ユーザーを追加することができます。また、{{ic|/etc/mysql/my.cnf}} を編集して {{ic|skip-networking}} 行をアンコメントすると MySQL サーバーはローカルホストからしかアクセスできなくなります。変更を適用するには MySQL を再起動する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|データベースを利用するために [[phpMyAdmin]], [[Adminer]], {{Pkg|mysql-workbench}} などのツールをインストールしても良いでしょう。}}&lt;br /&gt;
&lt;br /&gt;
===== 手順2: php-fpm =====&lt;br /&gt;
&lt;br /&gt;
* http://php-fpm.org&lt;br /&gt;
&lt;br /&gt;
{{Pkg|php-fpm}} をインストールします:&lt;br /&gt;
 # pacman -S php-fpm&lt;br /&gt;
&lt;br /&gt;
設定ファイルは {{ic|/etc/php/php-fpm.conf}} です。&lt;br /&gt;
&lt;br /&gt;
サービスを動かします:&lt;br /&gt;
 # systemctl start php-fpm&lt;br /&gt;
&lt;br /&gt;
{{Ic|php-fpm}} をスタートアップ時に有効にします:&lt;br /&gt;
 # systemctl enable php-fpm.service&lt;br /&gt;
&lt;br /&gt;
===== 手順3: Nginx の設定 =====&lt;br /&gt;
&lt;br /&gt;
それぞれの {{ic|server}} ブロックの中の {{ic|location}} ブロックに PHP アプリケーションを次のように記述します: &lt;br /&gt;
&lt;br /&gt;
 location ~ \.php$ {&lt;br /&gt;
      fastcgi_pass   unix:/run/php-fpm/php-fpm.sock;&lt;br /&gt;
      fastcgi_index  index.php;&lt;br /&gt;
      include        fastcgi.conf;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
{{Ic|/etc/nginx/php.conf}} を作って設定をそこに書く場合、このファイルを {{Ic|server}} ブロックに入れて下さい。&lt;br /&gt;
 server = {&lt;br /&gt;
     ...&lt;br /&gt;
     include  php.conf;&lt;br /&gt;
     ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
.html や .htm ファイルを PHP として処理したい場合は、以下のようにしてください:&lt;br /&gt;
 location ~ \.(php&#039;&#039;&#039;|html|htm&#039;&#039;&#039;)$ {&lt;br /&gt;
      fastcgi_pass  unix:/run/php-fpm/php-fpm.sock;&lt;br /&gt;
      fastcgi_index  index.php;&lt;br /&gt;
      include        fastcgi.conf;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
拡張子が .php でないファイルを php-fpm で動かすことを {{Ic|/etc/php/php-fpm.conf}} で有効にする必要があります:&lt;br /&gt;
 security.limit_extensions = .php .html .htm&lt;br /&gt;
&lt;br /&gt;
設定を変えた後は php-fpm デーモンを再起動してください。&lt;br /&gt;
 # systemctl restart php-fpm&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Ic|fastcgi_pass}} 引数に&#039;&#039;&#039;注意を払って下さい&#039;&#039;&#039;、FastCGI サーバーの設定ファイルで定義された TCP や Unix ソケットでなくてはなりません。&#039;&#039;&#039;デフォルトの&#039;&#039;&#039; {{Ic|php-fpm}} (Unix) ソケットは&lt;br /&gt;
 fastcgi_pass unix:/run/php-fpm/php-fpm.sock;&lt;br /&gt;
&#039;&#039;&#039;デフォルトの代わりに&#039;&#039;&#039;、通常の TCP ソケットを使うこともできます&lt;br /&gt;
 fastcgi_pass 127.0.0.1:9000;&lt;br /&gt;
ただし Unix ドメインソケットの方が高速です。}}&lt;br /&gt;
&lt;br /&gt;
Nginx のための FastCGI 設定がある {{Ic|fastcgi.conf}} か {{Ic|fastcgi_params}} が含まれていますが、後者は使われなくなりました。これらのファイルは Nginx をインストールしたときに作られます。&lt;br /&gt;
&lt;br /&gt;
最後に、Nginx が動作している場合は再起動してください:&lt;br /&gt;
 # systemctl restart nginx&lt;br /&gt;
&lt;br /&gt;
FastCGI をテストしたい場合は、{{ic|/usr/share/nginx/html/index.php}} を次の内容で作成して&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
   phpinfo();&lt;br /&gt;
 ?&amp;gt; &lt;br /&gt;
ブラウザで http://127.0.0.1/index.php を開いて下さい。&lt;br /&gt;
&lt;br /&gt;
以下は実際の設定例です。例の中では {{ic|root}} パスは {{ic|server}} の下に直接指定されており (デフォルト設定のように) {{ic|location}} の中には置いていません。&lt;br /&gt;
&lt;br /&gt;
 server {&lt;br /&gt;
     listen 80;&lt;br /&gt;
     server_name localhost;&lt;br /&gt;
     root /usr/share/nginx/html;&lt;br /&gt;
     location / {&lt;br /&gt;
         index index.html index.htm index.php;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     location ~ \.php$ {&lt;br /&gt;
         #fastcgi_pass 127.0.0.1:9000; (depending on your php-fpm socket configuration)&lt;br /&gt;
         fastcgi_pass unix:/run/php-fpm/php-fpm.sock;&lt;br /&gt;
         fastcgi_index index.php;&lt;br /&gt;
         include fastcgi.conf;&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== CGI を動かす ====&lt;br /&gt;
&lt;br /&gt;
この実装は CGI アプリケーションに必要です。&lt;br /&gt;
&lt;br /&gt;
===== 手順1: fcgiwrap =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|fcgiwrap}} をインストールしてください。&lt;br /&gt;
設定ファイルは {{ic|/usr/lib/systemd/system/fcgiwrap.socket}} です。&lt;br /&gt;
[[systemd]] の &#039;&#039;fcgiwrap.socket&#039;&#039; を有効化・起動します。&lt;br /&gt;
&lt;br /&gt;
この systemd ユニットファイルは現在 [https://bugs.archlinux.org/task/31696 ArchLinux のタスクページ]で議論されています。思い通りに動くか確認するためにユニットファイルを自分で検査すると良いでしょう。&lt;br /&gt;
&lt;br /&gt;
====== マルチワーカースレッド ======&lt;br /&gt;
&lt;br /&gt;
複数のワーカースレッドを生成したい場合は、{{AUR|multiwatch}} を使用するのが推奨されています。これはクラッシュした子スレッドの再起動の面倒をみてくれます。multiwatch は systemd が作成したソケットを管理できないため、unix ソケットを作成するには {{ic|spawn-fcgi}} を使う必要がありますが、ユニットファイルから直接実行した場合は fcgiwrap には問題が生じません。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/lib/systemd/system/fcgiwrap.service}} から {{ic|/etc/systemd/system/fcgiwrap.service}} にユニットファイルをコピーして (存在する場合は {{ic|fcgiwrap.socket}} ユニットも)、{{ic|ExecStart}} 行を必要に応じて修正してください。以下は {{AUR|multiwatch}} を使用するユニットファイルです。{{ic|fcgiwrap.socket}} が実行中だったり有効になっていないことを確認してください、このユニットと衝突してしまうからです:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/fcgiwrap.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Simple CGI Server&lt;br /&gt;
After=nss-user-lookup.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
ExecStartPre=/bin/rm -f /run/fcgiwrap.socket&lt;br /&gt;
ExecStart=/usr/bin/spawn-fcgi -u http -g http -s /run/fcgiwrap.sock -n -- /usr/bin/multiwatch -f 10 -- /usr/sbin/fcgiwrap&lt;br /&gt;
ExecStartPost=/usr/bin/chmod 660 /run/fcgiwrap.sock&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
Restart=on-failure&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|-f 10}} は生成する子スレッドの数に変更してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|The ExecStartPost line is required because of strange behaviour I&#039;m seeing when I use the {{ic|-M 660}} option for {{ic|spawn-fcgi}}.  The wrong mode is set.  This may be a bug?}}&lt;br /&gt;
&lt;br /&gt;
===== 手順2: Nginx の設定 =====&lt;br /&gt;
&lt;br /&gt;
CGI ウェブアプリケーションを置くそれぞれの {{Ic|server}} ブロックには以下のような {{Ic|location}} ブロックを記述します:&lt;br /&gt;
&lt;br /&gt;
 location ~ \.cgi$ {&lt;br /&gt;
      root           /path/to/server/cgi-bin;&lt;br /&gt;
      fastcgi_pass   unix:/run/fcgiwrap.sock;&lt;br /&gt;
      include        fastcgi.conf;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
{{Ic|fcgiwrap}} の&#039;&#039;&#039;デフォルト&#039;&#039;&#039; (Unix) ソケットは &#039;&#039;/run/fcgiwrap.sock&#039;&#039; です。&lt;br /&gt;
&lt;br /&gt;
== chroot でインストール ==&lt;br /&gt;
&lt;br /&gt;
[[chroot]] に Nginx をインストールすることでセキュリティレイヤーを追加することができます。セキュリティを最大限に高めるために、Nginx サーバーを動かすのに必要なファイルだけを入れて、全てのファイルは出来る限り最小限の権限にします。例えば、なるべく root が所有するようにして、{{ic|/usr/bin}} などのディレクトリは読み書きできないようにするなど。&lt;br /&gt;
&lt;br /&gt;
Arch はデフォルトでサーバーを実行するための {{ic|http}} ユーザーとグループが設定されています。chroot は {{ic|/srv/http}} で動作させます。&lt;br /&gt;
&lt;br /&gt;
この牢獄を作るための perl スクリプトが [https://gist.github.com/4365696 jail.pl gist] にあります。このスクリプトを使用するか、またはこの記事の指示に従って作成するか選ぶことができます。スクリプトは root で実行してください。変更を適用する前に行をアンコメントする必要があります。&lt;br /&gt;
&lt;br /&gt;
=== 必要なデバイスを作成 ===&lt;br /&gt;
&lt;br /&gt;
Nginx には {{ic|/dev/null}}, {{ic|/dev/random}}, {{ic|/dev/urandom}} が必要です。これらを chroot にインストールするために {{ic|/dev/}} フォルダを作成してデバイスを mknod で追加します。chroot が危険になったときでも、攻撃者が {{ic|/dev/sda1}} などの重要なデバイスにアクセスするには chroot から脱出しなくてはならないようにするために、{{ic|/dev/}} を全てマウントはしません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|mknod の引数については {{ic|man mknod}} や {{ic|&amp;lt;nowiki&amp;gt;ls -l /dev/{null,random,urandom}&amp;lt;/nowiki&amp;gt;}} を見て下さい。}}&lt;br /&gt;
&lt;br /&gt;
 # export JAIL=/srv/http&lt;br /&gt;
 # mkdir $JAIL/dev&lt;br /&gt;
 # mknod -m 0666 $JAIL/dev/null c 1 3&lt;br /&gt;
 # mknod -m 0666 $JAIL/dev/random c 1 8&lt;br /&gt;
 # mknod -m 0444 $JAIL/dev/urandom c 1 9&lt;br /&gt;
&lt;br /&gt;
=== 必要なフォルダを作成 ===&lt;br /&gt;
&lt;br /&gt;
Nginx を適切に実行するためにはたくさんのファイルが必要になります。それらをコピーする前に、ファイルを保存するためのフォルダを作成してください。ここでは Nginx のドキュメントルートが {{ic|/srv/http/www}} であると仮定します。&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p $JAIL/etc/nginx/logs&lt;br /&gt;
 # mkdir -p $JAIL/usr/{lib,bin}&lt;br /&gt;
 # mkdir -p $JAIL/usr/share/nginx&lt;br /&gt;
 # mkdir -p $JAIL/var/{log,lib}/nginx&lt;br /&gt;
 # mkdir -p $JAIL/www/cgi-bin&lt;br /&gt;
 # mkdir -p $JAIL/{run,tmp}&lt;br /&gt;
 # cd $JAIL; ln -s usr/lib lib &lt;br /&gt;
&lt;br /&gt;
{{Note|64ビットのカーネルを使っている場合 {{ic|usr/lib}} に {{ic|lib64}} と {{ic|usr/lib64}} のシンボリックリンクを作成する必要があります: {{ic|cd $JAIL; ln -s usr/lib lib64}} と {{ic|cd $JAIL/usr; ln -s lib lib64}}。}}&lt;br /&gt;
&lt;br /&gt;
そして {{ic|$JAIL/tmp}} と {{ic|$JAIL/run}} を tmpfs でマウントします。攻撃者が RAM を全て喰いつくせないようにサイズを制限すると良いでしょう。&lt;br /&gt;
&lt;br /&gt;
 # mount -t tmpfs none $JAIL/run -o &#039;noexec,size=1M&#039;&lt;br /&gt;
 # mount -t tmpfs none $JAIL/tmp -o &#039;noexec,size=100M&#039;&lt;br /&gt;
&lt;br /&gt;
再起動してもマウントが維持されるように、以下のエントリを {{ic|/etc/fstab}} に追加します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/fstab|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
 tmpfs   /srv/http/run   tmpfs   rw,noexec,relatime,size=1024k   0       0&lt;br /&gt;
 tmpfs   /srv/http/tmp   tmpfs   rw,noexec,relatime,size=102400k 0       0&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== chroot に移住 ===&lt;br /&gt;
&lt;br /&gt;
まず平易なファイルをコピーします。&lt;br /&gt;
&lt;br /&gt;
 # cp -r /usr/share/nginx/* $JAIL/usr/share/nginx&lt;br /&gt;
 # cp -r /usr/share/nginx/html/* $JAIL/www&lt;br /&gt;
 # cp /usr/bin/nginx $JAIL/usr/bin/&lt;br /&gt;
 # cp -r /var/lib/nginx $JAIL/var/lib/nginx&lt;br /&gt;
&lt;br /&gt;
そして必要なライブラリをコピーします。ldd を使ってライブラリを確認して適当な場所にコピーして下さい。ハードリンクよりはコピーが推奨されます。攻撃者が書き込み権限を得たときに本当のシステムファイルが破壊されたり改変される可能性があるためです。&lt;br /&gt;
&lt;br /&gt;
 {{hc|$ ldd /usr/bin/nginx|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
   linux-vdso.so.1 (0x00007fffc41fe000)&lt;br /&gt;
   libpthread.so.0 =&amp;gt; /usr/lib/libpthread.so.0 (0x00007f57ec3e8000)&lt;br /&gt;
   libcrypt.so.1 =&amp;gt; /usr/lib/libcrypt.so.1 (0x00007f57ec1b1000)&lt;br /&gt;
   libstdc++.so.6 =&amp;gt; /usr/lib/libstdc++.so.6 (0x00007f57ebead000)&lt;br /&gt;
   libm.so.6 =&amp;gt; /usr/lib/libm.so.6 (0x00007f57ebbaf000)&lt;br /&gt;
   libpcre.so.1 =&amp;gt; /usr/lib/libpcre.so.1 (0x00007f57eb94c000)&lt;br /&gt;
   libssl.so.1.0.0 =&amp;gt; /usr/lib/libssl.so.1.0.0 (0x00007f57eb6e0000)&lt;br /&gt;
   libcrypto.so.1.0.0 =&amp;gt; /usr/lib/libcrypto.so.1.0.0 (0x00007f57eb2d6000)&lt;br /&gt;
   libdl.so.2 =&amp;gt; /usr/lib/libdl.so.2 (0x00007f57eb0d2000)&lt;br /&gt;
   libz.so.1 =&amp;gt; /usr/lib/libz.so.1 (0x00007f57eaebc000)&lt;br /&gt;
   libGeoIP.so.1 =&amp;gt; /usr/lib/libGeoIP.so.1 (0x00007f57eac8d000)&lt;br /&gt;
   libgcc_s.so.1 =&amp;gt; /usr/lib/libgcc_s.so.1 (0x00007f57eaa77000)&lt;br /&gt;
   libc.so.6 =&amp;gt; /usr/lib/libc.so.6 (0x00007f57ea6ca000)&lt;br /&gt;
   /lib64/ld-linux-x86-64.so.2 (0x00007f57ec604000)&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
 # cp /lib64/ld-linux-x86-64.so.2 $JAIL/lib&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/lib}} の中にあるファイルについては次のワンライナーが使えます:&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;# cp $(ldd /usr/bin/nginx | grep /usr/lib | sed -sre &#039;s/(.+)(\/usr\/lib\/\S+).+/\2/g&#039;) $JAIL/usr/lib&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|linux-vdso.so}} をコピーしないでください – 実際のライブラリではなく {{ic|/usr/lib}} には存在しません。64ビット環境の場合 {{ic|ld-linux-x86-64.so}} も {{ic|/lib64}} にあるように表示されます。}}&lt;br /&gt;
&lt;br /&gt;
必要なライブラリとシステムファイル以外のファイルをコピーします。&lt;br /&gt;
&lt;br /&gt;
{{bc|# cp /usr/lib/libnss_* $JAIL/usr/lib&lt;br /&gt;
# cp -rfvL /etc/{services,localtime,nsswitch.conf,nscd.conf,protocols,hosts,ld.so.cache,ld.so.conf,resolv.conf,host.conf,nginx} $JAIL/etc}}&lt;br /&gt;
 &lt;br /&gt;
Create restricted user/group files for the chroot. This way only the&lt;br /&gt;
users needed for the chroot to function exist as far as the chroot&lt;br /&gt;
knows, and none of the system users/groups are leaked to attackers&lt;br /&gt;
should they gain access to the chroot.&lt;br /&gt;
&lt;br /&gt;
{{hc|$JAIL/etc/group|&lt;br /&gt;
http:x:33:&lt;br /&gt;
nobody:x:99:&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|$JAIL/etc/passwd|&lt;br /&gt;
http:x:33:33:http:/:/bin/false&lt;br /&gt;
nobody:x:99:99:nobody:/:/bin/false&lt;br /&gt;
}}&lt;br /&gt;
  &lt;br /&gt;
{{hc|$JAIL/etc/shadow|&lt;br /&gt;
http:x:14871::::::&lt;br /&gt;
nobody:x:14871::::::&lt;br /&gt;
}}&lt;br /&gt;
  &lt;br /&gt;
{{hc|$JAIL/etc/gshadow|&lt;br /&gt;
http:::&lt;br /&gt;
nobody:::&lt;br /&gt;
}}&lt;br /&gt;
  &lt;br /&gt;
 # touch $JAIL/etc/shells&lt;br /&gt;
 # touch $JAIL/run/nginx.pid&lt;br /&gt;
&lt;br /&gt;
Finally make set very restrictive permissions. As much as possible&lt;br /&gt;
should be owned by root and set unwritable.&lt;br /&gt;
&lt;br /&gt;
 # chown -R root:root $JAIL/&lt;br /&gt;
  &lt;br /&gt;
 # chown -R http:http $JAIL/www&lt;br /&gt;
 # chown -R http:http $JAIL/etc/nginx&lt;br /&gt;
 # chown -R http:http $JAIL/var/{log,lib}/nginx&lt;br /&gt;
 # chown http:http $JAIL/run/nginx.pid&lt;br /&gt;
  &lt;br /&gt;
 # find $JAIL/ -gid 0 -uid 0 -type d -print | xargs sudo chmod -rw&lt;br /&gt;
 # find $JAIL/ -gid 0 -uid 0 -type d -print | xargs sudo chmod +x&lt;br /&gt;
 # find $JAIL/etc -gid 0 -uid 0 -type f -print | xargs sudo chmod -x&lt;br /&gt;
 # find $JAIL/usr/bin -type f -print | xargs sudo chmod ug+rx&lt;br /&gt;
 # find $JAIL/ -group http -user http -print | xargs sudo chmod o-rwx&lt;br /&gt;
 # chmod +rw $JAIL/tmp&lt;br /&gt;
 # chmod +rw $JAIL/run&lt;br /&gt;
&lt;br /&gt;
If your server will bind port 80 (or any port 0-1024), give the&lt;br /&gt;
chrooted executable permission to bind these ports without root.&lt;br /&gt;
&lt;br /&gt;
 # setcap &#039;cap_net_bind_service=+ep&#039; $JAIL/usr/bin/nginx&lt;br /&gt;
&lt;br /&gt;
=== nginx.service を変更して chroot を起動 ===&lt;br /&gt;
&lt;br /&gt;
Before modifying the nginx.service unit file, it may be a good idea to copy it to&lt;br /&gt;
{{ic|/etc/systemd/system/}} since the unit files there take priority over those in {{ic|/usr/lib/systemd/system/}}. &lt;br /&gt;
This means upgrading nginx would not modify your custom .service file. &lt;br /&gt;
 # cp /usr/lib/systemd/system/nginx.service /etc/systemd/system/nginx.service&lt;br /&gt;
&lt;br /&gt;
The systemd unit must be changed to start up Nginx in the chroot, as&lt;br /&gt;
the http user, and store the pid file in the chroot &lt;br /&gt;
{{Note|I&#039;m not sure if the pid file needs to be stored in the chroot jail.}}&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/nginx.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=A high performance web server and a reverse proxy server&lt;br /&gt;
 After=syslog.target network.target&lt;br /&gt;
 &lt;br /&gt;
 [Service]&lt;br /&gt;
 Type=forking&lt;br /&gt;
 PIDFile=/srv/http/run/nginx.pid&lt;br /&gt;
 ExecStartPre=/usr/bin/chroot --userspec=http:http /srv/http /usr/bin/nginx -t -q -g &#039;pid /run/nginx.pid; daemon on; master_process on;&#039;&lt;br /&gt;
 ExecStart=/usr/bin/chroot --userspec=http:http /srv/http /usr/bin/nginx -g &#039;pid /run/nginx.pid; daemon on; master_process on;&#039;&lt;br /&gt;
 ExecReload=/usr/bin/chroot --userspec=http:http /srv/http /usr/bin/nginx -g &#039;pid /run/nginx.pid; daemon on; master_process on;&#039; -s reload&lt;br /&gt;
 ExecStop=/usr/bin/chroot --userspec=http:http /srv/http /usr/bin/nginx -g &#039;pid /run/nginx.pid;&#039; -s quit&lt;br /&gt;
 &lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=multi-user.target&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Note|Upgrading nginx with pacman will not upgrade the chrooted nginx installation. You have to take care of the updates manually by repeating some of the steps above. Do not forget to also update the libraries it links against. }}&lt;br /&gt;
&lt;br /&gt;
You can now safely get rid of the non-chrooted nginx installation. &lt;br /&gt;
 # pacman -Rsc nginx&lt;br /&gt;
&lt;br /&gt;
If you do not remove the non-chrooted nginx installation, you may want to make sure that the running nginx process is in fact the chrooted one. You can do so by checking where {{ic|/proc/{PID}/root}} symmlinks to. If should link to {{ic|/srv/http}} instead of {{ic|/}}. &lt;br /&gt;
 # ps -C nginx | awk &#039;{print $1}&#039; | sed 1d | while read -r PID; do ls -l /proc/$PID/root; done&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== 設定の確認 ===&lt;br /&gt;
 # nginx -t&lt;br /&gt;
&lt;br /&gt;
結果:&lt;br /&gt;
&lt;br /&gt;
 nginx: the configuration file /etc/nginx/nginx.conf syntax is ok&lt;br /&gt;
 nginx: configuration file /etc/nginx/nginx.conf test is successful&lt;br /&gt;
&lt;br /&gt;
=== ローカル IP へのアクセスが localhost にリダイレクトされる ===&lt;br /&gt;
&lt;br /&gt;
Arch Linux [https://bbs.archlinux.org/viewtopic.php?pid=780561#p780561 フォーラム]からの解決法があります。&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/nginx/nginx.conf}} を開き、&amp;quot;server_name localhost&amp;quot; の前の # を取り除き、以下を付け加えます:&lt;br /&gt;
 server_name_in_redirect off;&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、nginx は設定にある server_name へのリクエストをすべてリダイレクトします。&lt;br /&gt;
&lt;br /&gt;
=== Error: 403 (Permission error) ===&lt;br /&gt;
&lt;br /&gt;
This is most likely a permission error. Are you sure whatever user configured in the Nginx configuration is able to read the correct files?&lt;br /&gt;
&lt;br /&gt;
If the files are located within a home directory, (e.g. {{ic|/home/arch/public/webapp}}) and you are sure the user running Nginx has the right permissions (you can temporarily chmod all the files to 777 in order to determine this), {{ic|/home/arch}} might be &#039;&#039;&#039;chmod 750&#039;&#039;&#039;, simply {{Ic|chmod}} it to &#039;&#039;751&#039;&#039;, and it should work.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If you have changed your document root&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you are sure that permissions are as they should be, make sure that your document root directory is not empty. Try creating index.html in there.&lt;br /&gt;
&lt;br /&gt;
=== Error: 404 (Pathinfo error) ===&lt;br /&gt;
&lt;br /&gt;
いくつかのフレームワーク （thinkphp、cakephp など）や CMS では pathinfo が必要です。&lt;br /&gt;
&lt;br /&gt;
1. {{ic|/etc/php/php.ini}} ファイルを開き、次のように付け加えます&lt;br /&gt;
 cgi.fix_pathinfo=1&lt;br /&gt;
2. {{ic|/etc/nginx/nginx.conf}} を開き、次の部分をコメントアウトします&lt;br /&gt;
&lt;br /&gt;
 location ~ \.php$ {&lt;br /&gt;
 ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
を&lt;br /&gt;
&lt;br /&gt;
 #location ~ \.php$ {&lt;br /&gt;
 #...&lt;br /&gt;
 #}&lt;br /&gt;
&lt;br /&gt;
そして以下を加えます&lt;br /&gt;
 location ~ ^(.+\.php)(.*)$ {&lt;br /&gt;
   root   /srv/http/nginx;&lt;br /&gt;
   fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock; 	&lt;br /&gt;
   #fastcgi_pass   127.0.0.1:9000; #Un-comment this and comment &amp;quot;fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;&amp;quot; if you are not using php-fpm.&lt;br /&gt;
   fastcgi_index  index.php;&lt;br /&gt;
   set $document_root2 $document_root;&lt;br /&gt;
   if ($document_root2 ~ &amp;quot;^(.*\\\\).*?[\\\\|\/]\.\.\/(.*)$&amp;quot;) { set $document_root2 $1$2; }&lt;br /&gt;
   if ($document_root2 ~ &amp;quot;^(.*\\\\).*?[\\\\|\/]\.\.\/(.*)$&amp;quot;) {	set $document_root2 $1$2; }&lt;br /&gt;
   if ($document_root2 ~ &amp;quot;^(.*\\\\).*?[\\\\|\/]\.\.\/(.*)$&amp;quot;) {	set $document_root2 $1$2; }&lt;br /&gt;
   if ($document_root2 ~ &amp;quot;^(.*\\\\).*?[\\\\|\/]\.\.\/(.*)$&amp;quot;) {	set $document_root2 $1$2; }&lt;br /&gt;
   if ($document_root2 ~ &amp;quot;^(.*\\\\).*?[\\\\|\/]\.\.\/(.*)$&amp;quot;) {	set $document_root2 $1$2; }&lt;br /&gt;
   fastcgi_split_path_info ^(.+\.php)(.*)$;&lt;br /&gt;
   fastcgi_param	SCRIPT_FILENAME	$document_root2$fastcgi_script_name;&lt;br /&gt;
   fastcgi_param	PATH_INFO	$fastcgi_path_info;&lt;br /&gt;
   fastcgi_param	PATH_TRANSLATED	$document_root2$fastcgi_path_info;&lt;br /&gt;
   include	fastcgi_params;&lt;br /&gt;
   fastcgi_param  DOCUMENT_ROOT      $document_root2;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
try_files を使う方法もあります:&lt;br /&gt;
 server {&lt;br /&gt;
 ..&lt;br /&gt;
    root /usr/share/nginx/html;&lt;br /&gt;
    index index.php;&lt;br /&gt;
    location / {&lt;br /&gt;
      try_files $uri $uri/ /index.php?$args;&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Error: The page you are looking for is temporarily unavailable. Please try again later. ===&lt;br /&gt;
&lt;br /&gt;
FastCGI サーバーが動作していないか、ソケットが間違ったパーミッションに設定されています。&lt;br /&gt;
&lt;br /&gt;
=== Error: No input file specified ===&lt;br /&gt;
&lt;br /&gt;
おそらくスクリプトのフルパスを含んだ SCRIPT_FILENAME がありません。&lt;br /&gt;
nginx の設定 (fastcgi_param  SCRIPT_FILENAME) が完全でも、このエラーは php が requestd スクリプトをロードできないことを意味しています。これは単純にパーミッションの問題であることが普通で、root で php-cgi を実行するか&lt;br /&gt;
 # spawn-fcgi -a 127.0.0.1 -p 9000 -f /usr/bin/php-cgi&lt;br /&gt;
php-cgi を起動するグループとユーザーを作成する必要があります。例えば:&lt;br /&gt;
 # groupadd www&lt;br /&gt;
 # useradd -g www www&lt;br /&gt;
 # chmod +w /srv/www/nginx/html&lt;br /&gt;
 # chown -R www:www /srv/www/nginx/html&lt;br /&gt;
 # spawn-fcgi -a 127.0.0.1 -p 9000 -u www -g www -f /usr/bin/php-cgi&lt;br /&gt;
&lt;br /&gt;
他の可能性としては、{{ic|nginx.conf}} 内の &amp;quot;location ~ \.php$&amp;quot; セクションの &amp;quot;root&amp;quot; 引数が間違っていることがありえます。&amp;quot;root&amp;quot; が同じサーバーの &amp;quot;location /&amp;quot; と同じディレクトリを示しているか確認してください。もしくは root をグローバルに設定するには、location セクションで定義しないでください。&lt;br /&gt;
&lt;br /&gt;
Also keep in mind that your php script path was defined as {{ic|/srv/http}} by default using the variable &amp;quot;open_basedir&amp;quot; in {{ic|/etc/php/php.ini}}; you can change them if you need.&lt;br /&gt;
&lt;br /&gt;
Also notice that not only php script should have read permission, but also the entire directory structure should have execute permission so that PHP user can traverse the path.&lt;br /&gt;
&lt;br /&gt;
=== Error: FastCGI で空のページが表示される ===&lt;br /&gt;
&lt;br /&gt;
access.log にエラーが表示されず、コード200が返されるのに以下のような空のページが表示される場合:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;html&amp;gt;&lt;br /&gt;
   &amp;lt;head&amp;gt;&amp;lt;/head&amp;gt;&lt;br /&gt;
   &amp;lt;body&amp;gt;&amp;lt;/body&amp;gt;&lt;br /&gt;
  &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://beutelevision.com/blog2/2013/08/26/nginx-with-php-fpm-generating-blank-page/ Thomas Beutel のブログ] に書かれた解決方法:&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/nginx/nginx.conf}} を編集して php の {{ic|location}} セクションに {{ic|fastcgi_param}} という行を追加:&lt;br /&gt;
&lt;br /&gt;
     location ~ \.php$ {&lt;br /&gt;
          ...&lt;br /&gt;
          include fastcgi_params;&lt;br /&gt;
          fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;&lt;br /&gt;
          ...&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
php_fpm では PHP ファイルのパスを認識するために以上のように設定する必要があります。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
* [http://nginx.org/ Nginx 公式サイト]&lt;br /&gt;
* [http://calomel.org/nginx.html Nginx HowTo]&lt;br /&gt;
* [http://wiki.gotux.net/config:nginx Easy Config Files]&lt;br /&gt;
* [http://www.tecmint.com/install-nginx-php-mysql-with-mariadb-engine-and-phpmyadmin-in-arch-linux/ Installing LEMP (Nginx, PHP, MySQL with MariaDB engine and PhpMyAdmin) in Arch Linux]&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=OpenLDAP&amp;diff=5207</id>
		<title>OpenLDAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=OpenLDAP&amp;diff=5207"/>
		<updated>2016-04-08T14:37:11Z</updated>

		<summary type="html">&lt;p&gt;Fragment: /* SSL を使うように slapd を設定 */ 署名済み証明書について追加&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ネットワーク]]&lt;br /&gt;
[[en:OpenLDAP]]&lt;br /&gt;
[[ru:OpenLDAP]]&lt;br /&gt;
[[zh-cn:OpenLDAP]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|LDAP 認証}}&lt;br /&gt;
{{Related3|LDAP Hosts|LDAP ホスト}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
OpenLDAP は LDAP プロトコルのオープンソースの実装です。LDAP サーバーは基本的に、データの書き込みではなくアクセスに最適化されたリレーショナルでないデータベースです。主として (メールクライアントなどの) アドレス帳や様々なサービス (ドメインコントローラをエミュレートするのに使われる Samba や、{{ic|/etc/passwd}} を置き換える [[LDAP 認証|Linux システム認証]]など) の認証バックエンドとして使われ、ユーザーデータを保持します。&lt;br /&gt;
&lt;br /&gt;
{{note|{{ic|ldap}} で始まる OpenLDAP のコマンド ({{ic|ldapsearch}} など) はクライアント側のユーティリティであり、{{ic|slap}} で始まるコマンド ({{ic|slapcat}} など) はサーバー側のユーティリティです。}}&lt;br /&gt;
&lt;br /&gt;
このページではその入り口として基本的な OpenLDAP をインストールしてサニティチェックを行います。&lt;br /&gt;
&lt;br /&gt;
{{Tip|ディレクトリサービスは範囲がとても広いテーマであり、設定は複雑です。初めてディレクトリサービスに接する場合は、[http://www.brennan.id.au/20-Shared_Address_Book_LDAP.html ここ] を読めば簡単に理解でき、LDAP の全てを知らなかったとしても始めることができると思います。}}&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
OpenLDAP には LDAP サーバーとクライアントの両方が含まれています。[[公式リポジトリ]]の {{Pkg|openldap}} パッケージでインストールしてください。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
=== サーバー ===&lt;br /&gt;
&lt;br /&gt;
{{Note|既にマシン上に OpenLDAP データベースが存在する場合は、{{ic|/var/lib/openldap/openldap-data/}} 内の全てのファイルを削除してください。}}&lt;br /&gt;
&lt;br /&gt;
サーバーの設定ファイルは {{ic|/etc/openldap/slapd.conf}} です。&lt;br /&gt;
&lt;br /&gt;
suffix と rootdn を編集してください。suffix は基本的にドメイン名を使いますが、そうである必要はありません。ディレクトリは使い様です。ここではドメイン名には &#039;&#039;example&#039;&#039; を、tld には &#039;&#039;com&#039;&#039; を使うこととします。rootdn は LDAP の管理者の名前です (ここでは &#039;&#039;root&#039;&#039; を使います)。&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
suffix     &amp;quot;dc=example,dc=com&amp;quot;&lt;br /&gt;
rootdn     &amp;quot;cn=root,dc=example,dc=com&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
そしてデフォルトの root パスワードを削除して強固なパスワードを作成します:&lt;br /&gt;
 # sed -i &amp;quot;/rootpw/ d&amp;quot; /etc/openldap/slapd.conf #find the line with rootpw and delete it&lt;br /&gt;
 # echo &amp;quot;rootpw    $(slappasswd)&amp;quot; &amp;gt;&amp;gt; /etc/openldap/slapd.conf  #add a line which includes the hashed password output from slappasswd&lt;br /&gt;
&lt;br /&gt;
よく使われる [http://www.openldap.org/doc/admin24/schema.html schema] を {{ic|slapd.conf}} の一番上に追加すると良いでしょう:&lt;br /&gt;
 # cp /usr/share/doc/samba/examples/LDAP/samba.schema /etc/openldap/schema&lt;br /&gt;
{{bc|&lt;br /&gt;
include         /etc/openldap/schema/cosine.schema&lt;br /&gt;
include         /etc/openldap/schema/inetorgperson.schema&lt;br /&gt;
include         /etc/openldap/schema/nis.schema&lt;br /&gt;
include         /etc/openldap/schema/samba.schema&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
よく使われる [http://www.openldap.org/doc/admin24/tuning.html#Indexes index] を {{ic|slapd.conf}} の一番下に追加すると良いでしょう:&lt;br /&gt;
{{bc|&lt;br /&gt;
index   uid             pres,eq&lt;br /&gt;
index   mail            pres,sub,eq&lt;br /&gt;
index   cn              pres,sub,eq&lt;br /&gt;
index   sn              pres,sub,eq&lt;br /&gt;
index   dc              eq&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
データベースディレクトリを準備します。デフォルトの設定ファイルをコピーして適切な所有権を設定してください:&lt;br /&gt;
 # cp /etc/openldap/DB_CONFIG.example /var/lib/openldap/openldap-data/DB_CONFIG&lt;br /&gt;
 # chown ldap:ldap /var/lib/openldap/openldap-data/DB_CONFIG&lt;br /&gt;
&lt;br /&gt;
{{Note|OpenLDAP 2.4 から {{ic|slapd.conf}} の設定は非推奨になりました。このバージョンから全ての設定は {{ic|/etc/openldap/slapd.d/}} に保存されることになっています。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|slapd.conf}} の変更を新しい {{ic|/etc/openldap/slapd.d/}} の設定に保存するには、まず古い設定ファイルを削除する必要があります。設定を変更するたびに実行してください:&lt;br /&gt;
&lt;br /&gt;
 # rm -rf /etc/openldap/slapd.d/*&lt;br /&gt;
&lt;br /&gt;
(データベースがまだない場合は、[[systemd#ユニットを使う|systemd]] を使って {{ic|slapd.service}} を起動・停止することでデータベースを作成してください。)&lt;br /&gt;
&lt;br /&gt;
次のコマンドで新しい設定を生成します:&lt;br /&gt;
&lt;br /&gt;
 # slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/&lt;br /&gt;
&lt;br /&gt;
上のコマンドは {{ic|slapd.conf}} を変更する度に実行する必要があります。全てが問題ないか確認してください。&amp;quot;bdb_monitor_db_open: monitoring disabled; configure monitor database to enable&amp;quot; というメッセージは無視してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/openldap/slapd.d}} の新しいファイルとディレクトリの所有権を再帰的に変更:&lt;br /&gt;
&lt;br /&gt;
 # chown -R ldap:ldap /etc/openldap/slapd.d&lt;br /&gt;
&lt;br /&gt;
{{note|ディレクトリを作成した後はインデックスを作成してください。インデックスは作成する前に slapd を停止する必要があります。&lt;br /&gt;
 # slapindex&lt;br /&gt;
 # chown ldap:ldap /var/lib/openldap/openldap-data/*&lt;br /&gt;
もしくは {{ic|$ sudo -u ldap slapindex}} を実行。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
最後に、systemd を使って {{ic|slapd.service}} で slapd デーモンを起動してください。&lt;br /&gt;
&lt;br /&gt;
=== クライアント ===&lt;br /&gt;
クライアントの設定ファイルは {{ic|/etc/openldap/ldap.conf}} です。&lt;br /&gt;
&lt;br /&gt;
設定はとてもシンプルです: {{ic|BASE}} をサーバーの suffix に、{{ic|URI}} をサーバーのアドレスに変更するだけです、例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/openldap/ldap.conf|2=&lt;br /&gt;
BASE            dc=example,dc=com&lt;br /&gt;
URI             ldap://localhost&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
SSL を使う場合は:&lt;br /&gt;
&lt;br /&gt;
* {{ic|URI}} エントリのプロトコル (ldap または ldaps) は slapd の設定と一致しなくてはなりません。&lt;br /&gt;
* 自己署名証明書を使う場合は、{{ic|ldap.conf}} に {{ic|TLS_REQCERT allow}} という行を追加してください。&lt;br /&gt;
&lt;br /&gt;
=== 最初のエントリを作成 ===&lt;br /&gt;
クライアントを設定したら、root の役割をするエントリである root エントリを作成することを推奨します:&lt;br /&gt;
&lt;br /&gt;
 $ ldapadd -x -D &#039;cn=root,dc=example,dc=com&#039; -W&lt;br /&gt;
 dn: dc=example,dc=com&lt;br /&gt;
 objectClass: dcObject&lt;br /&gt;
 objectClass: organization&lt;br /&gt;
 dc: example&lt;br /&gt;
 o: Example&lt;br /&gt;
 description: Example directory&lt;br /&gt;
 &lt;br /&gt;
 dn: cn=root,dc=example,dc=com&lt;br /&gt;
 objectClass: organizationalRole&lt;br /&gt;
 cn: root&lt;br /&gt;
 description: Directory Manager&lt;br /&gt;
 ^D&lt;br /&gt;
&lt;br /&gt;
最初の行の後のテキストは標準入力で入力していますが、-f オプションやファイルリダイレクトを使うことでファイルから読み込むこともできます。&lt;br /&gt;
&lt;br /&gt;
=== OpenLDAP をテストする ===&lt;br /&gt;
&lt;br /&gt;
下のコマンドを実行するだけで、簡単にテストできます:&lt;br /&gt;
 $ ldapsearch -x &#039;(objectclass=*)&#039;&lt;br /&gt;
&lt;br /&gt;
もしくは、上記の設定例を使って、rootdn で認証するには ({{ic|-x}} を {{ic|-D &amp;lt;user&amp;gt; -W}} で置き換える):&lt;br /&gt;
 $ ldapsearch -D &amp;quot;cn=root,dc=example,dc=com&amp;quot; -W &#039;(objectclass=*)&#039;&lt;br /&gt;
&lt;br /&gt;
データベースに関する情報が表示されるはずです。&lt;br /&gt;
&lt;br /&gt;
=== OpenLDAP over TLS ===&lt;br /&gt;
{{Note|[http://www.openldap.org/doc/admin24/ 上流のドキュメント] の方がこのセクションよりも情報が豊富です。}}&lt;br /&gt;
&lt;br /&gt;
ネットワークを介して OpenLDAP サーバーにアクセスする場合、特にサーバー上に極秘のデータを保存するときは、クリアテキストで送られたデータを盗聴される恐れがあります。次のパートでは LDAP サーバーとクライアントの間に SSL 接続をセットアップしてデータを暗号化して送信する方法を説明します。&lt;br /&gt;
&lt;br /&gt;
TLS を使うには、証明書が必要になります。テスト目的なら、&#039;&#039;自己署名&#039;&#039;証明書で足りるでしょう。証明書について詳しく知るには、[[OpenSSL]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|OpenLDAP はパスワードが関連付けられた証明書を使うことができません。}}&lt;br /&gt;
&lt;br /&gt;
==== 自己署名証明書の作成 ====&lt;br /&gt;
&#039;&#039;自己署名&#039;&#039;証明書を作成するには、次を入力:&lt;br /&gt;
 $ openssl req -new -x509 -nodes -out slapdcert.pem -keyout slapdkey.pem -days 365&lt;br /&gt;
&lt;br /&gt;
LDAP サーバーに関する情報の入力が求められます。ほとんどの情報は空のままでも大丈夫です。一番重要な情報はコモンネームです。コモンネームは LDAP サーバーの DNS 名に設定してください。LDAP サーバーの IP アドレスが example.org で解決できてもサーバーの証明書の CN が bad.example.org の場合、LDAP クライアントは証明書を拒否してしまうため TLS 接続をネゴシエートできなくなります (全く予期できない結果になります)。&lt;br /&gt;
&lt;br /&gt;
それから、作成された証明書ファイルを {{ic|/etc/openldap/ssl/}} (ディレクトリが存在しない場合は作成してください) にコピーしてパーミッションを設定します。{{ic|slapdcert.pem}} は公開鍵なので誰からでも読み込めるようにしてください。逆に {{ic|slapdkey.pem}} は ldap ユーザーだけが読み込めるようにしてください:&lt;br /&gt;
 # mv slapdcert.pem slapdkey.pem /etc/openldap/ssl/&lt;br /&gt;
 # chmod -R 755 /etc/openldap/ssl/&lt;br /&gt;
 # chmod 400 /etc/openldap/ssl/slapdkey.pem&lt;br /&gt;
 # chmod 444 /etc/openldap/ssl/slapdcert.pem&lt;br /&gt;
 # chown ldap /etc/openldap/ssl/slapdkey.pem&lt;br /&gt;
&lt;br /&gt;
==== SSL を使うように slapd を設定 ====&lt;br /&gt;
デーモンの設定ファイル ({{ic|/etc/openldap/slapd.conf}}) を編集して以下の行を追加することで LDAP に証明書ファイルの場所を指定してください:&lt;br /&gt;
{{bc|&lt;br /&gt;
# Certificate/SSL Section&lt;br /&gt;
TLSCipherSuite DEFAULT&lt;br /&gt;
TLSCertificateFile /etc/openldap/ssl/slapdcert.pem&lt;br /&gt;
TLSCertificateKeyFile /etc/openldap/ssl/slapdkey.pem&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Let’s Encrypt]] のような認証局により署名されたSSL証明書を用いる場合、ルート証明書データベースと中間証明書のパスを指定する必要があります。また、ユーザー {{ic|ldap}} が読み込めるように {{ic|.pem}} ファイルと途中のディレクトリの所有者情報を変更する必要もあるでしょう。:&lt;br /&gt;
{{bc|&lt;br /&gt;
# Certificate/SSL Section&lt;br /&gt;
TLSCipherSuite DEFAULT&lt;br /&gt;
TLSCertificateFile /etc/letsencrypt/live/ldap.my-domain.com/cert.pem&lt;br /&gt;
TLSCertificateKeyFile /etc/letsencrypt/live/ldap.my-domain.com/privkey.pem&lt;br /&gt;
TLSCACertificateFile /etc/letsencrypt/live/ldap.my-domain.com/chain.pem&lt;br /&gt;
TLSCACertificatePath /usr/share/ca-certificates/trust-source&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
TLSCipherSuite は slapd が TLS 接続をネゴシエートするときに使用する OpenSSL の暗号方式のリストを指定します。優先度が高い順です。特定の暗号を指定するかわりに、OpenSSL によってサポートされているワイルドカードを使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* DEFAULT はワイルドカードです。サポートされている暗号方式やワイルドカード、オプションについては {{ic|man ciphers}} の説明を読んでください。&lt;br /&gt;
* ローカルの OpenSSL によってサポートされている暗号を確認するには、次を実行: {{ic|openssl ciphers -v ALL:COMPLEMENTOFALL}}。OpenSSL コマンドを使えば実際に TLSCipherSuite によって有効になる暗号は何なのかテストできます: {{ic|openssl ciphers -v &#039;DEFAULT&#039;}}。}}&lt;br /&gt;
&lt;br /&gt;
設定ディレクトリを再生成:&lt;br /&gt;
 # rm -rf /etc/openldap/slapd.d/*                                  # erase old config settings&lt;br /&gt;
 # slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/  # generate new config directory from config file&lt;br /&gt;
 # chown -R ldap:ldap /etc/openldap/slapd.d                        # Change ownership recursively to ldap on the config directory&lt;br /&gt;
&lt;br /&gt;
==== SSL で slapd を起動 ====&lt;br /&gt;
{{ic|slapd.service}} を編集して slapd が使用するプロトコルを変更してください。&lt;br /&gt;
&lt;br /&gt;
上書きユニットを作成:&lt;br /&gt;
{{hc|systemctl edit slapd.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
ExecStart=&lt;br /&gt;
ExecStart=/usr/bin/slapd -u ldap -g ldap -h &amp;quot;ldaps:///&amp;quot;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
ローカルホスト接続は SSL を使う必要がありません。ローカルのサーバーにアクセスしたいときは {{ic|ExecStart}} 行を以下のように変更してください:&lt;br /&gt;
 ExecStart=/usr/bin/slapd -u ldap -g ldap -h &amp;quot;ldap://127.0.0.1 ldaps:///&amp;quot;&lt;br /&gt;
&lt;br /&gt;
そして {{ic|slapd.service}} を[[再起動]]してください。サービスを有効にしていた場合は、再有効化もしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|上で書かれているように自己署名証明書を作成した場合は、{{ic|TLS_REQCERT allow}} をクライアント側の {{ic|/etc/openldap/ldap.conf}} に追加しないとサーバーに接続することができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
== 次のステップ ==&lt;br /&gt;
&lt;br /&gt;
これで基本的な LDAP のインストールは完了です。次はディレクトリを自分で設計してください。LDAP を何のために使うのかによって大きく変わってきます。LDAP を初めて使う場合は、まずはディレクトリを使用するクライアントサービス (PAM や [[Postfix]] など) によって推奨されている設定から始めると良いでしょう。&lt;br /&gt;
&lt;br /&gt;
システム認証の方法は [[LDAP 認証]]の記事に書かれています。&lt;br /&gt;
&lt;br /&gt;
LDAP のフロントエンドとして [[phpLDAPadmin]] も存在します。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== Client Authentication Checking ===&lt;br /&gt;
セキュアでない認証でサーバーに接続できない場合:&lt;br /&gt;
&lt;br /&gt;
 $ ldapsearch -x -H ldap://ldaservername:389 -D cn=Manager,dc=example,dc=exampledomain&lt;br /&gt;
&lt;br /&gt;
TLS によって暗号化された認証で接続をする場合:&lt;br /&gt;
&lt;br /&gt;
 $ ldapsearch -x -H ldaps://ldaservername:636 -D cn=Manager,dc=example,dc=exampledomain&lt;br /&gt;
&lt;br /&gt;
=== LDAP サーバーが突然停止する ===&lt;br /&gt;
&lt;br /&gt;
slapd を起動しても停止してしまう場合、以下を実行して &amp;quot;ldap&amp;quot; ユーザーからデータディレクトリに書き込むことができるようにしてみてください:&lt;br /&gt;
&lt;br /&gt;
 # chown ldap:ldap /var/lib/openldap/openldap-data/*&lt;br /&gt;
&lt;br /&gt;
=== LDAP サーバーを起動できない ===&lt;br /&gt;
&lt;br /&gt;
コマンドラインからデバッグ出力を有効にしてLDAPサーバーを起動してみてください:&lt;br /&gt;
&lt;br /&gt;
 # slapd -u ldap -g ldap -h ldaps://ldaservername:636 -d Config,Stats&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
* [http://www.openldap.org/doc/admin24/ Official OpenLDAP Software 2.4 Administrator&#039;s Guide]&lt;br /&gt;
* [[phpLDAPadmin]] phpMyAdmin 風のウェブインターフェイスツール&lt;br /&gt;
* {{AUR|apachedirectorystudio}} Eclipse ベースの LDAP ビューア ([[AUR]])。OpenLDAP でも問題なく動作します&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=OpenLDAP&amp;diff=5206</id>
		<title>OpenLDAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=OpenLDAP&amp;diff=5206"/>
		<updated>2016-04-08T14:34:36Z</updated>

		<summary type="html">&lt;p&gt;Fragment: /* トラブルシューティング */ 項目の追加&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ネットワーク]]&lt;br /&gt;
[[en:OpenLDAP]]&lt;br /&gt;
[[ru:OpenLDAP]]&lt;br /&gt;
[[zh-cn:OpenLDAP]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|LDAP 認証}}&lt;br /&gt;
{{Related3|LDAP Hosts|LDAP ホスト}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
OpenLDAP は LDAP プロトコルのオープンソースの実装です。LDAP サーバーは基本的に、データの書き込みではなくアクセスに最適化されたリレーショナルでないデータベースです。主として (メールクライアントなどの) アドレス帳や様々なサービス (ドメインコントローラをエミュレートするのに使われる Samba や、{{ic|/etc/passwd}} を置き換える [[LDAP 認証|Linux システム認証]]など) の認証バックエンドとして使われ、ユーザーデータを保持します。&lt;br /&gt;
&lt;br /&gt;
{{note|{{ic|ldap}} で始まる OpenLDAP のコマンド ({{ic|ldapsearch}} など) はクライアント側のユーティリティであり、{{ic|slap}} で始まるコマンド ({{ic|slapcat}} など) はサーバー側のユーティリティです。}}&lt;br /&gt;
&lt;br /&gt;
このページではその入り口として基本的な OpenLDAP をインストールしてサニティチェックを行います。&lt;br /&gt;
&lt;br /&gt;
{{Tip|ディレクトリサービスは範囲がとても広いテーマであり、設定は複雑です。初めてディレクトリサービスに接する場合は、[http://www.brennan.id.au/20-Shared_Address_Book_LDAP.html ここ] を読めば簡単に理解でき、LDAP の全てを知らなかったとしても始めることができると思います。}}&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
OpenLDAP には LDAP サーバーとクライアントの両方が含まれています。[[公式リポジトリ]]の {{Pkg|openldap}} パッケージでインストールしてください。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
=== サーバー ===&lt;br /&gt;
&lt;br /&gt;
{{Note|既にマシン上に OpenLDAP データベースが存在する場合は、{{ic|/var/lib/openldap/openldap-data/}} 内の全てのファイルを削除してください。}}&lt;br /&gt;
&lt;br /&gt;
サーバーの設定ファイルは {{ic|/etc/openldap/slapd.conf}} です。&lt;br /&gt;
&lt;br /&gt;
suffix と rootdn を編集してください。suffix は基本的にドメイン名を使いますが、そうである必要はありません。ディレクトリは使い様です。ここではドメイン名には &#039;&#039;example&#039;&#039; を、tld には &#039;&#039;com&#039;&#039; を使うこととします。rootdn は LDAP の管理者の名前です (ここでは &#039;&#039;root&#039;&#039; を使います)。&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
suffix     &amp;quot;dc=example,dc=com&amp;quot;&lt;br /&gt;
rootdn     &amp;quot;cn=root,dc=example,dc=com&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
そしてデフォルトの root パスワードを削除して強固なパスワードを作成します:&lt;br /&gt;
 # sed -i &amp;quot;/rootpw/ d&amp;quot; /etc/openldap/slapd.conf #find the line with rootpw and delete it&lt;br /&gt;
 # echo &amp;quot;rootpw    $(slappasswd)&amp;quot; &amp;gt;&amp;gt; /etc/openldap/slapd.conf  #add a line which includes the hashed password output from slappasswd&lt;br /&gt;
&lt;br /&gt;
よく使われる [http://www.openldap.org/doc/admin24/schema.html schema] を {{ic|slapd.conf}} の一番上に追加すると良いでしょう:&lt;br /&gt;
 # cp /usr/share/doc/samba/examples/LDAP/samba.schema /etc/openldap/schema&lt;br /&gt;
{{bc|&lt;br /&gt;
include         /etc/openldap/schema/cosine.schema&lt;br /&gt;
include         /etc/openldap/schema/inetorgperson.schema&lt;br /&gt;
include         /etc/openldap/schema/nis.schema&lt;br /&gt;
include         /etc/openldap/schema/samba.schema&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
よく使われる [http://www.openldap.org/doc/admin24/tuning.html#Indexes index] を {{ic|slapd.conf}} の一番下に追加すると良いでしょう:&lt;br /&gt;
{{bc|&lt;br /&gt;
index   uid             pres,eq&lt;br /&gt;
index   mail            pres,sub,eq&lt;br /&gt;
index   cn              pres,sub,eq&lt;br /&gt;
index   sn              pres,sub,eq&lt;br /&gt;
index   dc              eq&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
データベースディレクトリを準備します。デフォルトの設定ファイルをコピーして適切な所有権を設定してください:&lt;br /&gt;
 # cp /etc/openldap/DB_CONFIG.example /var/lib/openldap/openldap-data/DB_CONFIG&lt;br /&gt;
 # chown ldap:ldap /var/lib/openldap/openldap-data/DB_CONFIG&lt;br /&gt;
&lt;br /&gt;
{{Note|OpenLDAP 2.4 から {{ic|slapd.conf}} の設定は非推奨になりました。このバージョンから全ての設定は {{ic|/etc/openldap/slapd.d/}} に保存されることになっています。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|slapd.conf}} の変更を新しい {{ic|/etc/openldap/slapd.d/}} の設定に保存するには、まず古い設定ファイルを削除する必要があります。設定を変更するたびに実行してください:&lt;br /&gt;
&lt;br /&gt;
 # rm -rf /etc/openldap/slapd.d/*&lt;br /&gt;
&lt;br /&gt;
(データベースがまだない場合は、[[systemd#ユニットを使う|systemd]] を使って {{ic|slapd.service}} を起動・停止することでデータベースを作成してください。)&lt;br /&gt;
&lt;br /&gt;
次のコマンドで新しい設定を生成します:&lt;br /&gt;
&lt;br /&gt;
 # slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/&lt;br /&gt;
&lt;br /&gt;
上のコマンドは {{ic|slapd.conf}} を変更する度に実行する必要があります。全てが問題ないか確認してください。&amp;quot;bdb_monitor_db_open: monitoring disabled; configure monitor database to enable&amp;quot; というメッセージは無視してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/openldap/slapd.d}} の新しいファイルとディレクトリの所有権を再帰的に変更:&lt;br /&gt;
&lt;br /&gt;
 # chown -R ldap:ldap /etc/openldap/slapd.d&lt;br /&gt;
&lt;br /&gt;
{{note|ディレクトリを作成した後はインデックスを作成してください。インデックスは作成する前に slapd を停止する必要があります。&lt;br /&gt;
 # slapindex&lt;br /&gt;
 # chown ldap:ldap /var/lib/openldap/openldap-data/*&lt;br /&gt;
もしくは {{ic|$ sudo -u ldap slapindex}} を実行。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
最後に、systemd を使って {{ic|slapd.service}} で slapd デーモンを起動してください。&lt;br /&gt;
&lt;br /&gt;
=== クライアント ===&lt;br /&gt;
クライアントの設定ファイルは {{ic|/etc/openldap/ldap.conf}} です。&lt;br /&gt;
&lt;br /&gt;
設定はとてもシンプルです: {{ic|BASE}} をサーバーの suffix に、{{ic|URI}} をサーバーのアドレスに変更するだけです、例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/openldap/ldap.conf|2=&lt;br /&gt;
BASE            dc=example,dc=com&lt;br /&gt;
URI             ldap://localhost&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
SSL を使う場合は:&lt;br /&gt;
&lt;br /&gt;
* {{ic|URI}} エントリのプロトコル (ldap または ldaps) は slapd の設定と一致しなくてはなりません。&lt;br /&gt;
* 自己署名証明書を使う場合は、{{ic|ldap.conf}} に {{ic|TLS_REQCERT allow}} という行を追加してください。&lt;br /&gt;
&lt;br /&gt;
=== 最初のエントリを作成 ===&lt;br /&gt;
クライアントを設定したら、root の役割をするエントリである root エントリを作成することを推奨します:&lt;br /&gt;
&lt;br /&gt;
 $ ldapadd -x -D &#039;cn=root,dc=example,dc=com&#039; -W&lt;br /&gt;
 dn: dc=example,dc=com&lt;br /&gt;
 objectClass: dcObject&lt;br /&gt;
 objectClass: organization&lt;br /&gt;
 dc: example&lt;br /&gt;
 o: Example&lt;br /&gt;
 description: Example directory&lt;br /&gt;
 &lt;br /&gt;
 dn: cn=root,dc=example,dc=com&lt;br /&gt;
 objectClass: organizationalRole&lt;br /&gt;
 cn: root&lt;br /&gt;
 description: Directory Manager&lt;br /&gt;
 ^D&lt;br /&gt;
&lt;br /&gt;
最初の行の後のテキストは標準入力で入力していますが、-f オプションやファイルリダイレクトを使うことでファイルから読み込むこともできます。&lt;br /&gt;
&lt;br /&gt;
=== OpenLDAP をテストする ===&lt;br /&gt;
&lt;br /&gt;
下のコマンドを実行するだけで、簡単にテストできます:&lt;br /&gt;
 $ ldapsearch -x &#039;(objectclass=*)&#039;&lt;br /&gt;
&lt;br /&gt;
もしくは、上記の設定例を使って、rootdn で認証するには ({{ic|-x}} を {{ic|-D &amp;lt;user&amp;gt; -W}} で置き換える):&lt;br /&gt;
 $ ldapsearch -D &amp;quot;cn=root,dc=example,dc=com&amp;quot; -W &#039;(objectclass=*)&#039;&lt;br /&gt;
&lt;br /&gt;
データベースに関する情報が表示されるはずです。&lt;br /&gt;
&lt;br /&gt;
=== OpenLDAP over TLS ===&lt;br /&gt;
{{Note|[http://www.openldap.org/doc/admin24/ 上流のドキュメント] の方がこのセクションよりも情報が豊富です。}}&lt;br /&gt;
&lt;br /&gt;
ネットワークを介して OpenLDAP サーバーにアクセスする場合、特にサーバー上に極秘のデータを保存するときは、クリアテキストで送られたデータを盗聴される恐れがあります。次のパートでは LDAP サーバーとクライアントの間に SSL 接続をセットアップしてデータを暗号化して送信する方法を説明します。&lt;br /&gt;
&lt;br /&gt;
TLS を使うには、証明書が必要になります。テスト目的なら、&#039;&#039;自己署名&#039;&#039;証明書で足りるでしょう。証明書について詳しく知るには、[[OpenSSL]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|OpenLDAP はパスワードが関連付けられた証明書を使うことができません。}}&lt;br /&gt;
&lt;br /&gt;
==== 自己署名証明書の作成 ====&lt;br /&gt;
&#039;&#039;自己署名&#039;&#039;証明書を作成するには、次を入力:&lt;br /&gt;
 $ openssl req -new -x509 -nodes -out slapdcert.pem -keyout slapdkey.pem -days 365&lt;br /&gt;
&lt;br /&gt;
LDAP サーバーに関する情報の入力が求められます。ほとんどの情報は空のままでも大丈夫です。一番重要な情報はコモンネームです。コモンネームは LDAP サーバーの DNS 名に設定してください。LDAP サーバーの IP アドレスが example.org で解決できてもサーバーの証明書の CN が bad.example.org の場合、LDAP クライアントは証明書を拒否してしまうため TLS 接続をネゴシエートできなくなります (全く予期できない結果になります)。&lt;br /&gt;
&lt;br /&gt;
それから、作成された証明書ファイルを {{ic|/etc/openldap/ssl/}} (ディレクトリが存在しない場合は作成してください) にコピーしてパーミッションを設定します。{{ic|slapdcert.pem}} は公開鍵なので誰からでも読み込めるようにしてください。逆に {{ic|slapdkey.pem}} は ldap ユーザーだけが読み込めるようにしてください:&lt;br /&gt;
 # mv slapdcert.pem slapdkey.pem /etc/openldap/ssl/&lt;br /&gt;
 # chmod -R 755 /etc/openldap/ssl/&lt;br /&gt;
 # chmod 400 /etc/openldap/ssl/slapdkey.pem&lt;br /&gt;
 # chmod 444 /etc/openldap/ssl/slapdcert.pem&lt;br /&gt;
 # chown ldap /etc/openldap/ssl/slapdkey.pem&lt;br /&gt;
&lt;br /&gt;
==== SSL を使うように slapd を設定 ====&lt;br /&gt;
デーモンの設定ファイル ({{ic|/etc/openldap/slapd.conf}}) を編集して以下の行を追加することで LDAP に証明書ファイルの場所を指定してください:&lt;br /&gt;
{{bc|&lt;br /&gt;
# Certificate/SSL Section&lt;br /&gt;
TLSCipherSuite DEFAULT&lt;br /&gt;
TLSCertificateFile /etc/openldap/ssl/slapdcert.pem&lt;br /&gt;
TLSCertificateKeyFile /etc/openldap/ssl/slapdkey.pem&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
TLSCipherSuite は slapd が TLS 接続をネゴシエートするときに使用する OpenSSL の暗号方式のリストを指定します。優先度が高い順です。特定の暗号を指定するかわりに、OpenSSL によってサポートされているワイルドカードを使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* DEFAULT はワイルドカードです。サポートされている暗号方式やワイルドカード、オプションについては {{ic|man ciphers}} の説明を読んでください。&lt;br /&gt;
* ローカルの OpenSSL によってサポートされている暗号を確認するには、次を実行: {{ic|openssl ciphers -v ALL:COMPLEMENTOFALL}}。OpenSSL コマンドを使えば実際に TLSCipherSuite によって有効になる暗号は何なのかテストできます: {{ic|openssl ciphers -v &#039;DEFAULT&#039;}}。}}&lt;br /&gt;
&lt;br /&gt;
設定ディレクトリを再生成:&lt;br /&gt;
 # rm -rf /etc/openldap/slapd.d/*                                  # erase old config settings&lt;br /&gt;
 # slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/  # generate new config directory from config file&lt;br /&gt;
 # chown -R ldap:ldap /etc/openldap/slapd.d                        # Change ownership recursively to ldap on the config directory&lt;br /&gt;
&lt;br /&gt;
==== SSL で slapd を起動 ====&lt;br /&gt;
{{ic|slapd.service}} を編集して slapd が使用するプロトコルを変更してください。&lt;br /&gt;
&lt;br /&gt;
上書きユニットを作成:&lt;br /&gt;
{{hc|systemctl edit slapd.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
ExecStart=&lt;br /&gt;
ExecStart=/usr/bin/slapd -u ldap -g ldap -h &amp;quot;ldaps:///&amp;quot;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
ローカルホスト接続は SSL を使う必要がありません。ローカルのサーバーにアクセスしたいときは {{ic|ExecStart}} 行を以下のように変更してください:&lt;br /&gt;
 ExecStart=/usr/bin/slapd -u ldap -g ldap -h &amp;quot;ldap://127.0.0.1 ldaps:///&amp;quot;&lt;br /&gt;
&lt;br /&gt;
そして {{ic|slapd.service}} を[[再起動]]してください。サービスを有効にしていた場合は、再有効化もしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|上で書かれているように自己署名証明書を作成した場合は、{{ic|TLS_REQCERT allow}} をクライアント側の {{ic|/etc/openldap/ldap.conf}} に追加しないとサーバーに接続することができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
== 次のステップ ==&lt;br /&gt;
&lt;br /&gt;
これで基本的な LDAP のインストールは完了です。次はディレクトリを自分で設計してください。LDAP を何のために使うのかによって大きく変わってきます。LDAP を初めて使う場合は、まずはディレクトリを使用するクライアントサービス (PAM や [[Postfix]] など) によって推奨されている設定から始めると良いでしょう。&lt;br /&gt;
&lt;br /&gt;
システム認証の方法は [[LDAP 認証]]の記事に書かれています。&lt;br /&gt;
&lt;br /&gt;
LDAP のフロントエンドとして [[phpLDAPadmin]] も存在します。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== Client Authentication Checking ===&lt;br /&gt;
セキュアでない認証でサーバーに接続できない場合:&lt;br /&gt;
&lt;br /&gt;
 $ ldapsearch -x -H ldap://ldaservername:389 -D cn=Manager,dc=example,dc=exampledomain&lt;br /&gt;
&lt;br /&gt;
TLS によって暗号化された認証で接続をする場合:&lt;br /&gt;
&lt;br /&gt;
 $ ldapsearch -x -H ldaps://ldaservername:636 -D cn=Manager,dc=example,dc=exampledomain&lt;br /&gt;
&lt;br /&gt;
=== LDAP サーバーが突然停止する ===&lt;br /&gt;
&lt;br /&gt;
slapd を起動しても停止してしまう場合、以下を実行して &amp;quot;ldap&amp;quot; ユーザーからデータディレクトリに書き込むことができるようにしてみてください:&lt;br /&gt;
&lt;br /&gt;
 # chown ldap:ldap /var/lib/openldap/openldap-data/*&lt;br /&gt;
&lt;br /&gt;
=== LDAP サーバーを起動できない ===&lt;br /&gt;
&lt;br /&gt;
コマンドラインからデバッグ出力を有効にしてLDAPサーバーを起動してみてください:&lt;br /&gt;
&lt;br /&gt;
 # slapd -u ldap -g ldap -h ldaps://ldaservername:636 -d Config,Stats&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
* [http://www.openldap.org/doc/admin24/ Official OpenLDAP Software 2.4 Administrator&#039;s Guide]&lt;br /&gt;
* [[phpLDAPadmin]] phpMyAdmin 風のウェブインターフェイスツール&lt;br /&gt;
* {{AUR|apachedirectorystudio}} Eclipse ベースの LDAP ビューア ([[AUR]])。OpenLDAP でも問題なく動作します&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=OpenLDAP&amp;diff=5205</id>
		<title>OpenLDAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=OpenLDAP&amp;diff=5205"/>
		<updated>2016-04-08T14:31:43Z</updated>

		<summary type="html">&lt;p&gt;Fragment: 複数箇所の編集&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ネットワーク]]&lt;br /&gt;
[[en:OpenLDAP]]&lt;br /&gt;
[[ru:OpenLDAP]]&lt;br /&gt;
[[zh-cn:OpenLDAP]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|LDAP 認証}}&lt;br /&gt;
{{Related3|LDAP Hosts|LDAP ホスト}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
OpenLDAP は LDAP プロトコルのオープンソースの実装です。LDAP サーバーは基本的に、データの書き込みではなくアクセスに最適化されたリレーショナルでないデータベースです。主として (メールクライアントなどの) アドレス帳や様々なサービス (ドメインコントローラをエミュレートするのに使われる Samba や、{{ic|/etc/passwd}} を置き換える [[LDAP 認証|Linux システム認証]]など) の認証バックエンドとして使われ、ユーザーデータを保持します。&lt;br /&gt;
&lt;br /&gt;
{{note|{{ic|ldap}} で始まる OpenLDAP のコマンド ({{ic|ldapsearch}} など) はクライアント側のユーティリティであり、{{ic|slap}} で始まるコマンド ({{ic|slapcat}} など) はサーバー側のユーティリティです。}}&lt;br /&gt;
&lt;br /&gt;
このページではその入り口として基本的な OpenLDAP をインストールしてサニティチェックを行います。&lt;br /&gt;
&lt;br /&gt;
{{Tip|ディレクトリサービスは範囲がとても広いテーマであり、設定は複雑です。初めてディレクトリサービスに接する場合は、[http://www.brennan.id.au/20-Shared_Address_Book_LDAP.html ここ] を読めば簡単に理解でき、LDAP の全てを知らなかったとしても始めることができると思います。}}&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
OpenLDAP には LDAP サーバーとクライアントの両方が含まれています。[[公式リポジトリ]]の {{Pkg|openldap}} パッケージでインストールしてください。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
=== サーバー ===&lt;br /&gt;
&lt;br /&gt;
{{Note|既にマシン上に OpenLDAP データベースが存在する場合は、{{ic|/var/lib/openldap/openldap-data/}} 内の全てのファイルを削除してください。}}&lt;br /&gt;
&lt;br /&gt;
サーバーの設定ファイルは {{ic|/etc/openldap/slapd.conf}} です。&lt;br /&gt;
&lt;br /&gt;
suffix と rootdn を編集してください。suffix は基本的にドメイン名を使いますが、そうである必要はありません。ディレクトリは使い様です。ここではドメイン名には &#039;&#039;example&#039;&#039; を、tld には &#039;&#039;com&#039;&#039; を使うこととします。rootdn は LDAP の管理者の名前です (ここでは &#039;&#039;root&#039;&#039; を使います)。&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
suffix     &amp;quot;dc=example,dc=com&amp;quot;&lt;br /&gt;
rootdn     &amp;quot;cn=root,dc=example,dc=com&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
そしてデフォルトの root パスワードを削除して強固なパスワードを作成します:&lt;br /&gt;
 # sed -i &amp;quot;/rootpw/ d&amp;quot; /etc/openldap/slapd.conf #find the line with rootpw and delete it&lt;br /&gt;
 # echo &amp;quot;rootpw    $(slappasswd)&amp;quot; &amp;gt;&amp;gt; /etc/openldap/slapd.conf  #add a line which includes the hashed password output from slappasswd&lt;br /&gt;
&lt;br /&gt;
よく使われる [http://www.openldap.org/doc/admin24/schema.html schema] を {{ic|slapd.conf}} の一番上に追加すると良いでしょう:&lt;br /&gt;
 # cp /usr/share/doc/samba/examples/LDAP/samba.schema /etc/openldap/schema&lt;br /&gt;
{{bc|&lt;br /&gt;
include         /etc/openldap/schema/cosine.schema&lt;br /&gt;
include         /etc/openldap/schema/inetorgperson.schema&lt;br /&gt;
include         /etc/openldap/schema/nis.schema&lt;br /&gt;
include         /etc/openldap/schema/samba.schema&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
よく使われる [http://www.openldap.org/doc/admin24/tuning.html#Indexes index] を {{ic|slapd.conf}} の一番下に追加すると良いでしょう:&lt;br /&gt;
{{bc|&lt;br /&gt;
index   uid             pres,eq&lt;br /&gt;
index   mail            pres,sub,eq&lt;br /&gt;
index   cn              pres,sub,eq&lt;br /&gt;
index   sn              pres,sub,eq&lt;br /&gt;
index   dc              eq&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
データベースディレクトリを準備します。デフォルトの設定ファイルをコピーして適切な所有権を設定してください:&lt;br /&gt;
 # cp /etc/openldap/DB_CONFIG.example /var/lib/openldap/openldap-data/DB_CONFIG&lt;br /&gt;
 # chown ldap:ldap /var/lib/openldap/openldap-data/DB_CONFIG&lt;br /&gt;
&lt;br /&gt;
{{Note|OpenLDAP 2.4 から {{ic|slapd.conf}} の設定は非推奨になりました。このバージョンから全ての設定は {{ic|/etc/openldap/slapd.d/}} に保存されることになっています。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|slapd.conf}} の変更を新しい {{ic|/etc/openldap/slapd.d/}} の設定に保存するには、まず古い設定ファイルを削除する必要があります。設定を変更するたびに実行してください:&lt;br /&gt;
&lt;br /&gt;
 # rm -rf /etc/openldap/slapd.d/*&lt;br /&gt;
&lt;br /&gt;
(データベースがまだない場合は、[[systemd#ユニットを使う|systemd]] を使って {{ic|slapd.service}} を起動・停止することでデータベースを作成してください。)&lt;br /&gt;
&lt;br /&gt;
次のコマンドで新しい設定を生成します:&lt;br /&gt;
&lt;br /&gt;
 # slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/&lt;br /&gt;
&lt;br /&gt;
上のコマンドは {{ic|slapd.conf}} を変更する度に実行する必要があります。全てが問題ないか確認してください。&amp;quot;bdb_monitor_db_open: monitoring disabled; configure monitor database to enable&amp;quot; というメッセージは無視してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/openldap/slapd.d}} の新しいファイルとディレクトリの所有権を再帰的に変更:&lt;br /&gt;
&lt;br /&gt;
 # chown -R ldap:ldap /etc/openldap/slapd.d&lt;br /&gt;
&lt;br /&gt;
{{note|ディレクトリを作成した後はインデックスを作成してください。インデックスは作成する前に slapd を停止する必要があります。&lt;br /&gt;
 # slapindex&lt;br /&gt;
 # chown ldap:ldap /var/lib/openldap/openldap-data/*&lt;br /&gt;
もしくは {{ic|$ sudo -u ldap slapindex}} を実行。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
最後に、systemd を使って {{ic|slapd.service}} で slapd デーモンを起動してください。&lt;br /&gt;
&lt;br /&gt;
=== クライアント ===&lt;br /&gt;
クライアントの設定ファイルは {{ic|/etc/openldap/ldap.conf}} です。&lt;br /&gt;
&lt;br /&gt;
設定はとてもシンプルです: {{ic|BASE}} をサーバーの suffix に、{{ic|URI}} をサーバーのアドレスに変更するだけです、例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/openldap/ldap.conf|2=&lt;br /&gt;
BASE            dc=example,dc=com&lt;br /&gt;
URI             ldap://localhost&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
SSL を使う場合は:&lt;br /&gt;
&lt;br /&gt;
* {{ic|URI}} エントリのプロトコル (ldap または ldaps) は slapd の設定と一致しなくてはなりません。&lt;br /&gt;
* 自己署名証明書を使う場合は、{{ic|ldap.conf}} に {{ic|TLS_REQCERT allow}} という行を追加してください。&lt;br /&gt;
&lt;br /&gt;
=== 最初のエントリを作成 ===&lt;br /&gt;
クライアントを設定したら、root の役割をするエントリである root エントリを作成することを推奨します:&lt;br /&gt;
&lt;br /&gt;
 $ ldapadd -x -D &#039;cn=root,dc=example,dc=com&#039; -W&lt;br /&gt;
 dn: dc=example,dc=com&lt;br /&gt;
 objectClass: dcObject&lt;br /&gt;
 objectClass: organization&lt;br /&gt;
 dc: example&lt;br /&gt;
 o: Example&lt;br /&gt;
 description: Example directory&lt;br /&gt;
 &lt;br /&gt;
 dn: cn=root,dc=example,dc=com&lt;br /&gt;
 objectClass: organizationalRole&lt;br /&gt;
 cn: root&lt;br /&gt;
 description: Directory Manager&lt;br /&gt;
 ^D&lt;br /&gt;
&lt;br /&gt;
最初の行の後のテキストは標準入力で入力していますが、-f オプションやファイルリダイレクトを使うことでファイルから読み込むこともできます。&lt;br /&gt;
&lt;br /&gt;
=== OpenLDAP をテストする ===&lt;br /&gt;
&lt;br /&gt;
下のコマンドを実行するだけで、簡単にテストできます:&lt;br /&gt;
 $ ldapsearch -x &#039;(objectclass=*)&#039;&lt;br /&gt;
&lt;br /&gt;
もしくは、上記の設定例を使って、rootdn で認証するには ({{ic|-x}} を {{ic|-D &amp;lt;user&amp;gt; -W}} で置き換える):&lt;br /&gt;
 $ ldapsearch -D &amp;quot;cn=root,dc=example,dc=com&amp;quot; -W &#039;(objectclass=*)&#039;&lt;br /&gt;
&lt;br /&gt;
データベースに関する情報が表示されるはずです。&lt;br /&gt;
&lt;br /&gt;
=== OpenLDAP over TLS ===&lt;br /&gt;
{{Note|[http://www.openldap.org/doc/admin24/ 上流のドキュメント] の方がこのセクションよりも情報が豊富です。}}&lt;br /&gt;
&lt;br /&gt;
ネットワークを介して OpenLDAP サーバーにアクセスする場合、特にサーバー上に極秘のデータを保存するときは、クリアテキストで送られたデータを盗聴される恐れがあります。次のパートでは LDAP サーバーとクライアントの間に SSL 接続をセットアップしてデータを暗号化して送信する方法を説明します。&lt;br /&gt;
&lt;br /&gt;
TLS を使うには、証明書が必要になります。テスト目的なら、&#039;&#039;自己署名&#039;&#039;証明書で足りるでしょう。証明書について詳しく知るには、[[OpenSSL]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|OpenLDAP はパスワードが関連付けられた証明書を使うことができません。}}&lt;br /&gt;
&lt;br /&gt;
==== 自己署名証明書の作成 ====&lt;br /&gt;
&#039;&#039;自己署名&#039;&#039;証明書を作成するには、次を入力:&lt;br /&gt;
 $ openssl req -new -x509 -nodes -out slapdcert.pem -keyout slapdkey.pem -days 365&lt;br /&gt;
&lt;br /&gt;
LDAP サーバーに関する情報の入力が求められます。ほとんどの情報は空のままでも大丈夫です。一番重要な情報はコモンネームです。コモンネームは LDAP サーバーの DNS 名に設定してください。LDAP サーバーの IP アドレスが example.org で解決できてもサーバーの証明書の CN が bad.example.org の場合、LDAP クライアントは証明書を拒否してしまうため TLS 接続をネゴシエートできなくなります (全く予期できない結果になります)。&lt;br /&gt;
&lt;br /&gt;
それから、作成された証明書ファイルを {{ic|/etc/openldap/ssl/}} (ディレクトリが存在しない場合は作成してください) にコピーしてパーミッションを設定します。{{ic|slapdcert.pem}} は公開鍵なので誰からでも読み込めるようにしてください。逆に {{ic|slapdkey.pem}} は ldap ユーザーだけが読み込めるようにしてください:&lt;br /&gt;
 # mv slapdcert.pem slapdkey.pem /etc/openldap/ssl/&lt;br /&gt;
 # chmod -R 755 /etc/openldap/ssl/&lt;br /&gt;
 # chmod 400 /etc/openldap/ssl/slapdkey.pem&lt;br /&gt;
 # chmod 444 /etc/openldap/ssl/slapdcert.pem&lt;br /&gt;
 # chown ldap /etc/openldap/ssl/slapdkey.pem&lt;br /&gt;
&lt;br /&gt;
==== SSL を使うように slapd を設定 ====&lt;br /&gt;
デーモンの設定ファイル ({{ic|/etc/openldap/slapd.conf}}) を編集して以下の行を追加することで LDAP に証明書ファイルの場所を指定してください:&lt;br /&gt;
{{bc|&lt;br /&gt;
# Certificate/SSL Section&lt;br /&gt;
TLSCipherSuite DEFAULT&lt;br /&gt;
TLSCertificateFile /etc/openldap/ssl/slapdcert.pem&lt;br /&gt;
TLSCertificateKeyFile /etc/openldap/ssl/slapdkey.pem&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
TLSCipherSuite は slapd が TLS 接続をネゴシエートするときに使用する OpenSSL の暗号方式のリストを指定します。優先度が高い順です。特定の暗号を指定するかわりに、OpenSSL によってサポートされているワイルドカードを使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* DEFAULT はワイルドカードです。サポートされている暗号方式やワイルドカード、オプションについては {{ic|man ciphers}} の説明を読んでください。&lt;br /&gt;
* ローカルの OpenSSL によってサポートされている暗号を確認するには、次を実行: {{ic|openssl ciphers -v ALL:COMPLEMENTOFALL}}。OpenSSL コマンドを使えば実際に TLSCipherSuite によって有効になる暗号は何なのかテストできます: {{ic|openssl ciphers -v &#039;DEFAULT&#039;}}。}}&lt;br /&gt;
&lt;br /&gt;
設定ディレクトリを再生成:&lt;br /&gt;
 # rm -rf /etc/openldap/slapd.d/*                                  # erase old config settings&lt;br /&gt;
 # slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/  # generate new config directory from config file&lt;br /&gt;
 # chown -R ldap:ldap /etc/openldap/slapd.d                        # Change ownership recursively to ldap on the config directory&lt;br /&gt;
&lt;br /&gt;
==== SSL で slapd を起動 ====&lt;br /&gt;
{{ic|slapd.service}} を編集して slapd が使用するプロトコルを変更してください。&lt;br /&gt;
&lt;br /&gt;
上書きユニットを作成:&lt;br /&gt;
{{hc|systemctl edit slapd.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
ExecStart=&lt;br /&gt;
ExecStart=/usr/bin/slapd -u ldap -g ldap -h &amp;quot;ldaps:///&amp;quot;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
ローカルホスト接続は SSL を使う必要がありません。ローカルのサーバーにアクセスしたいときは {{ic|ExecStart}} 行を以下のように変更してください:&lt;br /&gt;
 ExecStart=/usr/bin/slapd -u ldap -g ldap -h &amp;quot;ldap://127.0.0.1 ldaps:///&amp;quot;&lt;br /&gt;
&lt;br /&gt;
そして {{ic|slapd.service}} を[[再起動]]してください。サービスを有効にしていた場合は、再有効化もしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|上で書かれているように自己署名証明書を作成した場合は、{{ic|TLS_REQCERT allow}} をクライアント側の {{ic|/etc/openldap/ldap.conf}} に追加しないとサーバーに接続することができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
== 次のステップ ==&lt;br /&gt;
&lt;br /&gt;
これで基本的な LDAP のインストールは完了です。次はディレクトリを自分で設計してください。LDAP を何のために使うのかによって大きく変わってきます。LDAP を初めて使う場合は、まずはディレクトリを使用するクライアントサービス (PAM や [[Postfix]] など) によって推奨されている設定から始めると良いでしょう。&lt;br /&gt;
&lt;br /&gt;
システム認証の方法は [[LDAP 認証]]の記事に書かれています。&lt;br /&gt;
&lt;br /&gt;
LDAP のフロントエンドとして [[phpLDAPadmin]] も存在します。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== Client Authentication Checking ===&lt;br /&gt;
セキュアでない認証でサーバーに接続できない場合:&lt;br /&gt;
&lt;br /&gt;
 $ ldapsearch -x -H ldap://ldaservername:389 -D cn=Manager,dc=example,dc=exampledomain&lt;br /&gt;
&lt;br /&gt;
TLS によって暗号化された認証で接続をする場合:&lt;br /&gt;
&lt;br /&gt;
 $ ldapsearch -x -H ldaps://ldaservername:636 -D cn=Manager,dc=example,dc=exampledomain&lt;br /&gt;
&lt;br /&gt;
=== LDAP サーバーが突然停止する ===&lt;br /&gt;
&lt;br /&gt;
slapd を起動しても停止してしまう場合、以下を実行して &amp;quot;ldap&amp;quot; ユーザーからデータディレクトリに書き込むことができるようにしてみてください:&lt;br /&gt;
&lt;br /&gt;
 # chown ldap:ldap /var/lib/openldap/openldap-data/*&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
* [http://www.openldap.org/doc/admin24/ Official OpenLDAP Software 2.4 Administrator&#039;s Guide]&lt;br /&gt;
* [[phpLDAPadmin]] phpMyAdmin 風のウェブインターフェイスツール&lt;br /&gt;
* {{AUR|apachedirectorystudio}} Eclipse ベースの LDAP ビューア ([[AUR]])。OpenLDAP でも問題なく動作します&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=OpenLDAP&amp;diff=5204</id>
		<title>OpenLDAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=OpenLDAP&amp;diff=5204"/>
		<updated>2016-04-08T14:23:25Z</updated>

		<summary type="html">&lt;p&gt;Fragment: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ネットワーク]]&lt;br /&gt;
[[en:OpenLDAP]]&lt;br /&gt;
[[ru:OpenLDAP]]&lt;br /&gt;
[[zh-cn:OpenLDAP]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|LDAP 認証}}&lt;br /&gt;
{{Related3|LDAP Hosts|LDAP ホスト}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
OpenLDAP は LDAP プロトコルのオープンソースの実装です。LDAP サーバーは基本的に、データの書き込みではなくアクセスに最適化されたリレーショナルでないデータベースです。主として (メールクライアントなどの) アドレス帳や様々なサービス (ドメインコントローラをエミュレートするのに使われる Samba や、{{ic|/etc/passwd}} を置き換える [[LDAP 認証|Linux システム認証]]など) の認証バックエンドとして使われ、ユーザーデータを保持します。&lt;br /&gt;
&lt;br /&gt;
{{note|{{ic|ldap}} で始まる OpenLDAP のコマンド ({{ic|ldapsearch}} など) はクライアント側のユーティリティであり、{{ic|slap}} で始まるコマンド ({{ic|slapcat}} など) はサーバー側のユーティリティです。}}&lt;br /&gt;
&lt;br /&gt;
このページではその入り口として基本的な OpenLDAP をインストールしてサニティチェックを行います。&lt;br /&gt;
&lt;br /&gt;
{{Tip|ディレクトリサービスは範囲がとても広いテーマであり、設定は複雑です。初めてディレクトリサービスに接する場合は、[http://www.brennan.id.au/20-Shared_Address_Book_LDAP.html ここ] を読めば簡単に理解でき、LDAP の全てを知らなかったとしても始めることができると思います。}}&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
OpenLDAP には LDAP サーバーとクライアントの両方が含まれています。[[公式リポジトリ]]の {{Pkg|openldap}} パッケージでインストールしてください。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
=== サーバー ===&lt;br /&gt;
&lt;br /&gt;
{{Note|既にマシン上に OpenLDAP データベースが存在する場合は、{{ic|/var/lib/openldap/openldap-data/}} 内の全てのファイルを削除してください。}}&lt;br /&gt;
&lt;br /&gt;
サーバーの設定ファイルは {{ic|/etc/openldap/slapd.conf}} です。&lt;br /&gt;
&lt;br /&gt;
suffix と rootdn を編集してください。suffix は基本的にドメイン名を使いますが、そうである必要はありません。ディレクトリは使い様です。ここではドメイン名には &#039;&#039;example&#039;&#039; を、tld には &#039;&#039;com&#039;&#039; を使うこととします。rootdn は LDAP の管理者の名前です (ここでは &#039;&#039;root&#039;&#039; を使います)。&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
suffix     &amp;quot;dc=example,dc=com&amp;quot;&lt;br /&gt;
rootdn     &amp;quot;cn=root,dc=example,dc=com&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
そしてデフォルトの root パスワードを削除して強固なパスワードを作成します:&lt;br /&gt;
 # sed -i &amp;quot;/rootpw/ d&amp;quot; /etc/openldap/slapd.conf #find the line with rootpw and delete it&lt;br /&gt;
 # echo &amp;quot;rootpw    $(slappasswd)&amp;quot; &amp;gt;&amp;gt; /etc/openldap/slapd.conf  #add a line which includes the hashed password output from slappasswd&lt;br /&gt;
&lt;br /&gt;
よく使われる [http://www.openldap.org/doc/admin24/schema.html schema] を {{ic|slapd.conf}} の一番上に追加すると良いでしょう:&lt;br /&gt;
 # cp /usr/share/doc/samba/examples/LDAP/samba.schema /etc/openldap/schema&lt;br /&gt;
{{bc|&lt;br /&gt;
include         /etc/openldap/schema/cosine.schema&lt;br /&gt;
include         /etc/openldap/schema/inetorgperson.schema&lt;br /&gt;
include         /etc/openldap/schema/nis.schema&lt;br /&gt;
include         /etc/openldap/schema/samba.schema&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
よく使われる [http://www.openldap.org/doc/admin24/tuning.html#Indexes index] を {{ic|slapd.conf}} の一番下に追加すると良いでしょう:&lt;br /&gt;
{{bc|&lt;br /&gt;
index   uid             pres,eq&lt;br /&gt;
index   mail            pres,sub,eq&lt;br /&gt;
index   cn              pres,sub,eq&lt;br /&gt;
index   sn              pres,sub,eq&lt;br /&gt;
index   dc              eq&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
データベースディレクトリを準備します。デフォルトの設定ファイルをコピーして適切な所有権を設定してください:&lt;br /&gt;
 # cp /etc/openldap/DB_CONFIG.example /var/lib/openldap/openldap-data/DB_CONFIG&lt;br /&gt;
 # chown ldap:ldap /var/lib/openldap/openldap-data/DB_CONFIG&lt;br /&gt;
&lt;br /&gt;
{{Note|OpenLDAP 2.4 から {{ic|slapd.conf}} の設定は非推奨になりました。このバージョンから全ての設定は {{ic|/etc/openldap/slapd.d/}} に保存されることになっています。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|slapd.conf}} の変更を新しい {{ic|/etc/openldap/slapd.d/}} の設定に保存するには、まず古い設定ファイルを削除する必要があります。設定を変更するたびに実行してください:&lt;br /&gt;
&lt;br /&gt;
 # rm -rf /etc/openldap/slapd.d/*&lt;br /&gt;
&lt;br /&gt;
(データベースがまだない場合は、[[systemd#ユニットを使う|systemd]] を使って {{ic|slapd.service}} を起動・停止することでデータベースを作成してください。)&lt;br /&gt;
&lt;br /&gt;
次のコマンドで新しい設定を生成します:&lt;br /&gt;
&lt;br /&gt;
 # slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/&lt;br /&gt;
&lt;br /&gt;
上のコマンドは {{ic|slapd.conf}} を変更する度に実行する必要があります。全てが問題ないか確認してください。&amp;quot;bdb_monitor_db_open: monitoring disabled; configure monitor database to enable&amp;quot; というメッセージは無視してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/openldap/slapd.d}} の新しいファイルとディレクトリの所有権を再帰的に変更:&lt;br /&gt;
&lt;br /&gt;
 # chown -R ldap:ldap /etc/openldap/slapd.d&lt;br /&gt;
&lt;br /&gt;
{{note|ディレクトリを作成した後はインデックスを作成してください。インデックスは作成する前に slapd を停止する必要があります。&lt;br /&gt;
 # slapindex&lt;br /&gt;
 # chown ldap:ldap /var/lib/openldap/openldap-data/*&lt;br /&gt;
もしくは {{ic|$ sudo -u ldap slapindex}} を実行。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
最後に、systemd を使って {{ic|slapd.service}} で slapd デーモンを起動してください。&lt;br /&gt;
&lt;br /&gt;
=== クライアント ===&lt;br /&gt;
クライアントの設定ファイルは {{ic|/etc/openldap/ldap.conf}} です。&lt;br /&gt;
&lt;br /&gt;
設定はとてもシンプルです: {{ic|BASE}} をサーバーの suffix に、{{ic|URI}} をサーバーのアドレスに変更するだけです、例:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/openldap/ldap.conf|2=&lt;br /&gt;
BASE            dc=example,dc=com&lt;br /&gt;
URI             ldap://localhost&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
SSL を使う場合は:&lt;br /&gt;
&lt;br /&gt;
* {{ic|URI}} エントリのプロトコル (ldap または ldaps) は slapd の設定と一致しなくてはなりません。&lt;br /&gt;
* 自己署名証明書を使う場合は、{{ic|ldap.conf}} に {{ic|TLS_REQCERT allow}} という行を追加してください。&lt;br /&gt;
&lt;br /&gt;
=== 最初のエントリを作成 ===&lt;br /&gt;
クライアントを設定したら、root の役割をするエントリである root エントリを作成することを推奨します:&lt;br /&gt;
&lt;br /&gt;
 $ ldapadd -x -D &#039;cn=root,dc=example,dc=com&#039; -W&lt;br /&gt;
 dn: dc=example,dc=com&lt;br /&gt;
 objectClass: dcObject&lt;br /&gt;
 objectClass: organization&lt;br /&gt;
 dc: example&lt;br /&gt;
 o: Example&lt;br /&gt;
 description: Example directory&lt;br /&gt;
 &lt;br /&gt;
 dn: cn=root,dc=example,dc=com&lt;br /&gt;
 objectClass: organizationalRole&lt;br /&gt;
 cn: root&lt;br /&gt;
 description: Directory Manager&lt;br /&gt;
 ^D&lt;br /&gt;
&lt;br /&gt;
最初の行の後のテキストは標準入力で入力していますが、-f オプションやファイルリダイレクトを使うことでファイルから読み込むこともできます。&lt;br /&gt;
&lt;br /&gt;
=== OpenLDAP をテストする ===&lt;br /&gt;
&lt;br /&gt;
下のコマンドを実行するだけで、簡単にテストできます:&lt;br /&gt;
 $ ldapsearch -x &#039;(objectclass=*)&#039;&lt;br /&gt;
&lt;br /&gt;
もしくは、上記の設定例を使って、rootdn で認証するには ({{ic|-x}} を {{ic|-D &amp;lt;user&amp;gt; -W}} で置き換える):&lt;br /&gt;
 $ ldapsearch -D &amp;quot;cn=root,dc=example,dc=com&amp;quot; -W &#039;(objectclass=*)&#039;&lt;br /&gt;
&lt;br /&gt;
データベースに関する情報が表示されるはずです。&lt;br /&gt;
&lt;br /&gt;
=== OpenLDAP over TLS ===&lt;br /&gt;
{{Note|[http://www.openldap.org/doc/admin24/ 上流のドキュメント] の方がこのセクションよりも情報が豊富です。}}&lt;br /&gt;
&lt;br /&gt;
ネットワークを介して OpenLDAP サーバーにアクセスする場合、特にサーバー上に極秘のデータを保存するときは、クリアテキストで送られたデータを盗聴される恐れがあります。次のパートでは LDAP サーバーとクライアントの間に SSL 接続をセットアップしてデータを暗号化して送信する方法を説明します。&lt;br /&gt;
&lt;br /&gt;
TLS を使うには、証明書が必要になります。テスト目的なら、&#039;&#039;自己署名&#039;&#039;証明書で足りるでしょう。証明書について詳しく知るには、[[OpenSSL]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
{{Warning|OpenLDAP はパスワードが関連付けられた証明書を使うことができません。}}&lt;br /&gt;
&lt;br /&gt;
==== 自己署名証明書の作成 ====&lt;br /&gt;
&#039;&#039;自己署名&#039;&#039;証明書を作成するには、次を入力:&lt;br /&gt;
 $ openssl req -new -x509 -nodes -out slapdcert.pem -keyout slapdkey.pem -days 365&lt;br /&gt;
&lt;br /&gt;
LDAP サーバーに関する情報の入力が求められます。ほとんどの情報は空のままでも大丈夫です。一番重要な情報はコモンネームです。コモンネームは LDAP サーバーの DNS 名に設定してください。LDAP サーバーの IP アドレスが example.org で解決できてもサーバーの証明書の CN が bad.example.org の場合、LDAP クライアントは証明書を拒否してしまうため TLS 接続をネゴシエートできなくなります (全く予期できない結果になります)。&lt;br /&gt;
&lt;br /&gt;
それから、作成された証明書ファイルを {{ic|/etc/openldap/ssl/}} (ディレクトリが存在しない場合は作成してください) にコピーしてパーミッションを設定します。{{ic|slapdcert.pem}} は公開鍵なので誰からでも読み込めるようにしてください。逆に {{ic|slapdkey.pem}} は ldap ユーザーだけが読み込めるようにしてください:&lt;br /&gt;
 # mv slapdcert.pem slapdkey.pem /etc/openldap/ssl/&lt;br /&gt;
 # chmod -R 755 /etc/openldap/ssl/&lt;br /&gt;
 # chmod 400 /etc/openldap/ssl/slapdkey.pem&lt;br /&gt;
 # chmod 444 /etc/openldap/ssl/slapdcert.pem&lt;br /&gt;
 # chown ldap /etc/openldap/ssl/slapdkey.pem&lt;br /&gt;
&lt;br /&gt;
==== SSL を使うように slapd を設定 ====&lt;br /&gt;
デーモンの設定ファイル ({{ic|/etc/openldap/slapd.conf}}) を編集して以下の行を追加することで LDAP に証明書ファイルの場所を指定してください:&lt;br /&gt;
{{bc|&lt;br /&gt;
# Certificate/SSL Section&lt;br /&gt;
TLSCipherSuite DEFAULT&lt;br /&gt;
TLSCertificateFile /etc/openldap/ssl/slapdcert.pem&lt;br /&gt;
TLSCertificateKeyFile /etc/openldap/ssl/slapdkey.pem&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Let’s Encrypt]] のような認証局により署名されたSSL証明書を用いる場合、ルート証明書データベースと中間証明書のパスを指定する必要があります。また、ユーザー {{ic|ldap}} が読み込めるように {{ic|.pem}} ファイルと途中のディレクトリの所有者情報を変更する必要もあるでしょう。:&lt;br /&gt;
{{bc|&lt;br /&gt;
# Certificate/SSL Section&lt;br /&gt;
TLSCipherSuite DEFAULT&lt;br /&gt;
TLSCertificateFile /etc/letsencrypt/live/ldap.my-domain.com/cert.pem&lt;br /&gt;
TLSCertificateKeyFile /etc/letsencrypt/live/ldap.my-domain.com/privkey.pem&lt;br /&gt;
TLSCACertificateFile /etc/letsencrypt/live/ldap.my-domain.com/chain.pem&lt;br /&gt;
TLSCACertificatePath /usr/share/ca-certificates/trust-source&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
TLSCipherSuite は slapd が TLS 接続をネゴシエートするときに使用する OpenSSL の暗号方式のリストを指定します。優先度が高い順です。特定の暗号を指定するかわりに、OpenSSL によってサポートされているワイルドカードを使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* DEFAULT はワイルドカードです。サポートされている暗号方式やワイルドカード、オプションについては {{ic|man ciphers}} の説明を読んでください。&lt;br /&gt;
* ローカルの OpenSSL によってサポートされている暗号を確認するには、次を実行: {{ic|openssl ciphers -v ALL:COMPLEMENTOFALL}}。OpenSSL コマンドを使えば実際に TLSCipherSuite によって有効になる暗号は何なのかテストできます: {{ic|openssl ciphers -v &#039;DEFAULT&#039;}}。}}&lt;br /&gt;
&lt;br /&gt;
設定ディレクトリを再生成:&lt;br /&gt;
 # rm -rf /etc/openldap/slapd.d/*                                  # erase old config settings&lt;br /&gt;
 # slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/  # generate new config directory from config file&lt;br /&gt;
 # chown -R ldap:ldap /etc/openldap/slapd.d                        # Change ownership recursively to ldap on the config directory&lt;br /&gt;
&lt;br /&gt;
==== SSL で slapd を起動 ====&lt;br /&gt;
{{ic|slapd.service}} を編集して slapd が使用するプロトコルを変更してください。&lt;br /&gt;
&lt;br /&gt;
上書きユニットを作成:&lt;br /&gt;
{{hc|systemctl edit slapd.service|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
ExecStart=&lt;br /&gt;
ExecStart=/usr/bin/slapd -u ldap -g ldap -h &amp;quot;ldaps:///&amp;quot;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
ローカルホスト接続は SSL を使う必要がありません。ローカルのサーバーにアクセスしたいときは {{ic|ExecStart}} 行を以下のように変更してください:&lt;br /&gt;
 ExecStart=/usr/bin/slapd -u ldap -g ldap -h &amp;quot;ldap://127.0.0.1 ldaps:///&amp;quot;&lt;br /&gt;
&lt;br /&gt;
そして {{ic|slapd.service}} を[[再起動]]してください。サービスを有効にしていた場合は、再有効化もしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|上で書かれているように自己署名証明書を作成した場合は、{{ic|TLS_REQCERT allow}} をクライアント側の {{ic|/etc/openldap/ldap.conf}} に追加しないとサーバーに接続することができなくなります。}}&lt;br /&gt;
&lt;br /&gt;
== 次のステップ ==&lt;br /&gt;
&lt;br /&gt;
これで基本的な LDAP のインストールは完了です。次はディレクトリを自分で設計してください。LDAP を何のために使うのかによって大きく変わってきます。LDAP を初めて使う場合は、まずはディレクトリを使用するクライアントサービス ([[PAM]] や [[Postfix]] など) によって推奨されている設定から始めると良いでしょう。&lt;br /&gt;
&lt;br /&gt;
システム認証の方法は [[LDAP 認証]]の記事に書かれています。&lt;br /&gt;
&lt;br /&gt;
LDAP のフロントエンドとして [[phpLDAPadmin]] も存在します。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== Client Authentication Checking ===&lt;br /&gt;
セキュアでない認証でサーバーに接続できない場合:&lt;br /&gt;
&lt;br /&gt;
 $ ldapsearch -x -H ldap://ldaservername:389 -D cn=Manager,dc=example,dc=exampledomain&lt;br /&gt;
&lt;br /&gt;
TLS によって暗号化された認証で接続をする場合:&lt;br /&gt;
&lt;br /&gt;
 $ ldapsearch -x -H ldaps://ldaservername:636 -D cn=Manager,dc=example,dc=exampledomain&lt;br /&gt;
&lt;br /&gt;
=== LDAP サーバーが突然停止する ===&lt;br /&gt;
&lt;br /&gt;
slapd を起動しても停止してしまう場合、以下を実行して &amp;quot;ldap&amp;quot; ユーザーからデータディレクトリに書き込むことができるようにしてみてください:&lt;br /&gt;
&lt;br /&gt;
 # chown ldap:ldap /var/lib/openldap/openldap-data/*&lt;br /&gt;
&lt;br /&gt;
=== LDAP サーバーを起動できない ===&lt;br /&gt;
&lt;br /&gt;
コマンドラインからデバッグ出力を有効にしてLDAPサーバーを起動してみてください:&lt;br /&gt;
&lt;br /&gt;
 # slapd -u ldap -g ldap -h ldaps://ldaservername:636 -d Config,Stats&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
* [http://www.openldap.org/doc/admin24/ Official OpenLDAP Software 2.4 Administrator&#039;s Guide]&lt;br /&gt;
* [[phpLDAPadmin]] phpMyAdmin 風のウェブインターフェイスツール&lt;br /&gt;
* {{AUR|apachedirectorystudio}} Eclipse ベースの LDAP ビューア ([[AUR]])。OpenLDAP でも問題なく動作します&lt;/div&gt;</summary>
		<author><name>Fragment</name></author>
	</entry>
</feed>