前提
M2 Macで12ステップ本の環境構築をしようとしたところ、M2MacではVirtualBoxが使えないため著者から配布されているVMイメージが使えない、、と思ったが、UTMという別の仮想環境ツールを使うことで上手くいった。
各項目で参考にさせていただいたサイトを挙げています。この場を借りてお礼を申し上げます。ありがとうございます!
参照される際は、CentOSのバージョンの違いに注意してください。12ステップ本のVMイメージはCentOS6です。
仮想化手順
著者ページから入手したovaファイルをqcow2形式に変換する
tar -xvf makeos-CentOS-20150504.ova
qemu-img convert -O qcow2 makeos-CentOS-20150504-disk1.vmdk makeos-CentOS-20150504.qcow2
生成されたovfファイルから、仮想マシンのスペックを確認する。
ディスク容量:16GB
RAM容量:512MB
CPU数:1
該当箇所は下記の通り。
<DiskSection>
<Info>List of the virtual disks used in the package</Info>
<Disk ovf:capacity="17179869184" ovf:diskId="vmdisk2" ovf:fileRef="file1" ovf:format="http://www.vmware.com/interfaces/specifications/vmdk.html#streamOptimized" vbox:uuid="79cdd9cf-b8a7-4e97-ac22-020853dc3d26"/>
</DiskSection>
<Item>
<rasd:AllocationUnits>MegaBytes</rasd:AllocationUnits>
<rasd:Caption>512 MB of memory</rasd:Caption>
<rasd:Description>Memory Size</rasd:Description>
<rasd:ElementName>512 MB of memory</rasd:ElementName>
<rasd:InstanceID>2</rasd:InstanceID>
<rasd:ResourceType>4</rasd:ResourceType>
<rasd:VirtualQuantity>512</rasd:VirtualQuantity>
</Item>
<CPU count="1" hotplug="false">
<HardwareVirtEx enabled="true"/>
<HardwareVirtExNestedPaging enabled="true"/>
<HardwareVirtExVPID enabled="true"/>
<HardwareVirtExUX enabled="true"/>
<PAE enabled="true"/>
<HardwareVirtExLargePages enabled="false"/>
<HardwareVirtForce enabled="false"/>
</CPU>
UTMで上記スペックの仮想マシンを作成する
このとき、CPUアーキテクチャはi386にする。いろいろ試してみたが、アーキテクチャによらず起動時のメッセージを見るとi686から変わらずだった。詳細は未調査。
これで仮想マシンは作成できたので、開発に使えるようにセットアップしていく。
Linuxのセットアップ
sudoを使えるようにする
sudoersの設定コマンド
sudo visudo
wheelグループにパスワードなしでのsudoを許可する設定のコメントアウトを外す
%wheel ALL=(ALL) NOPASSWD: ALL
userをwheelグループに入れる
usermod -aG wheel user
キーボードレイアウトを変更
※日本語配列のMacを使用している場合は不要。
vim /etc/sysconfig/keyboard
KEYTABLE="us"
MODEL="PC105+inet"
LAYOUT="us"
KEYBOARDTYPE="pc"
再起動すれば反映される。
yumを使えるようにする
CentOS6のサポートが終了しており、既存のリポジトリURLが無効になっている。
下記ページを参考に、ミラーサイトのURLに書き換えることで上手くいった。
追加で1点変更として、/etc/yum.repos.d/CentOS-Base.repo
の$basearch
をi386
に置換した。仮想マシンのアーキテクチャはi686だが、i686だとURLが存在せず失敗したため。
サポート終了したCentOS6でyumがエラーになる場合の簡単な対処法([errno 14] problem making ssl connection)
なお、URLをi386にしたはずだけど、試しにyum install cifs-utilsをすると、*.i686がインストールされた。ChatGPTに聞くとi686とi386には互換性があるからOK的な回答をもらったけど、真偽は確かめてない。
共有フォルダを設定
CentOS側にMacの共有フォルダをマウント(あきらめた)
下記ページ(環境はCentOS7)を参考にやってみたが、smbclientでMacに接続できなかった。
(Apple/UTM)[https://web.chaperone.jp/w/index.php?Apple/UTM]
CentOS側で共有フォルダ作成し、Macから接続(成功)
参考:
VMware上のCentOSにSambaを用いてMacとの共有フォルダを作る
CentOS 6 sambaのインストール方法
CentOS側でsambaをインストール
sudo yum install samba
共有フォルダを作成
mkdir /home/samba
sudo chmod -R 0777 /home/samba/
sudo chown -R user:user /home/samba
セキュリティ設定(SELinux)
sudo chcon -t samba_share_t /home/samba/
sambaの設定
sudo cp -ap /etc/samba/smb.conf /etc/samba/smb.conf.bk
sudo vim /etc/samba/smb.conf
[samba]
comment = samba directory
path = /home/samba
public = yes
browseable = yes
writable = yes
hosts allow = 127. 192.168.
guest ok = no
sambaの設定ミスをチェック
testparm
Sambaのパスワードデータベースにユーザーを追加。
sudo pdbedit -a user
ファイアウォールの設定
/etc/sysconfig/iptables
を編集。最後のCOMMITよりも前にポート開放の設定を追加
sudo cp -ap /etc/sysconfig/iptables /etc/sysconfig/iptables.bk
sudo vim /etc/sysconfig/iptables
-A INPUT -p tcp --dport 139 -j ACCEPT
-A INPUT -p udp --dport 137 -j ACCEPT
-A INPUT -p udp --dport 138 -j ACCEPT
-A INPUT -p tcp --dport 445 -j ACCEPT
ここまでの設定変更を反映させる
/etc/rc.d/init.d/iptables restart
/etc/rc.d/init.d/smb restart
Macからアクセスする
Finderで、移動→サーバへ接続(⌘K)し、smb://<ip address>
を入力する。
は事前に仮想マシン上で書きコマンドを打ち、eth4のIPアドレスを確認しておく。
ip -4 addr
MacからCentOS6にSSH接続
CentOS6はRSAでの接続を求めてくるが、Mac側ではセキュリティ上の理由でRSA/SHA1 暗号方式の鍵 (ssh-rsa) がデフォルトで無効のため、設定変更して接続できるようにする。
Host makeos
HostKeyAlgorithms ssh-dss,ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa
HostName 192.168.64.7
User user
これで、下記コマンドによりSSH接続できるようになった。
ssh makeos
参考:
sshで急に接続できなくなった場合の対処方法 (no matching host key type found. Their offer: ssh-rsa,ssh-dss)
一度パスワード認証で接続できたら、公開鍵で入れるようにしておくと以降はパスワード設定がいらなくなるので便利。
下記コマンドで、ssh-keygen
でキーを秘密鍵(id_rsa)と公開鍵(id_rsa.pub)を生成して、ssh-copy-id
でCentOS側に生成した公開鍵を登録する。
ssh-keygen
ssh-copy-id -i ~/.ssh/id_rsa.pub makeos
FlashROMへの書き込み
USBを認識させる
MacにUSBシリアル変換ケーブルを接続し、UTMでUSBデバイスの使用を許可する
lsusb
で認識されているか確認する
[user@localhost bootload]$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 002: ID 0627:0001 Adomax Technology Co., Ltd
Bus 001 Device 003: ID 0627:0001 Adomax Technology Co., Ltd
Bus 001 Device 004: ID 0627:0001 Adomax Technology Co., Ltd
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 005 Device 002: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
FlashROMに書き込む
sudo h8write -3069 -f20 kzload.mot /dev/ttyUSB0
シリアル通信
インストール済みのminicomを利用した。
テキスト通りの手順でOKのため省略。