qemuを使ってDebianをVPS上にインストール

VPSではKVMがつかえないのでqemuを使う意味はないが複数のVMをリモートサーバーで使ってみたいということもあって実験的にインストールしてみました。

$ /home/uml/uml-debian# qemu-system-x86_64 -hda debian.img -cdrom debian-8.6.0-amd64-CD-1.iso -boot d -m 128 
Could not initialize SDL(No available video device) - exiting

このようにいきなりエラーがでたので検索してみると、ssh接続からだとグラフィカルなインストーラーは起動できないようです。そこで’-curses’オプションをつけて見たがやはりうまくいきません。vncなら起動できそうだということで次のようにしてqemuを起動してみた。

$ /home/uml/uml-debian$ qemu-system-x86_64 -hda debian.img -cdrom debian-8.6.0-amd64-CD-1.iso -boot d -m 128 -vnc :1

でサーバーから自宅のローカルマシーンまでsshトンネルで繋ぐので、まずはvncビュワーをインストールします。

# apt-get install xtightvncviewer

次にsshトンネルを掘ります。

$ ssh -f <user>@<server address> -L 5901:<server address>:5901 -N
$ vncviewer

VNCビューワーを起動して、localhost:1を打ち込むとインストール画面が現れます。あとはインストーラでエキスパートモードでネットワークは設定せず基本インストールでインストールしました。

Post Installation

/etc/default/grubを編集します。

#GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_TERMINAL=console

grubをアップデートします。

# update-grub2

sshのターミナルから起動します。

qemu-system-x86_64 -hda debian.img -m 128 -curses

Networking

host側:

# tunctl -t tap0 -u (user)
# ifconfig tap0 (host IP)/24 up
# route add -host (geust IP) dev tap0
# bash -c 'echo 1 > /proc/sys/net/ipv4/conf/tap0/proxy_arp'
# arp -Ds (guest IP) eth0 pub

qemuを立ち上げます。

$ qemu-system-x86_64 -hda debian.img -m 128 -curses -net nic,vlan=0 -net tap,vlan=0,ifname=tap0

Guest側:

# ifconfig eth0 (guest IP)/24 up
# route add default gw (host IP)
# route del -net (network) netmask 255.255.255.0 dev eth0
# route add -host (host IP) dev eth0

Guest VMのリポを設定します。

/etc/apt/sources.list

# deb cdrom:[Debian GNU/Linux 8.4.0 _Jessie_ - Official amd64 DVD Binary-1 20160402-14:46]/ jessie contrib main

deb http://ftp.jp.debian.org/debian/ jessie main non-free contrib

deb-src http://ftp.jp.debian.org/debian/ jessie main non-free contrib

deb http://security.debian.org/ jessie/updates main contrib non-free 
deb-src http://security.debian.org/ jessie/updates main contrib non-free

# jessie-updates, previously known as 'volatile' 
deb http://ftp.jp.debian.org/debian/ jessie-updates main contrib non-free 
deb-src http://ftp.jp.debian.org/debian/ jessie-updates main contrib non-free

以上で設定は完了です。

Android: Linuxディストリビューションをchrootで入れる

Android用のLinuxアプリをいろいろ試してみたところ、Linux Deployがよかったのでそれを元にDebianをインストールしました。XSDLサーバだとマウスの動きがおかしかったのでVNCにしたところ、思ったよりさくさくと動いてくれました。

結論から言うとインストールは難しい。まずアプリの画面からインストールすると途中で止まります。chrootでアクセスしようにもシェルがインストールされてないためできません。そこで同じアーキティチャーのChromebookのデスクトップからファイルのコンテナを作りそこにインストールします。そしてtarでアーカイブ化してスマホのファイルコンテナに展開します。まずはcroutonでchroot化したLinuxでコンテナを作成します。

# /usr/sbin/debootstrap --arch armhf jessie /mnt/debinst http://ftp.us.debian.org/debian

(注:同じarm環境で展開します。x86環境では動かないのでその場合はqemuを使います。

tarファイルとimgファイルは次の場所に保管しておきました。

https://labs.hottuna.tk/OpenWrt/stuff/android-arm7/

 

VNCではカーソルがおかしかったので次のように起動スクリプトに追加したら直りました。

xsetroot -solid grey -cursor_name left_ptr

SDカードではなく内部のフラッシュメモリにインストールしたので動作が軽快になり、これなら十分使えそうです。sshはアプリの設定で自動起動できるがvncの起動できなかったので、いったんログインして起動することになります。

VNCの設定

VNCはTightVNCを使用しました。Android特有のパミッションの問題は/etc/groupを編集します。

/etc/passwd:

_apt:x:116:3004::/nonexistent:/bin/false

ネットワークを使うには3004を指定します。gpasswdを使ってインプットします。

android_bt:x:3001:kalilinux,messagebus
android_bt-net:x:3002:kalilinux,messagebus
android_inet:x:3003:kalilinux,messagebus
android_net-raw:x:3004:kalilinux,messagebus,_apt

~/.vnc/xstartup:

#!/bin/sh

#unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS

xrdb $HOME/.Xresources:

xsetroot -solid grey -cursor_name left_ptr
#x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#x-window-manager &
# Fix to make GNOME work
export XKL_XMODMAP_DISABLE=1

#x-window-manager &
exec startxfce4

run_vnc.sh:

vncserver -geometry 980x560 -dpi 72 -localhost :1

client:

ssh {user}@{server} -L 5901:localhost:5901 -f -N
vncviewer localhost::5901

日本語環境

日本語環境はfcitxibus は作動しませんでした。scimは作動するのでscim+anthyが使えます。

Chromium ブラウザはChromebook: Samsung Chromebook(XE303C12)でcroutonを使うにある要領でインストールします。いくつかパッケージの依存関係があるのでaptで入れられるものはそれを使い、ないものはデビアンのパッケージ検索から引っぱってきてインストールします。

X2Go

vncに替わるもうひとつのリモートデスクトップ環境にX2Goがあります。こちらはデビアンのオフィシャルリポにはないため、X2Goサイトからインストールします。

 

サーバ側のスタートアップ

# x2godbadmin --createdb
# /etc/init.d/x2goserver start

vncのセットアップで作った~/.vnc/xstartup/usr/loca/binにコピーします。

Linux Deployの設定

Properties:

INT->Enable
Init system-> run-parts

SSH->Enable

X2Goはホスト名をせってしないと立ち上がらないので次のようにします。

/etc/rc.local:

hostname <hostname>

クライアント側のスタートアップ

$ x2goclient
  1. Session>New SessionでHost、Login、Session Type(Custom desktop)、Command(xstartup)とします
  2. Input/Output でデスクトップのサイズ、DPIを調整します。
  3. 右の窓の画面にセッション欄ができるのでそれをクリックすると、接続用画面が現れるのでパスワード入れOKをクリックするとスマホから送り出されたデスクトップが現れます。

References:

 

 

macOS Sierra: Windows PC(ThinkCenter M73)でEl Capitanからアップグレード

SierraのアップグレードファイルをダウンロードしたのでデスクトップのThinkcenter M73上でアップグレードしてみました。Cloverからアップグレードを試したところインストールディスクが灰色になってて出来ませんでした。それでUniBeastでUSBディスクを作り、それでアップグレードしてMultiBeastを使ってCloverとKextファイルをインストールというお決まりの手順でインストールしました。

注)EFIのバックアップを必ずとります。あとで必要になります。

