GPD PocketにArch Linuxをインストール・設定する

## 注意点
+ 以下の内容は __シングルブート__ でArch Linuxをインストール・設定を行う際の手順となります。
+ デスクトップ環境はGNOME(Wayland)を使用します。
+ IMはibusを使用します。
+ 本記事はインストールを行った2017年8月9日時点の情報で執筆しています。
+ __本記事の内容は全て非公式のものです。__
+ Redditコミュニティで活発に開発されている設定ツールに[cawilliamson/ansible-gpdpocket](https://github.com/cawilliamson/ansible-gpdpocket)がありますが、こちらはGRUBでのブートを前提に設計されており、今回はsystemd-bootを使用したいため、設定を手動で行います。
+ 現在、microHDMI出力、ハイバネートが正常に機能しません。
+ 日本語表示については未確認ですが、通常通りの手順で可能と思われます。

## 謝辞
本記事の執筆にあたり、以下の内容を参考にさせていただきました。
[Linux on GPD Pocket : GPDPocket](https://www.reddit.com/r/GPDPocket/comments/6idnia/linux_on_gpd_pocket/) thanks reddit users!
[Getting Linux to run properly on the GPDwin - Hans' hacking log](http://hansdegoede.livejournal.com/17445.html) thanks hansdegoede!
[gpd-pocket-ubuntu-respin/README.md at master · stockmind/gpd-pocket-ubuntu-respin · GitHub](https://github.com/stockmind/gpd-pocket-ubuntu-respin/blob/master/README.md) thanks stockmind!
[わかめそばmogmog: GPD Pocket で Arch Linux を起動する](https://wakamesoba98.blogspot.jp/2017/06/gpd-pocket-arch-linux.html) thanks わかめそば!
[Arch Linuxインストール （OSインストール編）| UEFI, GPT, XFSを使用してインストール | 普段使いのArch Linux](http://archlinux-blogger.blogspot.jp/2016/03/arch-linux-uefi-gpt-xfs.html) thanks arch!
[追記：ibus-mozcの初期入力モードを「ひらがな」にする。 | Glasse-age](http://ranats.github.io/2016/04/13/ibus-mozc-fixed.html) thanks Rantas!


## 必要なもの
+ ハードウェア
GPD Pocket本体(BIOSは2017/07/05版に更新済みですが、出荷時版でも大丈夫そうです)
インストールイメージを書き込むUSBメモリ
USBハブ(USB-A用)
有線LAN環境とUSB-LANアダプタ(推奨)、またはUSBテザリング可能なAndroid端末(Wi-Fi環境外では非推奨)
他のPC(カーネルビルド時にはLinux環境かつCPU性能が高いもの)

+ ソフトウェア
[Arch Linuxのインストールイメージ](https://www.archlinux.org/download/)
その他、必要なソフトウェア類を適宜入手します。


## インストール手順
### インストールUSBの作成~インストールUSBの起動
+ Arch LinuxのインストールイメージをUSBメモリに書き込む。(参照: [USB インストールメディア - ArchWiki](https://wiki.archlinuxjp.org/index.php/USB_%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%83%A1%E3%83%87%E3%82%A3%E3%82%A2))
+ GPD Pocket本体のUSB-AポートにUSBハブを挿し、そこにインストールイメージを書き込んだUSBメモリと、USB-LANアダプタ(or Android端末)を挿す。
+ GPD Pocket本体の電源を入れ、ブートスプラッシュ( __GPD__ と文字の出る画面)が出たら、`F7`キーを押す。(内臓キーボードの`Fn`+`7`の組み合わせで入力)
+ 起動デバイスの選択画面が縦向きに表示されるので、挿し込んだUSBメモリを上下キーを使って選択し、`Enter`キーを押す。
+ インストールUSBの起動メニューが縦向きに表示されるので、そのままの位置(Arch Linux archiso x84_64 UEFI USB)で`E`キーを押す。
+ 画面下の方に起動オプションが表示されるので、右キーを押して行末まで移動し、末尾に以下の内容を入力する。(キーボードの特性か、rotate:1の:が二重入力になりやすいので十分注意すること)

```
i915.fastboot=1 fbcon=rotate:1
```

+ `Enter`キーを押して起動。以下のプロンプトが表示されれば起動成功です。

```
root@archiso ~ #
```

### GPD Pocketへのインストール
#### インターネット接続設定
+ インターネット接続を確立します。USB-LANアダプタ(or Android端末、USBテザリングをオンにしてください)にLANケーブルが繋がっていることを確認し、以下のコマンドを実行します。

```
# ip link show
```

+ ネットワークアダプタの名前が表示されます。 _enp?s??u?_ の命名規則になっているアダプタが見つかると思われますので、以下のコマンドを実行します。

```
# dhcpcd enp?s??u?(ネットワークアダプタ名)
```

+ 少し待ってから、以下のコマンドを実行し、インターネット接続が確立されていることを確認します。

```
# ping 8.8.8.8
```
#### パーティション設定
作業の前に、どのパーティションにどれだけの容量を割り振るかを決めておいてください。筆者の場合は、以下の配分としました。

| パーティション名 | マウントポイント | フォーマット | 容量   |
|:----------------|:---------------|:------------|:-------|
| mmcblk0p1       | /boot          | FAT32       | 512MiB |
| mmcblk0p2       | /              | ext4        | 30GiB  |
| mmcblk0p3       | /home          | etx4        | 残り   |
[パーティショニング - ArchWiki](https://wiki.archlinuxjp.org/index.php/%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%8B%E3%83%B3%E3%82%B0)の内容も参考になります。
+ まずは、以下のコマンドを実行してディスクの状態を確認します。

  ```
  # lsubk
  ```
+ 上記コマンドの出力結果より、内蔵ドライブの名前が _mmcblk0_ と解ります。(もし違う場合は読み替えてください)
+ 全てのパーティションを削除するために、以下のコマンドを実行します。

```
# sgdisk --zap-all /dev/mmcblk0
```

+ 次はパーティショニングを行います。以下のコマンドを実行します。

```
# gdisk /dev/mmcblk0
```

+ `Command (? for help): `と表示されたら、`o`と入力し、`Enter`キーを押します。(新しいパーティションテーブルの作成)
+ その後再び`Command (? for help): `と表示されますので、パーティションを設定します。上記の表の場合、以下のように入力していきます。

```
Command (? for help): n (新しいパーティションの作成)
Partition number : 1
First sector: (何も入力せずにEnterキーを押す)
Last sector: +512M
Hex code or GUID: ef00 (UEFI System partitionのコード)

Command (? for help): n (新しいパーティションの作成)
Partition number: 2
First sector: (何も入力せずEnterキーを押す)
Last sector: +30G
Hex code or GUID: (何も入力せずEnterキーを押す)

Command (? for help): n (新しいパーティションの作成)
Partition number: 3
First sector: (何も入力せずEnterキーを押す)
Last sector: (何も入力せずEnterキーを押す)
Hex code or GUID: (何も入力せずEnterキーを押す)
```
+ パーティション設定が終了した後、再び`Command (? for help):`が表示されますので、`w`と入力し、`Enter`キーを押します。(パーティションの書き込み)
+ `Do you want to proceed?:`と表示されますので`y`と入力し、`Enter`キーを押し、パーティションを書き込みます。
+ `The operation has completed successfully.`と表示されれば成功です。

#### パーティションのフォーマット
上記の表の通り、以下のようにフォーマットしていきます。

| パーティション名 |フォーマット  |
|:----------------|:-----------|
| mmcblk0p1       |FAT32       |
| mmcblk0p2       |ext4        |
| mmcblk0p3       |etx4        |
+ mmcblk0p1(/boot, EFIパーティション)をフォーマットします。以下のコマンドを実行します。

```
# mkfs.fat -F32 /dev/mmcblk0p1
```

+ mmcblk0p2(/, ルートパーティション)をフォーマットします。以下のコマンドを実行します。

```
# mkfs.ext4 /dev/mmcblk0p2
```

+ mmcblk0p3(/home, ホームパーティション)をフォーマットします。以下のコマンドを実行します。

```
# mkfs.ext4 /dev/mmcblk0p3
```

#### Arch Linuxベースシステムのインストール
+ ミラーリストを変更します。ソートする場合は[ミラー - ArchWiki](https://wiki.archlinuxjp.org/index.php/%E3%83%9F%E3%83%A9%E3%83%BC#.E3.83.9F.E3.83.A9.E3.83.BC.E3.82.92.E3.82.BD.E3.83.BC.E3.83.88.E3.81.99.E3.82.8B)を参照してください。手入力の場合は、日本国内の場合は日本のサーバーを一番上に、それ以外の国の場合は基本的に当該国のサーバーを一番上にしてください。ミラーリストファイルは`/etc/pacman.d/mirrorlist`です。インストールUSBには`nano`, `vi`, `vim`がインストールされていますので、お好みのエディタで編集してください。一例を記します。

```
##
## Arch Linux repository mirrorlist
## Generated on 2017-07-29
##

## Japan
Server = http://ftp.tsukuba.wide.ad.jp/Linux/archlinux/$repo/os/$arch
Server = http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/$repo/os/$arch
Server = http://ftp.kddilabs.jp/Linux/packages/archlinux/$repo/os/$arch
...
```

+ 先ほどフォーマットしたパーティションをマウントしていきます。ルートパーティションを`/mnt`にマウントするようにします。フォーマット直後はマウントポイントがありませんので、ディレクトリを作成してからマウントします。今回の場合は以下のようにマウントします。

```
# mount /dev/mmcblk0p2 /mnt
# mkdir /mnt/boot
# mount /dev/mmcblk0p1 /mnt/boot
# mkdir /mnt/home
# mount /dev/mmcblk0p3 /mnt/home
```

+ ベースシステムをインストールします。以下のコマンドを実行して下さい。

```
# pacstrap /mnt base base-devel
```

+ インストールが完了したら、fstabを生成します。以下のコマンドを実行してください。

```
# genfstab -U -p /mnt >> /mnt/etc/fstab
```

+ インストールしたシステムに移動します。以下のコマンドを実行してください。

```
# arch-chroot /mnt /bin/bash
```

+ 以下のようなプロンプトが表示されれば、ベースシステムのインストールに成功しています。

```
[root@archiso ~/]#
```

#### インストール直後の設定
+ タイムゾーンの設定をします。日本標準時の場合は、以下のコマンドを実行してください。

```
# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
```

+ ハードウェアクロックを設定します。以下のコマンドを実行してください。

```
# hwclock --systohc --utc
```

+ ロケールを設定します。今回は、アメリカ英語と日本語を有効にします。`/etc/locale.gen`をエディタで開き、以下の二つを探してコメントアウトを外してください。

```
en_US.UTF-8
ja_JP.UTF-8
```

+ コメントアウトを外す作業が完了したら、以下のコマンドを実行してロケールを有効化します。

```
# locale-gen
```

+ `/etc/locale.conf`にもロケールを設定します。ターミナルは英語表示が基本となりますので、ここでは先ほど有効化したアメリカ英語を設定します。以下のコマンドを実行してください。

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

+ ホスト名を設定します。以下のコマンドを実行してください。

```
# echo [任意のホスト名] > /etc/hostname
```

+ エディタで`/etc/hosts`を開き、上記で入力したホスト名を以下のように記述します。

```
127.0.0.1    localhost.localdomain    localhost
::1          localhost.localdomain	  localhost
127.0.1.1	   [任意のホスト名].localdomain	[任意のホスト名]
```

+ 再起動時に自動的にインターネットに接続されるよう、`dhcpcd.service`を有効化します。以下のコマンドを実行してください。

```
# systemctl enable dhcpcd.service
```

+ ルートパスワーを設定します。以下のコマンドを実行してください。

```
# passwd
Enter new UNIX password: (ここで設定したいパスワードを入力。表示されません。)
Retype new UNIX password: (設定したいパスワードを再度入力。表示されません。)
passwd: password update successfully (設定に完了するとこのメッセージが出ます)
```

+ ベースシステムのpacmanのデータベースをアップデートします。以下のコマンドを実行し、インストールしてください。

```
# pacman -Syy
```

+ intel製CPUのマイクロコードをアップデートするためのパッケージをインストールします。以下のコマンドを実行してください。

```
# pacman -S intel-ucode
```

+ ブートローダーをインストールする前に、EFIブートローダーを書き込むために必要なパッケージをインストールします。(pacstrapでのインストールに含めてもよいかもしれません)以下のコマンドを実行し、インストールしてください。

```
# pacman -S dosfstools efibootmgr
```

+ systemd-bootを使用してブートローダーを書き込みます。以下のコマンドを実行してください。

```
# bootctl --path=/boot install
```

+ ブートエントリを作成します。UUIDを使用してルートパーティションを指定するので、以下のコマンドを実行してUUIDの値を先に書き込みます。

```
blkid -s PARTUUID -o value /dev/mmcblk0p2 > /boot/loader/entries/arch.conf
```

+ 先ほどUUIDを書き込んだ`/boot/loader/entries/arch.conf`をエディタで開き、以下のように編集します。

```
title          Arch Linux
linux          /vmlinuz-linux
initrd         /intel-ucode.img
initrd         /initramfs-linux.img
options        root=PARTUUID=[先に記述されているUUID] rw i915.fastboot=1 fbcon=rotate:1
```

+ ブート設定をします。`/boot/loader/loader.conf`を開き、以下のように編集します。timeoutのコメントアウトを外さない場合は、ブートメニューが表示されずに起動を開始します。(defaultの値は、ブートエントリの.confファイルの、.confを外して記述します)

```
timeout 3
default arch
```

+ インストール時の設定が完了しましたので、再起動します。以下のコマンドを実行してください。

```
# exit
# umount -R /mnt
# reboot
```

+ 再起動後、ブートメニューが表示されます。そのまま待つとdmesgが流れ、以下のプロンプトが表示されます。

```
Arch Linux [カーネルバージョン] (tty1)

[ホスト名] login:
```

#### 初回起動直後の設定

+ rootユーザーでログインします。`[ホスト名] login:`と表示されていますので、以下のように入力してログインします。

```
[ホスト名] login: root
Password: [passwdで設定したパスワード]
```

+ 日常使用する一般ユーザーを作成します。`useradd`コマンドを実行して作成してください。今回は以下のようにしました。

```
# useradd -m -g users -G wheel [ユーザー名]
```

+ `sudo`コマンドの使用を有効化します。次のコマンドを実行してください。

```
# visudo
```

+ `vi`を使用して設定ファイルが開かれます。カーソルを移動して、以下の位置のコメントアウトを外してください。

```
%wheel ALL=(ALL) ALL
```

+ tymesyncdを利用した時刻同期の設定を行います。次のコマンドを実行してください。

```
# timedatectl set-ntp true
```

+ tymesyncdの設定を行います。`/etc/systemd/timecyncd.conf`をエディタで開き、日本国内の場合は以下のように入力してください。コメントアウトは外してください。

```
[Time]
NTP=ntp1.jst.mfeed.ad.jp ntp2.jst.mfeed.ad.jp ntp3.jst.mfeed.ad.jp
FallbackNTP=0.arch.pool.ntp.org 1.arch.pool.ntp.org 2.arch.pool.ntp.org 3.arch.pool.ntp.org
```

+ 入力後、timesyncdの動作状態を確認します。


#### CPUと電源管理ツールのインストール
こちらをインストールしない場合、CPUが常に100%で稼働する場合がありますので、導入を推奨します。

+ `cpupower`と`tlp`をインストールします。以下のコマンドを実行してください。

```
# pacman -S cpupower tlp
```

+ インストール後、CPUスケーリングガバナーを有効化します。以下のコマンドを実行してください。

```
# cpupower frequency-set -g powersave
```

#### デスクトップ環境のインストール

+ intelのビデオドライバをインストールします。以下のコマンドを実行してインストールしてください。

```
# pacman -S xf86-video-intel
```

+ GNOME Desktop環境をインストールします。筆者は最低限の環境が欲しいので、`gnome`をインストールし、`gnome-extra`はインストールしません。必要に応じてインストールしましょう。以下のコマンドを実行してインストールします。

```
# pacman -S gnome
```

+ GNOME Desktop環境のインストールが完了しましたが、この状態では日本語フォントがありません。筆者は`noto-fonts`シリーズをまとめてインストールしました。途中、`fontconfig`関連の処理で非常に時間がかかりますが、気長に待ちましょう。なお、デスクトップ環境上で実行すると、フリーズしたかに思える程度に動かなくなり、精神衛生上良くありませんので、コンソールログイン中の現段階で行うことをおすすめします。以下のコマンドを実行してインストールします。

```
# pacman -S noto-fonts noto-fonts-cjk noto-fonts-emoji
```

+ インストールが完了したら、グラフィカルログインを自動実行するように設定します。次のコマンドを実行してください。

```
# systemctl enable gdm.service
```

+ ネットワークツールの`NetworkManager`デーモンを有効化しておきます。以下のコマンドを実行してください。

```
# systemctl enable NetworkManeger.service
```

+ システムを再起動します。以下のコマンドを実行してください。

```
# reboot
```

+ 再起動が完了し、縦向きでグラフィカルログイン画面が表示されば設定は完了です。

#### GNOME, GDMの画面回転設定

+ グラフィカルログイン画面に、先ほど作成したユーザー名が表示されていますので、青く選択された状態で`Enter`キーを押すか、名前の上で左クリックすると、パスワード入力画面が表示されます。設定したパスワードでログインします。

+ ログインが完了し、デスクトップ画面が表示されたら、右上(縦向き表示の場合は左上)に表示される[▼]をクリックします。

+ ドライバーとスパナが交差したアイコンが表示されますので。クリックし、All Settings画面を表示します。

+ Displays→Built-in displayとクリックして開いていきます。

+ 設定画面が表示されますので、右方向に回転する矢印ボタンをクリック後、`Apply`ボタンをクリックします。

+ 画面の方向が正常になるので、問題なければ`Keep Changes`ボタンをクリックして確定します。

+ ログイン画面の画面設定も変更します。デスクトップの画面設定を流用できますので、以下のコマンドを実行し、同じように設定します。

```
$ sudo cp ~/.config/monitors.xml /var/lib/gdm/.config/monitors.xml
```

+ この状態で再起動すると、ログイン画面、デスクトップ画面ともに横向き表示で起動するようになります。

#### GPD Pocket向けのユーティリティ・カスタムカーネルをインストール
+ 作業前に、パッケージビルドやアーカイブを展開して作業するためのディレクトリを作成することをお勧めします。筆者は`~/build`ディレクトリを作成し、そこに移動した上で作業しました。

##### packerのインストール
+ はじめに、AURヘルパーの`packer`をインストールします。今回は`packer-git`を使用します。依存パッケージではありませんが、パッケージファイルの取得に時折必要にもなる`wget`を先にインストールしておきます。以下のコマンドを実行してインストールします。

```
$ sudo pacman -S wget
```

+ 次のコマンドを実行し、`packer-git`のPKGBUILDファイル等をダウンロードします。([AUR (en) - packer-git](https://aur.archlinux.org/packages/packer-git/)の"Download Snapshot"をクリックしてダウンロードし、手動で作業ディレクトリへ移動しても問題ありません。以後のAURからのダウンロード時の説明ではこの部分を全て省きます)

```
$ wget https://aur.archlinux.org/cgit/aur.git/snapshot/packer-git.tar.gz
```

+ ダウンロードしたアーカイブを展開します。以下のコマンドを実行してください。(Nautilus上で展開しても問題ありません)

```
$ tar zxvf packer-git.tar.gz
```

+ 展開したディレクトリに移動します。以下のコマンドを実行してください、

```
$ cd packer-git
```

+ パッケージをビルドします。依存パッケージの不足がある場合に自動的にインストールするために、`-s`オプションをつけて実行します。途中でインストールを促されたパッケージはインストールしてください。

```
$ makepkg -s
```

+ ビルドが完了すると`packer-git-[バージョン名]-any.pkg.tar.xz`のようなファイルがディレクトリ内に生成されますので、これをインストールします。次のコマンドを実行してください。

```
$ sudo pacman -U packer-git-[バージョン名]-any.pkg.tar.xz
```

+ 正常に動作するか確認します。`packer`と入力して実行し、以下のようにヘルプが表示されれば成功です。

```
$ packer
usage: packer [option] [package] [package] [...]

    -S           - installs package
    -Sd[d]       - skips dependency version checks
    -Syu|-Su     - updates all packages, also takes -uu and -yy options
    -Ss|-Ssq     - searches for package
    -Si          - outputs info for package
    -G           - download and extract aur tarball only

    --quiet      - only output package name for searches
    --force      - bypass file conflict checks
    --ignore     - takes a comma-separated list of packages to ignore
    --noconfirm  - do not prompt for any confirmation
    --noedit     - do not prompt to edit files
    --quickcheck - check for updates and exit
    --aur        - include AUR actions
    --devel      - update devel packages during -Su
    --skipinteg  - when using makepkg, do not check md5s
    --preview    - edit pkgbuild before sourcing
    --help       - outputs this message
```

##### gpdfandのインストール
排気ファンの制御を自動的に行ってくれる`gpdfand`をインストールします。AURに`gpdfand-git`として登録されていますが、つまづきやすいポイントがありますので、その部分について重点的に解説します。

+ gpdfandの依存パッケージの一つである`perl-log-dispatch`を先にインストールしてしまいます。AURには登録されていますが、PKGBUILDファイルに記述されているソースコードのリンクが変更されたため、これを変更する必要があります。(最新版のソースファイルに差し替えてもうまく行かなかったため、同一バージョンのソースファイルのリンクを修正してビルドします)以下のコマンドを実行して、PKGBUILDファイル等をダウンロードします。

```
$ wget https://aur.archlinux.org/cgit/aur.git/snapshot/perl-log-dispatch.tar.gz
```

+ ダウンロードしたアーカイブを展開します。以下のコマンドを実行してください。(Nautilus上で展開しても問題ありません)

```
$ tar zxvf perl-log-dispatch.tar.gz
```

+ 展開したディレクトリに移動します。以下のコマンドを実行してください、

```
$ cd perl-log-dispatch
```

+ `PKGBUILD`ファイルをエディタで開き、15行目の`source('[ソースファイルのURL]')'`のURL部分を、`https://cpan.metacpan.org/authors/id/D/DR/DROLSKY/Log-Dispatch-2.57.tar.gz`に置き換えて保存します。

+ 依存パッケージの不足がある場合に自動的にインストールするために、`-s`オプションをつけて実行します。途中でインストールを促されたパッケージはインストールしてください。

```
$ makepkg -s
```

+ ビルドが完了すると`perl-log-dispatch-[バージョン名]-any.pkg.tar.xz`のようなファイルがディレクトリ内に生成されますので、これをインストールします。次のコマンドを実行してください。

```
$ sudo pacman -U perl-log-dispatch-[バージョン名]-any.pkg.tar.xz
```

+ gpdfand-gitをインストールします。AURパッケージですので通常は手動でビルドしますが、依存パッケージが多いため、`packer`を使用してインストールしていきます。以下のコマンドを実行してください。途中でインストールを促されたパッケージは全てインストールしてください。パスワード入力が求められた際も入力してください。

```
$ packer -S gpdfand-git
```

+ インストールが完了したら、以下のコマンドを入力してgpdfandデーモンを有効化します。以後、温度に応じて自動的にファンが回転するようになります。

```
$ sudo systemctl start gpdfand.service
$ sudo systemctl enable gpdfand.service
```

##### カスタムカーネルのビルド・インストール
カーネルのビルド作業は非常にCPUに負荷がかかるため、GPD Pocket以外のLinux(x86_64)環境で行うことをお勧めします。

###### ビルド
+ ビルド用ディレクトリ(ない場合は作成)に移動し、カスタムカーネルのソースファイルを取得します。以下のコマンドを実行し、最新のマスターツリーをダウンロードします。

```
$ git clone --depth 1 https://github.com/jwrdegoede/linux-sunxi.git
```

+ ダウンロード完了後、ディレクトリ内に移動します。以下のコマンドを実行してください。

```
$ cd linux-sunxi
```

+ ソースツリーをクリーンにします。以下のコマンドを実行してください。(ダウンロード直後の場合は飛ばしても構いません)

```
$ make clean
```

+ カスタムカーネルをビルドします。お使いのPCの性能にもよりますが、非常に時間がかかりますので注意してください。筆者の場合、ArchLinuxをネイティブ動作させているMacBook Air 2016を使用して、45分程度かかりました。また、`-j4`の数字部分は、お使いのPCのCPUの使用したいコア数を入力してください。(論理コアで指定)以下のコマンドを実行してください。

```
$ make -j4
```

+ カーネルのビルドが完了したら、ビルドディレクトリごとtar形式でまとめます。(tar.gz等でも構いません。ここではtarを生成します)以下のコマンドを実行してください。

```
$ cd ..
$ tar cvf linux-sunxi.tar linux-sunxi
```

+ tarファイルの生成が完了したら、tarファイルをGPD Pocketの作業ディレクトリに移動してください。

+ tarファイルを作業ディレクトリに展開します。以下のコマンドを実行してください。

```
$ tar xvf linux-sunxi.tar
```

+ 展開したディレクトリ内に移動します。以下のコマンドを実行してください。

```
$ cd linux-sunxi
```

+ カーネルモジュールをインストールします。以下のコマンドを実行してください。

```
$ sudo make modules_install
```

+ モジュールのインストールが完了したら、インストールされたカーネルのバージョン名を確認します。以下のコマンドを実行し、末尾に`-ARCH`とついていないカーネルを探します。

```
$ ls /lib/modules
4.12.6-1-ARCH  4.13.0-rc3+(←今回はこの値を覚えておきます)  extramodules-4.12-ARCH
```

+ カスタムカーネルのブートローダーをインストールします。`vmlinuz-linux`の後につける値は区別できれば何でも構いませんが、インストールされたカスタムカーネルのバージョン名を参考にすることをお勧めします。以下のコマンドを実行してください。

```
$ sudo cp -v arch/x86_64/boot/bzImage /boot/vmlinuz-linux-413
```

+ カスタムカーネルのinitramfsを作成します。命名規則は、先ほど末尾につけた値と揃えることをお勧めします。`-k`の後のカーネル名は、先ほど覚えておいた値を入力します。以下のコマンドを実行してください。

```
$ sudo mkinitcpio -k 4.13.0-rc3+ -g /boot/initramfs-linux-413.img
```

+ カスタムカーネルのブートエントリを作成します。標準カーネルのブートエントリを流用します。以下のコマンドを実行して、ブートエントリをコピーします。

```
$ sudo cp /boot/loader/entries/arch.conf /boot/loader/entries/arch-413.conf
```

+ コピーした`/boot/loader/entries/arch-413.conf`をエディタで開き、`title`を編集し、先ほど生成したブートローダ、initramfsの値を入力します。

```
title          Arch Linux-413
linux          /vmlinuz-linux-413
initrd         /intel-ucode.img
initrd         /initramfs-linux-413.img
options        root=PARTUUID=[PARTUUIDの値] rw i915.fastboot=1 fbcon=rotate:1
```

+ ブート設定を編集します。/boot/loader/loader.confを開き、`default`の値を変更します。timeoutのコメントアウトを外さない場合は、ブートメニューが表示されずに起動を開始します。

```
timeout 3
default arch-413.
```

+ 設定が完了したら一度再起動し、カスタムカーネルでの起動。ログインが可能なことを確認します。その後、キーボード上のディスプレイの明るさ調整キーを操作して、ディスプレイの明るさが変化することを確認してください、

##### 無線LANデバイスの設定
+ 無線LANデバイスのドライバファイルを入手します。以下のコマンドを実行するか、[こちらのアドレス](https://fedorapeople.org/~jwrdegoede/brcmfmac4356-pcie.txt)にwebブラウザからアクセスして保存してください。

```
$ wget https://fedorapeople.org/~jwrdegoede/brcmfmac4356-pcie.txt
```

+ 保存したドライバファイルを、GPD Pocketのドライバ配置場所に上書きします。以下のコマンドを実行してください。

```
$ sudo cp brcmfmac4356-pcie.txt /lib/firmware/brcm
```
+ ドライバの配置が完了したら、システムを再起動し、起動。ログイン後に画面右上のWi-Fi設定メニューからアクセスポイントの検索・認証キーの入力・アクセスポイントへの接続が可能なことを確認してください。

##### オーディオ出力の設定
+ `pulseaudio`をインストールします。以下のコマンドを実行してください。

```
$sudo pacman -S pulseaudio
```

+ オーディオ出力の設定ファイルを入手します。作業ディレクトリに移動し、以下のコマンドを実行してください。

```
$ git clone --depth 1 https://github.com/stockmind/gpd-pocket-ubuntu-respin.git
```

+ ダウンロードが完了したら、以下のコマンドを実行して設定ファイルのあるディレクトリに移動してください、

```
$ cd gpd-pocket-ubuntu-respin/audio
```

+ シェルスクリプトに実行権限を付加します。次のコマンドを実行してください。

```
$ sudo chmod +x wrapper-audio.sh
```

+ シェルスクリプトを実行します。以下のコマンドを実行してください。

```
sudo ./wrapper-audio.sh
```

+ 実行が完了したら一度再起動し、起動・ログイン後に音声が出力されることと、キーボード上の音量調整キーで音量が変化することを確認してください。

##### 日本語入力設定
fcitxを使う場合はビルド作業が必要ないなど簡単ではありますが、fcitxは現状waylandに対応していないため、今回はibusを使用して入力できるように設定します。また、ビルドはibusがインストールされているArchLinuxで行ってください。fcitxなどが動作している環境で実行すると、設定を破壊する可能性があります。筆者はibusが動作している環境が他に無く、すぐに用意できなかったため、GPD Pocket上でビルドしましたが、推奨はしません。カーネルをビルドしたPC上でchroot監獄等を使用して専用環境を作るといったことをお勧めします。

+ mozcのPKGBUILDファイル等をダウンロードします。作業ディレクトリに移動し、以下のコマンドを実行してください。

```
$ wget https://aur.archlinux.org/cgit/aur.git/snapshot/mozc.tar.gz
```

+ ダウンロードしたアーカイブを展開します。以下のコマンドを実行してください。

```
$ tar zxvf mozc.tar.gz
```

+ 展開したディレクトリ内に移動します。以下のコマンドを実行してください。

```
$ cd mozc
```

+ デフォルトのままビルドすると、起動時にmozcの入力モードが常にDirect(直接入力)になってしまうため、前回設定した値を記憶するように設定してからビルドします。そのための設定を済ませたソースをフォークして作ってくれている方がいらっしゃいましたので、PKGBUILDのソースファイルのダウンロード先を変更します。

```
source=(
  mozc::git+https://github.com/Ranats/mozc.git (←このURLに変更)
  http://downloads.sourceforge.net/project/pnsft-aur/mozc/x-ken-all-${_zipcoderel}.zip
  http://downloads.sourceforge.net/project/pnsft-aur/mozc/jigyosyo-${_zipcoderel}.zip
)
```

+ パッケージをビルドします。依存パッケージの不足がある場合に自動的にインストールするために、`-s`オプションをつけて実行します。途中でインストールを促されたパッケージはインストールしてください。

```
$ makepkg -s
```

+ 次のようなエラーが発生して、ビルドが中断します。

```
/home/sak/build/test/PKGBUILD: line 64: /home/sak/build/test/src/mozc/src/data/version/mozc_version_template.bzl: No such file or directory
==> ERROR: pkgver is not allowed to be empty.
==> ERROR: pkgver() generated an invalid version:
```

+ 不足しているファイルをオリジナルのツリーより追加します。以下のコマンドを実行してください。

```
$ mkdir ./src/mozc/src/data/version
$ wget -P ./src/mozc/src/data/version https://raw.githubusercontent.com/google/mozc/master/src/data/version/mozc_version_template.bzl
```

+ 再度パッケージをビルドします。

```
$ makepkg -s
```

+ ビルドが完了すると`mozc-[バージョン名]-x86_64.pkg.tar.xz`と`ibus-mozc-[バージョン名]-x86_64.pkg.tar.xz`のようなファイルがディレクトリ内に生成されますので、これをインストールします。次のコマンドを実行してください。

```
$ sudo pacman -U mozc-[バージョン名]-x86_64.pkg.tar.xz ibus-mozc-[バージョン名]-x86_64.pkg.tar.xz
```

+ インストール完了後、言語入力の設定をします。右上(縦向き表示の場合は左上)に表示される下向き三角をクリックします。

+ ドライバーとスパナが交差したアイコンが表示されますので。クリックし、All Settings画面を表示します。

+ Region & Languageをクリックします。

+ 設定画面が表示されますので、Imput Sources枠の[+]ボタンをクリックします。

+ Add an Imput Sourceというウインドウが表示されますので、Japanese→Japanese (Mozc)とクリックします。

+ ウインドウ右上の[Add]ボタンをクリックします。

+ Input Sources枠にJapanese (Mozc)が追加されていることを確認します。

+ `Super`+`Space`を押し、入力方法の切り替えアイコンが表示されます。キーの組み合わせは、All Settings→Keyboard→Typingで設定できます。

+ Japanese (Mozc)の状態で、右上の[A▼]と表示されている部分をクリックすると、設定メニューが表示されます。[Imput Mode (A) ▶]→[Hiragana]とクリックします。

+ 右上部分の表示が[あ▼]となれば設定完了です。以後、`Super`+`Space`の組み合わせで日本語と英語入力を行き来できます。

### 最後に
お疲れ様でした。丁寧に記述した分長くなりましたが、導入の助けになれば幸いです。筆者は以上の導入作業に色々と嵌り、一週間をかけて完了しましたので、皆様が一回で導入を完了できることを願っております。