Money Forward Developers Blog

株式会社マネーフォワード公式開発者向けブログです。技術や開発手法、イベント登壇などを発信します。サービスに関するご質問は、各サービス窓口までご連絡ください。

20230215130734

MacにUbuntuを入れるとOSXより起動が速い

最近中途入社した卜部です。よろしくおねがいします。諸事情にてLinuxを使います。Macで。

結論からいうと

OSXより起動が速いです。

経緯など

弊社はお客様の大切な情報を扱っています。情報セキュリティにはとても気を遣っています。通常であれば意味もなくOSの再インストールなどは行いません。

とはいえ卜部の業務は社業とは直接関係しません。そもそもお客様の大切な情報といったものに卜部がアクセスできてしまう方がリスキーといえます。そこで「production環境にそもそもログインできなくする」「オープンソースではないソースコードをそもそもgit cloneしないようにする」等の運用方針で、リスクをじゅうぶんに低減できると考えたため、普段使いのパソコンとしてLinuxを利用できるか試してみることにしました。

今回はMacに最初から入っているOSXを全部消してUbuntu Desktopを入れることにします。

準備

今回は以下のものを用意しました。

  • MacBook Air (11inch, early 2015)
  • Thunderbolt to Gigabit Ethernet Adapter
  • DVDドライブとUbuntuのメディア

Ethernetはインストール途中でインターネットに接続するため必要です。無線LANは地雷の予感がしたので試してませんが、意外に普通に認識した可能性もあります。ドライブはインストールメディアのためです。たぶんUSBディスクでもいい。

Macを外部ディスクから起動する話

普通にMacを起動しようとしても内蔵SSDから起動してきてしまいます。なのでそのままではインストールメディアを使えません。そこで起動時に例の音を聞いた直後にキーボードのoptionを押しっぱなしにします。するとこのような画面が出ます

1

ここから起動ディスクが選べて、無事にインストールメディアから起動できるようになります。

ディスクが見えない(ことがある)

ところでこのMacは構成が結構新しいようです。ここでlspciすると以下のように見えます。
2

結構いろいろなものがPCIの先に見えますね。いくつか興味深いですが、ポイントは 04:00.0 Mass storage controller: Apple Inc. PCI Express SSD (rev 01) というやつで、これは軽く検索したところによるとNVM Express接続のSSDのようです。LinuxにもNVMeドライバがmainlineにもう入っているので時間の問題とは思いますけれども、今普通にインストールディスクに入っているkernelでは古すぎてSSDが見えないということはありえます。Ubuntu Wilyでは認識しませんでした。これを書いている時点でのUbuntu Xenial dailyでは認識します。そんな微妙な感じのようです。

SSDが見えないときはKernelのバージョンの問題かもしれないので、あきらめて新しめのOSを使うべきかもしれませんね。

OSインストールしたけど起動してこない

さて、とりあえずSSDの件は突破したことにして、OSをインストールしましょう。普通にErase disk and install Ubuntuを選択すると、正常っぽくインストールが終了して、以下のようにパーティションが切られました。

root@MacBookAir:~# parted 
GNU Parted 3.2
Using /dev/nvme0n1
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
Model: Unknown (unknown)
Disk /dev/nvme0n1: 251GB
Sector size (logical/physical): 4096B/4096B
Partition Table: gpt
Disk Flags: 

Number  Start   End    Size    File system     Name            Flags
 1      1049kB  538MB  537MB   fat32           EFI
 2      538MB   243GB  242GB   ext4
 3      243GB   251GB  8487MB  linux-swap(v1)

(parted) q
root@MacBookAir:~# 