MultiBeastの設定の覚え書きです。

ドライバーのタブのAudioドライバーはカタログからALC283を選択しました。この設定では内蔵スピーカーから音は出ないのでUSBスピーカーから音を出すようしました。

 

 

Miscドライバーは4項目をチェックしました。


ネットワークはAppleIntelを選択しました。


USB3をチェックしました。


CloverはUEFI環境なので該当する項目にチェックしました。

指定なし。

指定なし。

Mac 14.2を指定。

これでインストールして再起動します。

 

あとで気がついたがこのインストールでWindowsのEFIを破壊してしまうのでブートに失敗しました。その場合、F8のWindowsブートメニューのセーフモード起動でもなくWindowsインストールディスクでリペアもなく、最後の設定を選べば一応起動はできます。そしてEasyEFIでWindowsのEFIを作り直します。またはWindows 10のインストールディスクを使ってbootシステムを作り直します。

References:

WindowsPCでOS X、Windows、Linuxをトリプルブート(Hybrid MBR編)

前回、比較的新しい手持ちのPCをトリプルブートできるようにしたしたのですが、Core2Duoのようなひと昔前のPCをデュアルブート、トリプルブートするのはかなり困難です。しかし不可能というわけでもありません。

通常、BIOSでMBRモードもしくは混在モードにしている場合、OSXではGPTディスクとしてインストールするのですが、次のWindowsのときMBRディスクとみなすのでインストールできないというジレンマがあります。ところがHybrid MBRというMBRとUEFIが混在できる魔法のような方法があります。しかしながら、いろいろ調べると現実的にはその魔法には深刻な副作用が伴います。複雑なパーティションのためデータの損失の恐れがあります。インストールするのはサブのサブ機なので、たとえシステムが破壊される覚悟でインストールしてみました。

1.ディスクをHybrid MBRにする

まずLinuxをLiveUSBで立ち上げ、Gpartedでパーティション割りを行います。
OSXはすでにあるので、そのあと、WIndowsのNTFSパーティション、Linuxのbootパーティション、LVMパーティションを作成しました。

Hybrid MBRにするにはgdiskコマンドを実行します。

# gdisk /dev/sda

Snow Leopardをインストールした時点でMBRがprotectiveとなっているので、これを画面のようにHybridに変更します。

例)

gdisk /dev/sda
r-p-h-5 4 3…-o-w

LinuxのgptsyncコマンドはGPTディスクとMBRディスクのパーティションをすり合わせる重要なコマンドです。

ところがGPTの一部のパーティションを認識しないことによって動かないケースがあります。
私場合はLVMのパーティションは問題なかったのですがLinuxパーティション(83)が認識できませんでした。下図ではGPTパーティション4がMBRで認識してません。そこでgdiskのリカバリーモードのhコマンドでそのパーティションのMBR hex codeを0cとしてみました。

 

2.Windows 10のインストール

ハイブリッドMBRになった時点で、インストーラーはMBRディスクとして認識するのでそのままインストールを行います。WindowsをインストールするとブートマネージャーがWindows用に置き換わってしまいなすがそのまま続けます。

3.Linuxのインストール

LinuxはGPTディスクとして認識するのでGPTディスクとMBRディスクのパーティションナンバーのずれに注意します。そしてブートマネジャーはbootのあるパーティションにインストールします。

Linuxのインストールが終わったら、次にOS Xのパーティションをアクティブにします。

# parted /dev/sda
# set 2 boot on

fdiskはMBRディスクとして見えるのでfdiskでも同様に行います。

4.Chameleon Bootloaderの再インストール

GPTディスクの場合、EFIフォルダーにブートに関するファイルを保存してあるのでツールを使って切り替えるだけで済むのですが、MBRの場合、BIOS経由になるのでブートセクターの書き換えが必要になります。そこでもう一度、Snow Leopardのインストールで使ったiBootUSBディスクでOSXをブートします。そしてMultiBeastを起動してBootローダーを再インストールします。


