ASUSノートPC X202E: EFIによるFedora18とWindows8のマルチブート

前回まで3回続けてブログに書いたLinuxのマルチブートの中から、今回は今年、2013年1月15日にリリースされたFedora18のインストール手順のポイントを書きます。

[ インストールメディア ]

理化学研究所のサイトからFedora18の64ビット版ISOイメージをダウンロードし、DVDに焼いて、外付けUSBドライブでインストールしました。
http://ftp.riken.jp/Linux/fedora/releases/18/Fedora/x86_64/iso/Fedora-18...

[ EFIの設定 ]

  • CSMはdisableに設定する
  • SecureBootはenableでもdisableでも、どちらも可能

    enableでインストールすれば、インストール後にenableでもdisableでも起動できる
    enableでDVDから起動すると、GRUBメニューが表示される前に「Binary is verified by the vendor certificate」と表示される

    disableでインストールすれば、インストール後にdisableで起動できる
    disableでDVDから起動すると、GRUBメニューが表示される前に「Secure boot not enabled」と表示される

  • インストール後にEFIからFedora18のブートローダを起動する場合は、EFIの設定画面のBoot Option Prioritiesの設定で、Fedora18のブートエントリを最上位に設定する。 (参考)→[EFI設定画面 - CSMとBoot Option Prioritiesの設定]

  • [ パーティション ]

    Windows8のData(D:)ドライブは空なので、この258GBのパーティションを削除し、出来た空き領域をLinuxのパーティションとして利用しました。

    「コンピュータ」の画面の抜粋

    「ディスクの管理」の画面の抜粋

     ↓ Dada(D:)のパーティションを削除

    Fedora18をインストールして立ち上げた後のパーティションは次のようになりました。
    GPT(GUID Partition Table)対応のコマンドとしては、gdisk, parted, gparted(グラフィカルなツール)があります。
    fdiskコマンドはGPTに対応していません。

    # gdisk -l /dev/sda
    ...(途中省略)...
    Number  Start (sector)    End (sector)  Size       Code  Name
       1            2048          616447   300.0 MiB   EF00  EFI system partition      ← Windows8が利用するEFIシステムパーティション
       2          616448         2459647   900.0 MiB   2700  Basic data partition
       3         2459648         2721791   128.0 MiB   0C01  Microsoft reserved part
       4         2721792       393431039   186.3 GiB   0700  Basic data partition      ← Windows8
       5       393431040       456919039   30.3 GiB    EF00                  ← Scientific Linux 6.4(今回の内容に関係無し)
       6       934809600       976773119   20.0 GiB    2700  Basic data partition
       7       456919040       457328639   200.0 MiB   EF00  EFI System Partition      ← Fedora18のEFIシステムパーティション
       8       457328640       457738239   200.0 MiB   0700                  ← Fedora18の/boot
       9       457738240       521226239   30.3 GiB    0700                  ← Fedora18の/
      10       521226240       522864639   800.0 MiB   8200                  ← Linux swap
    ...(以下、関係ないパーティションは表示を省略)...
    
    注)
    Fedora18のインストーラはWindow8のEFIパーティション(/dev/sda1)を使わず、独自のEFIパーティション(/dev/sda7)を設定します。
    そのままインストールしました。
    インストール時に/dev/sda1を/boot/efiにマウントするように変更も可能かも知れませんが、それで大丈夫か不明です。
    
    # df -T -x tmpfs -x rootfs -x devtmpfs
    ファイルシス   タイプ  1K-ブロック    使用    使用可 使用% マウント位置
    /dev/sda9      ext4       31114160 4968076  24558884   17% /
    /dev/sda8      ext4         194241  109272     74729   60% /boot
    /dev/sda7      vfat         204580    7316    197264    4% /boot/efi
    /dev/sda1      vfat          303104   57900    245204   20% /mnt/sda1
    
    # ls -l /boot/efi/EFI/fedora/shim.efi         ← SecureBoot enableの時のブートローダ
    -rwx------. 1 root root 1370230 12月 17  2012 /boot/efi/EFI/fedora/shim.efi
    # ls -l /boot/efi/EFI/fedora/grubx64.efi        ← SecureBoot disableの時のブートローダ
    -rwx------. 1 root root 122880  7月 20 20:32 /boot/efi/EFI/fedora/grubx64.efi
    # ls -l /mnt/sda1/EFI/Microsoft/Boot/bootmgfw.efi    ← Windows8のブートローダ
    -rwxr-xr-x. 1 root root 1354480  7月 25  2012 /mnt/sda1/EFI/Microsoft/Boot/bootmgfw.efi
    

    [ grub.cfgの設定 -1- ]

    インストール後のgrub.cfgではWidnows8を起動できない。以下のように書き換えます。

    menuentry "Windows 8 (on sda4)" {
      insmod part_gpt
      insmod fat
      insmod search_fs_uuid
      insmod chain
      search --fs-uuid --set=root --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1 e6fe-8c63
      chainloader /efi/Microsoft/Boot/bootmgfw.efi
    }
    
    上記の/dev/sda1のファイルシステムUUID e6fe-8c63 の部分はblkidコマンドで確認して適切な値に書き換えます。
    # blkid /dev/sda1
    /dev/sda1: LABEL="SYSTEM" UUID="E6FE-8C63" TYPE="vfat" PARTLABEL="EFI system partition" PARTUUID="ed04135b-bd79-4c7c-b3b5-b0f9c2fe6826"
    

    [ grub.cfgの設定 -2- ] ← (2013年8月8日に追記)

    システムの起動時、GRUBメニューが表示される前に以下のエラーメッセージが表示される場合があります。(実質、動作上は支障はないですが)

     error: file '/EFI/fedora/locale/ja.gmo' not found.

    CSMがenableでのインストールの場合(Legacy BIOSからのインストール)、あるいは場合によってCSMがdisableの時も、grub2-toolsパッケージのインストール時に/usr/share/locale/ja/LC_MESSAGES/grub.moが/boot/grub2/locale/の下にja.moの名前でコピーされるが、どうもSecure Bootをenableにしてインストールした時だけは(←たぶん)、/EFI/fedora/locale/ディレクトリも作成されず、ファイルもコピーされない。エラーメッセージはこれが原因です。
    したがって、次のようにlocaleディレクトリを作成し、その下にja.moファイルをコピーすればエラーは出なくなります。

     # mkdir /boot/efi/EFI/fedora/locale
     # cp /usr/share/locale/ja/LC_MESSAGES/grub.mo /boot/efi/EFI/fedora/locale/ja.mo

    参考:
    .po ファイル: Portable Object、.moファイル: Machine Object, .gmoファイル: GNU Gettext Machine Object
    .poファイルはテキストファイルで、.moファイルはバイナリファイル。.poファイルから.moファイルを生成する。
    .moファイルと.gmoファイルはサフィックス名が違うが中身は同じ。
    msgidの値に対応したmsgstrの値として日本語メッセージが格納されているファイルでメッセージカタログと呼ばれる。
    /usr/share/locale/ja/LC_MESSAGES/grub.moにはGRUBが利用する日本語メッセージが格納されている。
    msgfmtコマンドで.po→.moの変換、msgunfmtコマンドで.mo→.poの変換ができる。

     # msgunfmt /usr/share/locale/ja/LC_MESSAGES/grub.mo
     (表示を抜粋)
     msgid "%s: error:"
     msgstr "%s: エラー:"

     msgid "%s: info:"
     msgstr "%s: 情報:"

    [ イーサネットI/Fドライバの組み込み ]

    X202Eには無線LANとイーサネットのコントローラチップが搭載されています。
    このうち無線LANのドライバ ath9k.ko は入っているのでそのまま使えますが、イーサネットコントローラのドライバ alx.ko がFedora18には入っていないので使えません。

    # lspci | tail -2
    02:00.0 Network controller: Atheros Communications Inc. AR9485 Wireless Network Adapter (rev 01)
    03:00.0 Ethernet controller: Atheros Communications Inc. AR8162 Fast Ethernet (rev 10)
    
    そこでソースをダウンロードし、コンパイルしてドライバ alx.ko を生成し、組み込みました。
    手順:
    以下のURLからcompat-drivers-2013-03-04-u.tar.bz2をダウンロード
    https://www.kernel.org/pub/linux/kernel/projects/backports/2013/03/04/co...
    
    $ tar xvf compat-drivers-2013-03-04-u.tar.bz2
    $ cd compat-drivers-2013-03-04-u
    $ ls
    COPYING      Makefile     README.md         compat     drivers               include  patches  udev
    MAINTAINERS  Makefile.bk  code-metrics.txt  config.mk  enable-older-kernels  net      scripts
    $ ./scripts/driver-select alx
    $ make
    $ su
    パスワード: xxxxxx
    # make install
    # modprobe alx
    # lsmod | grep alx
    alx                    68386  0 
    compat                 13168  1 alx
    mdio                   13435  2 alx,cxgb3
    # ifconfig
    ..........
    p3p1: flags=4163  mtu 1500
            inet 172.16.210.179  netmask 255.255.0.0  broadcast 172.16.255.255
    ..........
    wlan0: flags=4163  mtu 1500
            inet 172.16.210.180  netmask 255.255.0.0  broadcast 172.16.255.255
    ..........
    
    注)
    上記手順のみで生成したalx.koはSecure Boot がdisableの時にロードできる。
    Secure Bootがenableの時はmodprobe実行時に次のエラーが出てロードできない。
    
     # modprobe alx
     modprobe: ERROR: could not insert 'alx': Required key not available
    
    Secure Bootがenableの時にロードするためには、カーネル生成時の鍵でモジュールに署名する必要がある。
    

    [ Windows8の設定 ]

    Linuxをインストールした後、Windows8を立ち上げるとLinuxのパーティションが適当なドライブ文字を付けて表示されます。
    誤ってアクセスして壊したりしないように非表示に設定しました。

    手順:
    「ディスクの管理」画面 → パーティションにポインタを合わせて右クリック → 「ドライブ文字とパスの変更」 → ドライブ文字を削除

    次回は今年、2013年7月2日にリリースされたFedora19のインストール手順を書きます。