EFI領域に512Mは多すぎという気がしますがデフォルトだしまあ無害ではあるでしょう。ただ、VFATというのが問題です。Macの場合UEFIではない俺EFIなので、Ubuntuのインストーラが普通に作成したEFIパーティションを認識せず、このままでは起動しません。なんとかする必要があります。今回は参考文献 Ubuntu + Mac: Pure EFI Bootを見ながら、以下の手順で起動に持っていきました。

  1. とりあえずまたインストールメディアで起動して、GRUBメニューから"Try Ubuntu without installing"にすすむ。
  2. 起動してきたらCtrl+Alt+TしてTerminalを起動
  3. 内蔵SSDをマウントしてchrootする

    ubuntu@ubuntu:~$ sudo mount /dev/nvme0n1p2 /mnt
    ubuntu@ubuntu:~$ cd /mnt
    ubuntu@ubuntu:/mnt$ sudo mount --bind /dev dev
    ubuntu@ubuntu:/mnt$ sudo mount -t proc proc proc
    ubuntu@ubuntu:/mnt$ sudo mount -t sysfs sys sys
    ubuntu@ubuntu:/mnt$ sudo chroot /mnt
    root@MacBookAir:/# 
    
  4. (自分の場合だけかもしれないが)名前解決がアレな感じだったので一時的に8.8.8.8を突っ込む

    root@MacBookAir:/# echo nameserver 8.8.8.8 >> /etc/resolv.conf
    
  5. 必要なパッケージを自摸

    root@MacBookAir:/# add-apt-repository ppa:detly/mactel-utils
    root@MacBookAir:/# sed -i.save -e 's/xenial/vivd/gi' /etc/apt/sources.list.d/detly-ubuntu-mactel-utils-xenial.list
    root@MacBookAir:/# apt-get update
    root@MacBookAir:/# apt-get install mactel-boot hfsprogs gdisk grub-efi-amd64
    

    途中のsedはびみょいけど、あまり新しいバイナリパッケージがなさそうなので、緊急的にはしゃあないかなと思いました。動くし。雑で申し訳ないです。本来的にはbuild-essential持ってきてソースからコンパイルし直すべきではあります。

  6. EFIパーティションをHFS+に戻す。

    root@MacBookAir:/# gdisk /dev/nvme0n1
    GPT fdisk (gdisk) version 1.0.1
    
    Partition table scan:
      MBR: hybrid
      BSD: not present
      APM: not present
      GPT: present
    
    Found valid GPT with hybrid MBR; using GPT.
    
    Command (? for help): d
    Partition number (1-3): 1
    
    Command (? for help): n
    Partition number (1-128, default 1):  
    First sector (6-61279338, default = 256) or {+-}size{KMGTP}: 
    Last sector (256-131327, default = 131327) or {+-}size{KMGTP}: 
    Current type is 'Linux filesystem'
    Hex code or GUID (L to show codes, Enter = 8300): AF00
    Changed type of partition to 'Apple HFS/HFS+'
    
    Command (? for help): p
    Disk /dev/nvme0n1: 61279344 sectors, 233.8 GiB
    Logical sector size: 4096 bytes
    Disk identifier (GUID): 3FB4F2FB-06D6-421D-9BD0-F4211D676B22
    Partition table holds up to 128 entries
    First usable sector is 6, last usable sector is 61279338
    Partitions will be aligned on 256-sector boundaries
    Total free space is 357 sectors (1.4 MiB)
    
    Number  Start (sector)    End (sector)  Size       Code  Name
       1             256          131327   512.0 MiB   AF00  Apple HFS/HFS+
       2          131328        59207167   225.4 GiB   8300  
       3        59207168        61279231   7.9 GiB     8200  
    
    Command (? for help): w
    
    Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!!
    
    Do you want to proceed? (Y/N): Y
    OK; writing new GUID partition table (GPT) to /dev/sda.
    Warning: The kernel is still using the old partition table.
    The new table will be used at the next reboot.
    The operation has completed successfully.
    

    からの

    root@MacBookAir:/# mkfs.hfsplus /dev/nvme0n1p1
    
  7. EFIパーティションをマウント

    root@MacBookAir:/# mount /dev/nvme0n1p1 /boot/efi
    
  8. GRUB入れ直し

    root@MacBookAir:/# mkdir -p /boot/efi/EFI/Ubuntu/
    root@MacBookAir:/# touch /boot/efi/EFI/Ubuntu/mach_kernel
    root@MacBookAir:/# touch /boot/efi/mach_kernel
    root@MacBookAir:/# grub-install -target x86_64-efi --boot-directory=/boot --efi-directory=/boot/efi --bootloader-id=Ubuntu
    root@MacBookAir:/# hfs-bless /boot/efi/EFI/Ubuntu/System/Library/CoreServices/boot.efi
    

これでとりあえず起動してくるようになります。

起動が遅い

さて、これで一応使えるわけですが、実際には起動をOSXより速く持っていくにはいくつかの追加作業が必要でした。

cryptswap

最近のLinuxではswapからの情報漏洩を懸念してswapパーティションの暗号化が行われています。これは安心ではありますが、起動するたびにswap暗号鍵を入力させられて、下図のような画面で起動が止まってしまいます。うれしくないですね。
3

というわけでswapなどという前時代的な機構は捨てます。そんなことよりメモリ積もう。

root@MacBookAir:~# apt-get install moreutils
root@MacBookAir:~# fgrep -vi swap /etc/fstab | sponge /etc/fstab
root@MacBookAir:~# fgrep -vi swap /etc/crypttab | sponge /etc/crypttab

efibootmgr

EFIにOSXから起動する時の設定の残滓が残っていますのでこれは削除します。起動が5秒ほど速くなります。

root@MacBookAir:~$ efibootmgr -t 0
BootCurrent: 0000
Timeout: 0 seconds
BootOrder: 0000
Boot0000* ubuntu
BootFFFF* 

Timeout: 0 secondsが見えてればOK。

まとめ

おもにハードウエアやファームウエアの事情で、ぽちぽちとクリックしていけば終わりというほど簡単ではありませんでしたが、一応MacにUbuntuを入れることは可能で、入れてしまえば快適に使えました。しかも起動も速いし。インストール前にはWifiやBluetoothなどにも一抹の不安を感じていましたが結果的には拍子抜けの感じで使えているので、皆さんも事情が許すなら積極的にLinuxにしていくといいと思いました。サーバでLinux使ってるなら、手元も同じにすることの利点は多いです。環境の違いとかで悩まなくてよくなります。

ちなみに試してませんが、OSXに戻したくなったら多分インターネット復元で戻せるんだと思っています。

最後に

マネーフォワードでは、各種エンジニアを募集しています。ご応募お待ちしています。

【採用サイト】
マネーフォワード採用サイト
Wantedly | マネーフォワード

【プロダクト一覧】
家計簿アプリ・クラウド家計簿ソフト『マネーフォワード』
家計簿アプリ・クラウド家計簿ソフト『マネーフォワード』 iPhone,iPad
家計簿アプリ・クラウド家計簿ソフト『マネーフォワード』 Android
クラウド型会計ソフト『MFクラウド会計』
クラウド型請求書管理ソフト『MFクラウド請求書』
クラウド型給与計算ソフト『MFクラウド給与』
経費精算システム『MFクラウド経費』
消込ソフト・システム『MFクラウド消込』
マイナンバー対応『MFクラウドマイナンバー』
創業支援トータルサービス『MFクラウド創業支援サービス』
お金に関する正しい知識やお得な情報を発信するウェブメディア『マネトク!』