GPTディスクとMBRディスクが併存するシステムは動いているOSの認識がどちらか片方なので、パーティションを操作するとこの微妙なシステムが壊れる恐れがあります。というわけでHybrid MBRあまりお勧めできませんが、リスクを承知で3つのOSをラップトップにまとめて入れるという誘惑に逆らえないなら挑戦してみる価値はあるかと思います。

Referrences:

WindowsPCでmac OS、Windows、Linuxをトリプルブート

追記(10.5.2018):macOS Mojave 10.14はグラフィックス未対応のためThinkpad X220にはインストールできません

はじめに

WindowsとLinuxのデュアルブートは一般的ですが、さらにmacOSまで含めてトリプルブートはあまり知られていません。最近の機種はMacもWindowsもハードウェア的にはほぼ同じ構成であるため理屈の上ではWindowsPCにmacOSをインストールすることができます。しかしながらmacOSには制約が多いためインストール手順が重要になります。順序は最初にmacOS、次にWindows、最後にLinuxの順でインストールします。

注意:macOSは動作する機種が限られるのでインストールする前に機種のスペックをチェックして下さい。またBIOSもOSX86のサイトで見てmacOS用に最適化してください。

今回インストールした機種

  • Thinkcentre M73
  • Thinkpad X220

ThinkcentreもThinkpadもmacOSのインストール過程はほぼ同じで、違いはThinkpadにパッチを当てることくらいです。

0. Windows 10のインストール準備

パーティションの先頭にmac OSをインストールするためWindowsを再インストールすることになります。Windows 7からWindows 10にアップブレードを中心に進めていきます。

Windows 7の場合はDVD-ROMからインストール、または、下記のOptional 1: Windowsのダウングレードを参考にインストールします。

Windows 10の再インストールの場合はクリーンインストールになります。

Windows10は以前のバージョンに比べてライセンスの認証が簡単になり、一度Windows10をインストールすると同じエディションなら32ビットでも64ビットでも他言語バージョンでも認証が通るようになりました。いつでもクリーンインストールが可能になるので、まずはいったんアップグレードプログラムWindows10Upgrade.exeをMSサイトからisoファイルをダウンロードしてWindows10にアップグレードします。

Windows 10 のダウンロード

そのisoファイルはrufusユーティリティを使ってGPT partition scheme for UEFIモードでUSBディスクにインストールします。

1.  バックアップ

はじめにHDDのバックアップを取ります。内蔵HDDより容量の多い外付けHDDを用意して、ddコマンドで外付けHDDディスクに書き出します。live用のLinuxをいれたUSBディスク用意します。起動してターミナルからルート権限で例として次のようにしてディスク全体を書き出します。

sudo dd if=/dev/sda of=/media/mint/<外付けHDD>/sda.img bs=4M

Thinkcentreの場合、/dev/sda4などにWindowsのリカバリー領域があるのでそれも取っておきます。これは後でWindowsを復元するときに役に立ちます。

2. mac OSのインストール

tonymacx86からツールをダウンロードして、UniBeastでUSBディスクを作成しPCをブートします。

UniBeast 7はSierra、UniBeast 6はYosemiteとEl Capitanです。

パーティションは3つに分けてGuidでフォーマットします。

注)画面はすべてのOSのインストール後のパーティションになっているのでインストール時とは多少異なります

操作を続けてインストールが終わったら、リスタートしてセットアップを続けます。
セットアップが終わったら、そのままMultiBeastを起動してCloverブートローダーをインストールします。

このCloverのセットアップのときにQuick StartのところでUEFI Boot Modeを選択します。この選択でGPTディスクとして利用可能になります。インストールが終ったら、HDDからリブートしてブートローダーにアイコンが現れます。そしてmacOSのアイコンを選択すればmacOSが起動します。

3. Windows 10のインストール

BIOSでUEFI Onlyにしてブートします。UEFIとMBRの両方だとインストーラーがMBRとディスクを認識して先に進めません。

Windows 10のUSBディスクをブートします。インストールはインストーラーに従って行います。このときmac OSのパーティションの後に約650Mbのパーティションがありますが、リカバリー用なのでそのままにしておきます。

mac OSのインストールのときに作った2番目のパーティションを消してWindows用のパーティションを作り直しインストールを続けます。インストールが終わって再起動時にCloverブートローダーが消えて、Windowsのブートローダに置き換わってますが、これは後で直せるのでそのままWindowsのセットアップを続けます。

注)スナップショットはWindows10をWindows7に入れえた後の画面

4. ブートローダーの調整

サイトを検索してEasyUEFI_Free.exeをダウンロードします。このツールを使ってCloverブートローダーを再設定します。

 


Edit画面で枠線の部分を編集してOKボタンを押します。

Home画面にもどり矢印で作った項目をトップに持っていきます。

右上のpowerの文字をドロップダウンしてリブートすれば、再びクローバーブートローダーが立ち上がるようになります。

5. Linuxのインストール

BIOSをUEFIMBR両方の設定にしてLive用Linuxを起動します。

USBメモリでLiveモードのLinuxをブートします。インストールは通常のインストール通りですが、このとき注意することは、ブートローダーのインストール先をディスクではなくパーティションを選択します。私の場合はboot用のパーティションとLinuxシステム用と分けているので、boot用パーティションにブートローダーをインストールしてます。ブートローダーが変わってしまった場合、WindowsのEasyUEFIを使って修正します。

インストーラーを起動します。

パーティションでManualを選択し、mac OSで作ったLinux用のパーティションを消して作り直します。

BootloaderのインストールはUEFIのある/dev/sda1を選択します。

以上でインストールは完了です。

