最近中途入社した卜部です。よろしくおねがいします。諸事情にて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を押しっぱなしにします。するとこのような画面が出ます
ここから起動ディスクが選べて、無事にインストールメディアから起動できるようになります。
ディスクが見えない(ことがある)
ところでこのMacは構成が結構新しいようです。ここでlspci
すると以下のように見えます。
結構いろいろなものが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を見ながら、以下の手順で起動に持っていきました。
- とりあえずまたインストールメディアで起動して、GRUBメニューから"Try Ubuntu without installing"にすすむ。
- 起動してきたらCtrl+Alt+TしてTerminalを起動
-
内蔵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:/#
-
(自分の場合だけかもしれないが)名前解決がアレな感じだったので一時的に8.8.8.8を突っ込む
root@MacBookAir:/# echo nameserver 8.8.8.8 >> /etc/resolv.conf
-
必要なパッケージを自摸
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持ってきてソースからコンパイルし直すべきではあります。 -
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
-
EFIパーティションをマウント
root@MacBookAir:/# mount /dev/nvme0n1p1 /boot/efi
-
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暗号鍵を入力させられて、下図のような画面で起動が止まってしまいます。うれしくないですね。
というわけで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クラウド創業支援サービス』
■お金に関する正しい知識やお得な情報を発信するウェブメディア『マネトク!』