リブートしてLinuxのブートローダーからWindowsを起動してEasyUEFIを使ってUEFIを修正します。

Optional 1: Windowsのダウングレード

Windows10からWindows7にダウングレードする場合です。

2.バックアップで保存しておいたリカバリーパーティションのイメージファイルをマウントします。その中にcdrivebackup.wimを探します。WindowsのシステムファイルなのでこれをUSBディスクにコピーします。リカバリイメージを 例としてlenovo-m73-sda3-rescue-win7.imgとします。

sudo mount lenovo-m73-sda3-rescue-win7.img /mnt
sudo cp /mnt/FactoryRecovery/cdrivebackup.wim /<USB Disk>

Windows 10のUSBインストールディスクで、Command Promptを起動してdiskpartを実行します。

  1. Windows10のパーティションをフォーマットします
  2. Windows10のパーティションはすでにドライブ名が割り当てられているのを確認します(例:d)
  3. EFIパーティションにドライブ名を割り当てます(例:b)
  4. Dism.exeを使って次のようにWindows7をインストールします
c:\>dism /apply-image /imagefile=e:\cdrivebackup.wim /index:1 /applydir:d:\

追記: 7z形式の書庫ファイルなのでp7zipでも解凍できます。

5.ブートシステムをインストールします。

c:\>bcdboot d:\windows /s b: /f UEFI

以上でWindows7へのダウングレードは終了です。

Optional 2: システム時計の調整

Windows, mac OS, Linuxのシステム時計の仕組みが違うのでOSを変えて起動すると時間がずれて表示されます。mac OSとLinuxのシステム時計はUTCになっているのでLocalが標準のWindowsのシステム時計をUTCに合わせます。

追記:9/9/2018

Linuxとmac OSはUTC、Windowsのみローカルタイムなのでシステムレジストリを変更してUTCを使うようにする方法がありました。HKEY_LOCAL_MACHINE>SYSTEM > CurrentControlSet > Control > TimeZoneInformation >RealTimeIsUniversal(「新規 (N)」>「DWORD (32ビット) 値(D)」=> 1)

またはコマンドで、

reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_DWORD /f

» Windows Server 2008 以降の時刻設定を設定する

システム時計を強制的に調整する場合は次の方法があります。

Windows

NetTimeというソフトをインストールします。

設定はNTPサーバを設定するだけです。

Mode: Windows Serviceボタンをクリックしてサービスを実行します。

Linux

cronに追加します。ルート権限で、crontab -eを実行します。

@reboot sleep 60 && /usr/sbin/ntpdate <NTP server>

cronをリスタートします。

sudo systemctl restart cron.service

macOS

スクリプトをダウンロードします。

アーカイブを展開しファイルを編集します。

ntp-fix-time.sh:

...
sleep 60
NAME="$0:t:r"
HOST=`hostname -s`
HOST="$HOST:l"
NTPHOST='<NTP server>'
...
...
if [ "$EUID" = "0" ]
then
 [ -d $HOME/Library/Logs/metalog/$NAME/$HOST ] || mkdir -p $HOME/Library/Logs/metalog/$NAME/$HOST
 LOG="$HOME/Library/Logs/metalog/$NAME/$HOST/$TIME.log"
 SUDO=""
else
 SUDO='sudo'
 LOG="/var/log/$NAME.$HOST.$TIME.log"
fi
...

ファイルをコピーします。

sudo chown <User ID>:admin *
sudo mkdir -p /usr/local/bin
sudo cp -a ntp-fix-time.sh /usr/local/bin
sudo cp -a com.tjluoma.fixtime.plist /Library/LaunchDaemons

リブートします。

確認するには次のようにします。

sudo launchctl list | grep fixtime

トラブルシュート

mac OSのアップデート等でWindowsの起動でエラーが起きることがあります。0xc000000eエラーは比較的多く起こるのでその対処法です。

References:

OSX Snow LeopardをWindows PCにインストール

OSXをWindowsPCに入れるプロジェクトは前から興味があったので、AppleからDVDを取り寄せて、何度かVirtualBoxの仮想マシンにいれたことはありました。

El Capitan(10.11)になってだいぶWindows機と相性がよくなってきているので実用に耐えるか検証をかねて、Wondows PCにインストールすることにしてみました。

El Capitanのインストールディスクを入手するにはアップルストアからになるのですが、手元にOSXで動くPCが必要です。そこでまずはSnow Leopardをインストールすることから始めます。

iBootを使った方法が一般的で安定しているので、まずは手元にある旧型PCにインストールしてみることにしました。iBootはインテル製のアーキティチャーによって違うので適したバージョンを選びます。旧型PCだと3.3.0になります。

今回インストールした機種

いずれも旧型PCです。DynabookはBIOS設定でAHCIの設定ができないので外付けHDDにインストールしました。ThinkpadはBIOSの設定でAHCIにします。

  • Dynabook SS MX27/AE
  • Thinkpad X200

インストールの流れ

PCの機種によりかなりインストール結果にバラつきがあります。途中でインストールが止まることもしばしばあります。ネットで解決策が見つかるかも知れません。基本的な流れは次のとおりです。

  1. iBoot-3.3.0をCD-ROMに焼いてブートする
  2. Snow LeopardのDVDを差し替えてF5を押してブートメニューを更新する(F5押しはThinkpadの場合です)
  3. ブート画面にDVDが現れたらブートする
  4. ディスクユーティリティーで 外付けHDDをGUIDモードでフォーマットし、戻って画面にしたがってインストールを続ける
  5. インストールが終了すると自動的に再起動する
  6. iBoot CD-ROMを入れ替えてブートすると先ほどインストールしたHDDのアイコンが現れる。もし問題なく起動できれば設定画面が現れるので画面にしたがって設定していく
  7. MacOSXUpdCombo10.6.8.dmgをアップルのサイトからダウンロードしインストールする
  8. MultiBeast 3.10.1をインストールする
  9. Snow Leopardを再起動する

手持ちにブランクのCD-Rがなかったので、手順を変えてiBootをCDではなくiBoot3.3_usb_desde_windowsというUSBメモリで起動できるibootを使いました。またSnow Leopard DVDもisoイメージ化してddコマンドでUSBメモリに書き込んだものを使いました。

 

DynabookはUSBポートに起動順があって外付けHDDが見えたり見えなかったりで、苦労しましたがインストールはできました。
ThinkpadはF12キーで選択できるが、やはりHDDが起動できたり、エラーになったりで、試行錯誤の末、インストールできました。

機種の違いによるエラーの対処

ThinkpadをHDDから起動しようとすると、エラーを起こして起動できませんでした。エラー内容を見るとドライブの認識ができないためエラーだったのでKextを探して次のカーネルモジュールをインストールしました。

AppleACPIPS2Nub.kext
AppleIntelPIIXATA.kext

もうひとつの問題はグラフィックドライバーがないため画面がVESAモードで解像度が液晶画面に合わず、綺麗ではありませんが、残念ながらドライバーがないため問題を修正できません。

DynabookはIntel製wifiモジュールでなくatheros製だったのでWifiは認識できました。しかし有線LANは使えなかったので次のカーネルモジュールを入れて、plistを編集してみましたが今ひとつ安定しません。

AppleIntel8255x.kext


2台ともSnow Leopardをインストールすることに成功したのでアップルストアに開くとアップデートの通知があって、アカウントにログインして無事、El Capitanをダウンロードできました。

次に、UniBeast(6.2.0)を使ってUSBディスクにEl Capitanのインストールディスクを作成しました。

インストールした機種

  • Thinkcentre M73
  • Thinkpad X220

試しにブートしてみたところThinkcentreは無事起動できたがThinkpadは起動できませんでした。
検索したところThinkpad X220用に改変したUSBメモリが使えるこということで、必要なパッチやツール(ThinkPad x220 El Capitan Utility and Kext pack.zip)をダウンロードしてUSBメモリーを作りなおしました。

この2つの機種は最初の2機のようなHybrid GPTではなく、純粋なGPT ディスクにインストールできるので、WindowsやLinuxも同時にインストールできるのではないかと思いつきました。調べてみるとインストール順序さえ間違わなければ3つのOSを入れられることがわかりました。インストール順は、最初にOSX、次にWindows、最後にLinuxという順序です。

起動に失敗した場合の回復方法

間違ったカーネルモジュールをインストールするとブート時にクラッシュを起こします。
その場合、セーフモードで起動して原因のKextを取り除いてrebuild cache と repair permissionsをします。

Kextを探すには

# find . | grep <kext name>

 

とすれば見つかるので、ディレクトリごと消してMultiBeastのインストールのときに入れたKext Utilityを起動してパーミッション等を直します。

セーフモードでブートするにはブート画面でスペースを1,2度押すとブートオプション欄が現れるので、”-x -v”をつけて起動します。

References:

 

 

Android:Xiaomi Redmi 1Sのカスタムファームウェアのインストール

セキュリティ向上のためCynaogenmod 14.1をアップグレードしようとしたら、昨年の12月25日で更新が終わっていた。不思議に思って調べてみたら、フロジェクト自体が昨年で終了して消滅してしまったとのこと。

さらに見てみるとフォークする形でLineage OSがリリースされているのでそれをインストールしました。最新ROMをいれるのには最新のTWRPにアップデートする必要があります。

TWRPをインストールするにはまずadbツールをインストールします。つぎにスマホをデバッグモードにします。設定の画面でPhone statusのBuild numberを7,8回連続タップすれば変わります。そして、デバッグモードのメニューでadbにアクセス権限を与えます。

USBでスマホを接続して、

adb push twrp-3.0.2-1-armani.img /Download
adb push lineage-14.1-20170108-UNOFFICIAL-armani.zip /Download

としてファイルをスマホに移します。ルート権限で、

adb reboot bootloader
fastboot flash recovery twrp-3.0.2-1-armani.img
fastboot reboot

としてtwrpをアップデートします。

いったん終了して電源スイッチとボリューム+ボタンを押してtwrp画面に入ります。

twrp画面からはwipeでsystemやキャッシュを消します。他のパーティションを消すとクリーンインストールになるので注意します。

インストール画面で lineage-14.1-20170108-UNOFFICIAL-armani.zip、そしてgappsをインストールします。

 

802.11s: メッシュネットワークの構築

Wi-FIのネットワーク方式には、大きく分けてAP型、Adhoc型、メッシュ型と3つのタイプがあります。AP型とAdhoc型は広く知られているので、とくに説明はいりませんが、メッシュ型はそれぞれの無線ノードにルーティング機能をもたせる変わったネットワークの方式です。そのメッシュネットワークもAdhocモードを使ったものと802.11sを使ったものに分けられます。

 

meshモード使ったメッシュネットワークの構築

OpenWrtサイトの解説をベースに設定していきます。

802.11s based wireless mesh network

解説にあるとおり Chaos Calmerではauthsaeに難がありセキュリティが使えません。使えるようになれば暗号化が出来ないadhocより有利になるでしょう。

802.11sはwifiモジュールにかなりバラつきがありiw listで調べて使えるかどうか確認します。インテル製は使えないと見てよいでしょう。broadcomはセットアップはできるがメッシュ接続が出来ませんでした。Ralinkの5,6年前に買ったusbドングル(rt3050)は使えました。

例えば、バッファロールーターのath9kの無線モジュールでは、

valid interface combinations:
 * #{ managed } <= 2048, #{ AP, mesh point } <= 8, #{ P2P-client, P2P-GO } <= 1, #{ IBSS } <= 1,
 total <= 2048, #channels <= 1, STA/AP BI must match
 * #{ WDS } <= 2048,
 total <= 2048, #channels <= 1, STA/AP BI must match
 * #{ IBSS, AP, mesh point } <= 1,
 total <= 1, #channels <= 1, STA/AP BI must match, radar detect widths: { 20 MHz (no HT), 20 MHz, 40 MHz }

とありメッシュモードが使えます。よくみてみるにAPモードとmeshモードで同時に使えるようなことがわかります。試しに設定してみたところ、802.11bgnではできたのですが802.11aの方はできませんでした。あくまでも目安と考えたほうがよさそうです。

Buffalo WZR-HP-G300NH2の設定例として、

config wifi-device 'radio0'
 option type 'mac80211'
 option hwmode '11g'
 option path 'pci0000:00/0000:00:00.0'
 option txpower '18'
 option country 'JP'
 option channel '1'
 option htmode 'HT20'

config wifi-iface
 option device 'radio0'
 option mode 'ap'
 option ssid 'MyAP'
 option encryption 'psk2+ccmp'
 option key 'xxxxxxxxxxxx'
 option network 'lan'

config wifi-iface
 option device 'radio0'
 option mode 'mesh'
 option mesh_id 'mymesh'
 option encryption 'none'
 option network '80211s'

このように編集してwifiコマンド実行すると反映されます。さらにnetworkにアドレス等を書き込み/etc/init.d/network restartでネットワークをリセットします。

コマンドを実行してメッシュネットワークが動いているか確認してみます。

# iw dev wlan0 station dump
Station xx:xx:xx:xx:xx:ab (on wlan0)
 inactive time: 80 ms
 rx bytes: 6019966
 rx packets: 152051
 tx bytes: 910
 tx packets: 10
 tx retries: 0
 tx failed: 0
 signal: -27 [-32, -28] dBm
 signal avg: -28 [-35, -29] dBm
 Toffset: 2512033 us
 tx bitrate: 1.0 MBit/s
 rx bitrate: 1.0 MBit/s
 expected throughput: 0.704Mbps
 mesh llid: 1474
 mesh plid: 1828
 mesh plink: ESTAB
 mesh local PS mode: ACTIVE
 mesh peer PS mode: ACTIVE
 mesh non-peer PS mode: ACTIVE
 authorized: yes
 authenticated: yes
 preamble: long
 WMM/WME: yes
 MFP: no
 TDLS peer: no
Station xx:xx:xx:xx:xx:04 (on wlan0)
 inactive time: 2490 ms
 rx bytes: 5359167
 rx packets: 135311
 tx bytes: 1251
 tx packets: 15
 tx retries: 2
 tx failed: 1
 signal: -46 [-54, -46] dBm
 signal avg: -46 [-54, -46] dBm
 Toffset: -1289612762 us
 tx bitrate: 12.0 MBit/s
 rx bitrate: 5.5 MBit/s
 expected throughput: 6.261Mbps
 mesh llid: 1792
 mesh plid: 1213
 mesh plink: ESTAB
 mesh local PS mode: ACTIVE
 mesh peer PS mode: ACTIVE
 mesh non-peer PS mode: ACTIVE
 authorized: yes
 authenticated: yes
 preamble: long
 WMM/WME: yes
 MFP: no
 TDLS peer: no

# iw dev wlan0 mpath dump
DEST ADDR NEXT HOP IFACE SN METRIC QLEN EXPTIME DTIM DRET FLAGS
xx:xx:xx:xx:xx:04 xx:xx:xx:xx:xx:04 wlan0 0 683 0 20 0 0 0x11
xx:xx:xx:xx:xx:ab xx:xx:xx:xx:xx:04 wlan0 5 2173 0 20 100 0 0x5

セキュリティに問題があるのでipsec(strongSwan)を使っで接続してみました。とくに問題なさそうです。

 

>>  IEEE 802.11s Meshネットワーク+tinc VPNをセットアップする

Thinkpad x220のmini PCIeモジュールの換装

macOSをThinkpadに入れてIntel製Centrino のminiPCIeを動かすことは不可能なので、外付けのWIFIドングルかminiPCIeモジュールを交換するかのどちらかの選択になります。

Broadcomのモジュール(品番:BCM94322HM8L)を使ってWi-FIモジュールの交換を行いました。

必須条件:カスタムBIOSかほかの方法でのセキュリティチェックの回避

モジュール交換が意外と簡単でしたが、実は賭けみたいなところがあり、そのままではThinkpadはminiPCIeのWIFIモジュールにセキュリティロックをかけているので純正品でないと立ち上がりません。

Problem with unauthorized MiniPCI network card\
1802: Unauthorized network card is plugged in - Power off and remove the miniPCI network card.

エラーを回避する方法はピンの20番目をシールするとかいろんな方法があるらしいのですが、一番シンプル(かつ危険)な方法はBIOSを書き換えて、原因のWhitelistを除くことです。。

幸い、以前El CapitanをインストールするときにカスタムBIOSに書き換えて、同時に原因のWhitelistも取り除くことができたので。そのまま進めていきます。

 

まず背面のねじを外します。画面のようにマークがあるので、どのねじを外せばよいのかわかりやすくなっています。ねじを取り外してから前面に戻し、キーボードとタッチパッドパネルをはずすとminiPCIeモジュールが見えてきます。

アンテナとねじを外してモジュールを交換して元通りに組み立てます。

モジュールの交換を終えたら動作の確認を行います。まず最初のWindows 7では問題なく作動しました。LinuxはBroadcomのfirmwareをインストールしリブートすると動きます。心配だった問題のmacOSは画面のようにあっけなくminiPCIeモジュールを認識しました。

 

Optional: WIFIモジュールidの書き換え

さらなるmac化のためにデバイスidの書き換えをしてみました。

手順はサイトの通りでコピペで全て大丈夫でした。仮想化ソフトのVBにUbuntu 12.04.5 LTSをインストールします。

Rebrand the DW1510 wireless card as an Apple Airport Extreme card

モジュールを書き換えを終えて、System Informationで確認してみます。

Interfaces:
en0:
 Card Type: AirPort Extreme (0x14E4, 0x8D)
 Firmware Version: Broadcom BCM43xx 1.0 (5.106.98.100.24)
 MAC Address: xx:xx:xx:xx:xx:a8
 Locale: Unknown
 Country Code: PL
 Supported PHY Modes: 802.11 a/b/g/n
 Supported Channels: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140
 AirDrop: Supported
 Status: Connected
 Current Network Information:

0x14E4, 0x8D が書き換わってAirPort Extremeになってるのが分かります。
Country CodeがUSだとチャンネルが少ないのでサイトの例を倣ってPLにしておきました。JPでもよかったんですが。

周辺機器を使う

1.WIFIドングル

たいていのThinkpadにはインテル製のCentrinoが搭載されているが、これはOS Xに対応していないため使用できません。そのかわりWIFIドングルで無線LANに接続します。手元にはずいぶん昔に買ったものがあり、ralinkの無線チップを搭載しているバッファローのWLI-UC-GNでセットアップしてみました。

BearExtender 10.10 Yosemite Downloads

2.USB3 expressカード

Thinkpad x220はUSB3はないので、USB3のexpressカードを使うことにしました。アマゾンで最安値のカードを使ってみました。

lspciで調べるとrenesus uPD720202 rev2とあり、OSX86サイトで調べるといくつかバージョンがあります。そのバージョンによってドライバーが違うようです。とりあえず、つぎの標準ドライバーをいれたら動くようになりました。

RehabMan-Generic-USB3-2015-1215

Thinkpad X220で100MB/s近く速度がでるようになりました。

 

Chromebook: Samsung Chromebook(XE303C12)でcroutonを使う

Kubuntu Trusty
Kubuntu Xenial

 

インストール

croutonをダウンロードします。

wget https://github.com/dnschneid/crouton

Ctr+Alt+tcroshを立ち上げ、shellと打ち込みます。そして次のようにコマンドを実行します。

sh ~/Downloads/crouton

ディストリビューションを表示してみます。

sh ~/Downloads/crouton -r list

インストールするディストリビューションを決めたら次のように実行します。ここの例ではUbuntu Xenialインストールしています。’-e‘オプションをつけると暗号化します。

sudo sh ~/Downloads/crouton -e -r trusty -t kde

ディストリビューションによってはChromiumブラウザの不具合がでるので、起きた場合は次のようにします。バージョンはサイトを検索して最新バージョンで置き換えてください。

wget http://ports.ubuntu.com/ubuntu-ports/pool/universe/c/chromium-browser/chromium-browser-l10n_59.0.3071.109-0ubuntu0.14.04.1188_all.deb
wget http://ports.ubuntu.com/ubuntu-ports/pool/universe/c/chromium-browser/chromium-browser_59.0.3071.109-0ubuntu0.14.04.1188_armhf.deb
wget http://ports.ubuntu.com/ubuntu-ports/pool/universe/c/chromium-browser/chromium-codecs-ffmpeg-extra_59.0.3071.109-0ubuntu0.14.04.1188_armhf.deb
sudo dpkg -i chromium-codecs-ffmpeg-extra_59.0.3071.109-0ubuntu0.14.04.1188_armhf.deb
sudo dpkg -i chromium-browser_59.0.3071.109-0ubuntu0.14.04.1188_armhf.deb
sudo dpkg -i chromium-browser-l10n_59.0.3071.109-0ubuntu0.14.04.1188_all.deb
sudo apt-mark hold chromium-browser chromium-browser-l10n chromium-codecs-ffmpeg-extra

Desktop Effectsの調整(オプション)

KDEは3Dエフェクトをふんだんに使ってるのでこれをオフにすると幾分スムーズになります。

スタートアップ時の調整

起動するときはサイト通りにstartkdeを実行します。そのままでも起動できますが少し手を加えて使いやすくします。

/usr/local/startkde:

#!/bin/sh -e
# Copyright (c) 2016 The crouton Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

set -e

ADDR=`ip route | grep -E ^[0-9]+ | cut -d' ' -f 1`
chmod 666 /sys/class/backlight/backlight.12/brightness
iptables -I INPUT 1 -p udp --source $ADDR --dport 1025:65535 -j ACCEPT

APPLICATION="${0##*/}"

USAGE="$APPLICATION [options]

Wraps enter-chroot to start a KDE session.
By default, it will log into the primary user on the first chroot found.

Options are directly passed to enter-chroot; run enter-chroot to list them."

exec sh -e "`dirname "\`readlink -f -- "$0"\`"`/enter-chroot" -t kde "$@" "" \
 exec xinit /usr/bin/startkde > /dev/null 2>&1

Multi-touchの設定

タッチパッドをマルチタッチ化します。archサイトから引用です。

/etc/X11/Xsession.d/50-touchpad.conf:

Section "InputClass"
 Identifier "touchpad"
 MatchIsTouchpad "on"
 Option "FingerHigh" "5"
 Option "FingerLow" "5"
EndSection

キーバインディング

ファンクションキーを再割当てします。Menu>Settings>System Settings>Shortcuts>Global Keynoard Shortcutで設定します。

音声&マイクロフォンボリュームの増減、ミュート、タッチパッドのオンオフ設定をファンクションキーに割り当てます。

バックライトはCustom shortcuts>Examplesに追加します。つぎのスクリプトを作成しchmod 755の実行パーミッションをつけておきます。

/usr/local/bin/increase-brightness.sh:

#!/bin/sh

vol=$(cat /sys/class/backlight/backlight.12/brightness)
vol=$(expr $vol \/ 100)
[ $vol -lt 28 ] && vol=$(expr $vol \+ 1)
vol=$(expr $vol \* 100)
echo $vol > /sys/class/backlight/backlight.12/brightness

/usr/local/bin/decrease-brightness.sh:

#!/bin/sh

vol=$(cat /sys/class/backlight/backlight.12/brightness)
vol=$(expr $vol \/ 100)
[ $vol -gt 0 ] && vol=$(expr $vol \- 1)
vol=$(expr $vol \* 100)
echo $vol > /sys/class/backlight/backlight.12/brightness

(参考) バックライトの輝度(value: 0 – 2800)

IME (オプション)

日本語などのCJK言語の変換にfcitxが使えます。日本語の場合はmozcをインストールします。

ターミナルからim-configfcitxを選択し、一旦ログオフして再度立ち上げます。ステータストレイのキーボードアイコンを右クリックしてConfigureを選択します。Only Show Current Languegeのチェックを外し、スクロールダウンしてmozcを選択しCurrent Input Methodに追加します。Ctrl+Spaceで言語の切り替えができます。

StrongSwan (IKEv2)の設定(オプション)

Chrome OSではIKEv2が使えないので設定してみます。

/etc/ipsec.conf:

config setup

conn %default
 ikelifetime=60m
 keylife=20m
 rekeymargin=3m
 keyingtries=1
 keyexchange=ikev2

conn common
 left=%any
 leftcert=ClientCert.pem
 leftsourceip=%config
 leftfirewall=yes
 right=xxxxxx.vps.xxx.jp
 auto=start
 /etc/ipsec.secrets

: RSA ClientKey.pem
 /etc/ipsec.d/certs/ClientCert.pem
 /etc/ipsec.d/cacerts/caCert.pem
 /etc/ipsec.d/private/ClientKey.pem

起動してみます。

 sudo ipsec start

よく使うコマンドです。

ipsec statusall
ipsec up/down {conn name}
ipsec start/stop
ip xfrm state
ip xfrm policy
ip route list table 220

USBテザリングのAndroid(例:cynagenomod 14.1)との接続

BTテザリングはChromebookでは使えません。またWI-FIテザリングは遅いのでUSBテザリングを使います。

USBテザリングは不安定になるので電源チャージ機能をオフにします。

Disable ADB USB Charging ROOT(Optional)

このアプリをインストールしてAndroid側ではデベロッパーモードにしrootアクセス出来るようにします。そしてこのアプリを起動してチャージをオフにします。

 

SMBでLocal Networkに接続

iptablesを使って次のように設定するとSMBで接続ができます。ファイラーから簡単にアクセスできるようになります。

sudo iptables -I INPUT 1 -p udp --source <samba server>/<net addr> --dport 1025:65535 -j ACCEPT

Sourceは特定のIPアドレスまたはネットワークを指定します。

例1)IPアドレスの場合

 iptables -I INPUT 1 -p udp --source 192.168.1.1/24 --dport 1025:65535 -j ACCEPT

例2) ネットワークアドレスの場合

iptables -I INPUT 1 -p udp --source 192.168.1.0/24 --dport 1025:65535 -j ACCEPT

KDEのDolphinを使うと接続が出来ます。ほかのファイラーではできませんでした。Menu>Systems>Network>Connectivityでユーザ/パスワードを設定します。

Numix Circle (Optional)

きれいなアイコンセットです。

sudo add-apt-repository ppa:numix/ppa
sudo apt-get update
sudo apt-get install numix-icon-theme-circle

Troubleshoot

Xwindowが立ち上がらない場合、maliドライバをインストールします。ドライバーを/usr/local/chroot上ディストリビューションのどこかにコピーしておき、enter-chroot -n <ディストリビューション名>でchroot環境にします。

ChromeOSから次のファイルを/usr/libにコピーします。

libmali*
libEGL*
libGLES*

NOTE: Zestyは解決済みです。(2017年10月)

ログ:

...
gbm: failed to open any driver (search paths /usr/lib/arm-linux-gnueabihf/dri:${ORIGIN}/dri:/usr/lib/dri)
gbm: Last dlopen error: /usr/lib/dri/exynos_dri.so: cannot open shared object file: No such file or directory
failed to load driver: exynos
EGL_MESA_drm_image required.
...
# tar xzvf mali_packages.tar.gz  
mali_packages/ 
mali_packages/mali400-dev_2.1-13_armhf.deb 
mali_packages/mali400_2.1-13_armhf.deb 
mali_packages/xf86-video-mali_1.0.1-7_armhf.deb

このうちmali400_2.1-13_armhf.debmali400-dev_2.1-13_armhf.debをdpkgでインストールします。

# dpkg -i mali400_2.1-13_armhf.deb
# dpkg -i mali400-dev_2.1-13_armhf.deb

xf86-video-mali_1.0.1-7_armhf.debは展開してインストールします。

# dpkg-deb -x xf86-video-mali_1.0.1-7_armhf.deb wk
# cd wk
# cp -a etc usr /

wkは任意のディレクトリ名です。XorgのMaliビデオドライバーは動かないのですが何故かXwindowでは速くなります。