それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

MacBook をEFIブートするUSBディスク作成してubuntuを起動する-macをusb ubuntu でEFIブート

この記事は Mac OSX の Advend カレンダーにあわせて書きました

macOS Advent Calendar 2016 - Qiita

OSX がどんどん劣化している。。。

OSXmacOS なんていう文化の香りがしない名称に変えられ、MacbookProにOLED touch barという、キーボードユーザーを馬鹿にしている商品が発売されようとしていて、MacBookの先行きに暗雲が立ち込めてきました。

Yosemiteでは、AppStore以外のアプリがKeychainsを使えなくなりました。 そのためChrome.app などがKeychainsを捨てるという結果を招きました。 Sierra では、ついに非署名pkg のインストーラーを起動できなくなってしまいました。 古い更新されてないドライバどうするんだよ。。。 どんどん不自由になる現実。そろそろ見切ってもいいんじゃないか。

ubuntu が起動するUSBメモリを作って移行に備える。

OSXが自縄自縛になる来るべきX-DAY。その前に、逃げる準備だけはしておこう。

Linuxが起動するUSBメモリを作ろうと思い立った。

Debian/GNU Linuxでもよかったのですが、ドライバなどスパッと解決しそうなUbuntuにしました。

方針

今回は次の方針で、インストールと起動をしようと思います。

  • 内蔵SSDは手を付けない。
  • USB ドライブを用意する
  • USB ドライブをEFIパーティションにする

USBドライブのSSDにgdisk で efi 領域を作り、EFIブートするディスクを作り、EFIの起動マネージャーからUbuntuを起動する。mac は外部USBドライブから起動するので、EFIの領域からブート。

そして、普段はUSBドライブをVirtualBoxから起動して仮想マシンUbuntuとして使うのである。

これで、仮想マシンで起動しつつ、メインとして起動できるBootCamp的な動作するUSBメモリが作れる。

GPTとBIOSが両方起動するUSBドライブを作る。

USBのドライブにOSを入れてUSBから起動したい。

本体のSSD/HDD領域には一切手を加えずに、USBドライブで完結するOS環境を一式を作ることにします。

これが出来るのがGPTです。GUIDのパーティションテーブルを格納して、そこから起動すると実現できます。

macbookEFIブート

Macbook は GPTを使ったEFIブートを利用しています。BIOSのbootable フラグを使ったMBRの起動とは別の仕組みが動いています。

BIOSブートの仕組み

まずはじめに、BIOSを軽く見直しておきます。

BIOSブートと呼ばれるのは 、MBRの方式のパーティションテーブルを使うものです。

パーティションには、プライマリ・拡張パーティションがあります。。

プライマリパーティションは4つ 4つのうち一つを拡張パーティションにすることで、4つ以上のパーティションを実現できる。

このプライマリ・パーティションにブートフラグ(bootable flag)を設定し、ブート可能であることを明示しています。

ブートフラグをつけたパーティションに、ブートローダをインストールし、ブートローダーが各パーティションからOSを起動します。

BIOS → MBR → ブート可能パーティション → ブートローダー → OS起動。

EFI ブートの仕組み

ディスクをGPTにする。

ディスクににEFI領域を用意する。

EFI領域にブートイメージとブートディスク設定を用意する

EFI 起動すると、EFI領域から該当データを読み込んで、ブートマネージャが起動する

EFI領域はパーティションになります。EFIパーティションを用意するのがすべての開始点になります。

EFI パーティションにつて

EFIは、vfat ( fat32 ) のパーティションです。

EFI起動は fat32パーティションをマウントして、その中の /EFI ディレクトリから、ブートローダーを探して、起動します。

EFI →  EFIパーティション → ブートローダー → OS起動。

ブートローダーは、インストールされている全てのパーティションの全てのOSを知らなくても良くなっている便利。

MacBookEFI

Macは古くからEFIブートになっている。

Macなどはこの仕組を上手く利用して、EFIの選択も可能。

Macでは起動ディスク選ぶ画面、あれがMacブートローダ

USBを差し込んだときは、USBのEFIが優先されるらしい。

EFI ブートするまでの手順

準備する

準備するもの

  • USB メモリ(4GB程度でもいいので、とにかくWrite速いやつ、私は16GBー500円にした
  • インストールするためのISOイメージ
  • Virtual Box (インストールに使う)

USB メモリについて

最低4GB程度あれば足りる。

Ultra Fit USB3.0対応 最大150MB/s 海外リテール  というのがあるので、これにする

USB3.0 で Write が150MB/s なら通常使用でも、HDDと遜色ない。親指サイズなのでお手軽。

親指の爪サイズで、挿しっぱなしにしてもじゃまにならないUSBメモリがあるので、これにする

インストールISOイメージ

今回はUbuntuにした。

理由は、Intel のドライバとWifiがさくっと使える。プロプライエタリなドライバがかんたんに導入できるから。 ある程度動かして感覚がつかめたらDebianに移行すると思う。

VirtualBox

Virtual Box でOSをインストールする。

MacでUSB起動してEFIブートしてもインストールいいんだけど、面倒な点があります。

インストール起動するために、インストール元とインストール先と、2つのUSBドライブが必要になり。2つも使うので、無駄が多い。時間も金銭的コストも無駄が多かった。

あとインストール中に、ディスク書込でMacBookを占拠されるのも辛い。他の作業ができずに暇・・・

今回はEFIの起動を先に実験したい観点からも、Virtualboxを使います。

さらに、Ubuntuのインストールメディアは、USBではなくmacOSが入った本体SSDにブート情報を書き込んでしまい、とても面倒なことになるので、私としてはVirtualBoxを強くおすすめしたい。

インストール作業

まず、始めにインストールしたいUSBドライブを mac に差し込んで、GPTディスク化とEFIパーティション作成から行っています。

今回は、USBドライブがMac以外でも使えるようBIOS パーティションも作成しておきたい。

そのため、ハイブリッド構成なレイアウトを作っていきます。

gdisk コマンド・mkfsコマンド

パーティションを作成するのは主にコマンドで行います。

brew install gptfdisk
brew install e2fsprogs
brew install dosfstools

mkfs.fatmkfs.ext4gdiskコマンドを導入しておきます。

USB メモリをGPTにする

GPT化はDisk Utility.app でも出来ますが、今回は EFIBIOS パーティションを共存させたいので、gdisk を使います。

ターゲットのディスクを調べます。

まず、USBディスクを見つける。

takuya@usr$ diskutil list
/dev/disk0 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *251.0 GB   disk0
   1:                        EFI EFI                     209.7 MB   disk0s1
   2:          Apple_CoreStorage Macintosh HD            250.1 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
/dev/disk1 (internal, virtual):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                  Apple_HFS Macintosh HD           +249.8 GB   disk1
                                 Logical Volume on disk0s2
                                 8FD55945-F96F-4B06-9E80-DAC4550E8306
                                 Unencrypted
/dev/disk2 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                            NO NAME                *15.4 GB    disk2

disk0, disk1 はmacOSがほぼ独占して、事実上予約領域にしているので、ディスク2あたりから。

GPT パーティションにする

gdisk の対話コマンドに入る。

sudo gdisk /dev/disk2

すべてのパーティションを消す

Command (? for help): d
Partition number (1-5): 1

Command (? for help): p

Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 30031216
Partitions will be aligned on 2-sector boundaries
Total free space is 30031183 sectors (14.3 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name

gdisk の対話コマンドでパーティションサイズを単位 1にする(hybrid にするため)

Command (? for help): x ## エキスパートモード

Expert command (? for help): l
Enter the sector alignment value (1-65536, default = 2048): 1 ## ここで 「1」

Expert command (? for help):m # エキスパートモード抜ける

ディスクの先頭にBIOSブートパーティションを作る。

Command (? for help): n # ← 新規作成
Partition number (1-128, default 1): 
First sector (34-30031216, default = 34) or {+-}size{KMGTP}:
Last sector (34-30031216, default = 30031216) or {+-}size{KMGTP}: 2047 ## ← 2047 をいれる
Current type is 'Apple HFS/HFS+'
Hex code or GUID (L to show codes, Enter = af00): EF02 ## ここはTYPEで EF02 をいれる。
Changed type of partition to 'BIOS boot partition'

Command (? for help): p
Disk /dev/disk2: 30031250 sectors, 14.3 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): EC49D51C-255A-46F4-9575-980A69E5ADF8
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 30031216
Partitions will be aligned on 1-sector boundaries
Total free space is 30029169 sectors (14.3 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1              34            2047   1007.0 KiB  EF02  BIOS boot partition

ここまでで BOIS boot partition を作ることが出来た。

最後に、単位をデフォルトの2048に戻す。

Command (? for help): x
Expert command (? for help): l
Enter the sector alignment value (1-65536, default = 2048): # エンターするだけでデフォルトに戻る。
Expert command (? for help):  m ## 通常モードに戻る

ここまでで、BIOSブート作って終わり。あとは通常通りの gdisk を使うだけ。

次に、EFIブート領域を作る

では、EFIブート領域を作る。

Command (? for help): n
Partition number (2-128, default 2):
First sector (2048-30031216, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-30031216, default = 30031216) or {+-}size{KMGTP}: +200MB
Current type is 'Apple HFS/HFS+'
Hex code or GUID (L to show codes, Enter = AF00): EF00
Changed type of partition to 'EFI System'

サイズは、200MBくらいで、とりあえず。

タイプは EF00 を指定すると EFI システムパーティションになる。

出来上がりはこんな感じ。

Command (? for help): p
Disk /dev/disk2: 30031250 sectors, 14.3 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): EC49D51C-255A-46F4-9575-980A69E5ADF8
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 30031216
Partitions will be aligned on 2048-sector boundaries
Total free space is 29619569 sectors (14.1 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1              34            2047   1007.0 KiB  EF02  BIOS boot partition
   2            2048          411647   200.0 MiB   EF00  EFI System

あとは通常通りLinuxパーティションを作成する

/boot を分割するのは個人的な趣味なのです。

Command (? for help): p
Disk /dev/disk2: 30031250 sectors, 14.3 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): EC49D51C-255A-46F4-9575-980A69E5ADF8
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 30031216
Partitions will be aligned on 2-sector boundaries
Total free space is 1393 sectors (696.5 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1              34            2047   1007.0 KiB  EF02  BIOS boot partition
   2            2048          411647   200.0 MiB   EF00  EFI System
   3          411648         1460223   512.0 MiB   8300
   4         1460224         2508799   512.0 MiB   8200  Linux swap
   5         2508800        30029823   13.1 GiB    8300  Linux filesystem

EFI パーティションのフォーマット作成

EFIパーティションは、FAT32 なので FATでフォーマットする。

sudo mkfs.fat  /dev/disk2s2

タイプをEF02で指定してFAT32でフォーマットすると準備完了

あとは、/ にインストール

次は、通常通りLinuxをインストールするのです。

linux から 作ってた場合。

Linux からEFIディスクを作るときは、grub-efiを作って { /dev, /proc, /sys } を --bind で マウントして、chroot して update-grub する。

/パーティションに dd でディスクを持ってきて、mount -bind してもいい

apt-get install  grub-efi
sudo ddrescue disk.img  /dev/sdc3 
sudo mount /dev/sdc3 /mnt
for name  in  /dev  /proc /sys ; do sudo mount --bind $name /mnt/$name ; done 
sudo chroot /mnt 
#grub-install /dev/sdX
#grub-install --recheck /dev/sdX
#update-grub
exit

macOS X の場合。

mac の場合、chroot が少々厄介なので、Virtual Box を使うのが楽だと思います。

VirtualBoxが直接USBディスクを丸ごと使えるように設定します。

物理メディア(USB)を直接Virtualboxで使う

方法は、別エントリに以前書きました。

物理ディスクやUSBメモリをVirtualBoxの仮想マシンとして起動する - それマグで!

通常通りインストール

VirtualBoxで、最初に準備したISOをつかって、USBディスクへ、直接インストール。

インストール中にEFIを選択

UbuntuのインストールオプションにEFIがあるのでそれを選ぶ。

CentOSや古いDebianなど、EFI選択ない場合でも、大丈夫。 パーティションの設定画面で、マニュアルを選んで、自分で設定する。

だいたいこれでEFIインストールされるはず。

debian の場合は公式Wikiに情報がある→ https://wiki.debian.org/GrubEFIReinstall

インストールが終わったら起動確認。

Virtualbox の起動設定をEFIにする。

f:id:takuya_1st:20161202230609j:plain:w350

EFI起動にして無事に起動スレば準備完了。

BIOS ブートの確認

BIOSでブートできるか確認する。

VirtualboxEFIチェック外して起動するか確認する。 (ここは細かいところ忘れたので後で調べる。

virtualbox を使う利点

Mac でUSBディスクにLinuxを作った場合、シャットダウンの書き込みタイミングがずれるなど ext4 ファイルシステムのエラーチェックなどで EFI ブートが壊れることがる。

また、ディスクの起動設定を変えるなどUSBディスクのEFIブートの中身を書き換えようとしても辛いことが多い。

そこでVirtualBoxを使ってUbuntuライブディスクを起動して、USBメモリを書き換えられるようにしておくと、緊急時の安全対策として便利。

Mac1台で完結した。これがとても便利だった。

なのでので、このVirtualBoxを活用してEFIパーティションを作る方法をおすすめしたい。

日本語キーボード問題

MacBookにただUbuntuを入れると、日本語キーボードの「かな」「英数」がなぜか hangul hanja になってしまってた。すごく気持ち悪かった。

VirtualBox経由でインストールして Virtualbox Additions を入れると日本語キーボードの「かな・英数」を認識してくれてた

理由はちょっとわからないけどキーボードも問題なく動くようになったので快適だった。

EFI パーティションの構造とマウント先

ここまでで作成したEFIパーティションについて見ておこうと思います。

EFIパーティションのマウント

EFIパーティションFAT32なので簡単にマウントできる。

sudo mkdir mnt 
sudo mount -t msdos /dev/disk2s2 mnt # EFIパーティションをマウントする

EFI パーティションの構造

中身を見るとこんな感じ。

/
├── EFI
│   ├── boot
│   │   └── bootx64.efi
│   └── ubuntu
│       ├── MokManager.efi
│       ├── fw
│       ├── fwupx64.efi
│       ├── grub.cfg
│       ├── grubx64.efi
│       └── shimx64.efi
└── grub

Macbookで使うEFIのファイルはこのなかでは、以下のファイルになる。

/EFI/boot/bootx64.efi

macbook は 少し古いEFI設計らしい。

ここで EFI/boot と EFI/ubuntu の以下のファイルは同一になっていた。

abd0cc30bc149c31b503bb3b63d1e39c  EFI/boot/bootx64.efi
abd0cc30bc149c31b503bb3b63d1e39c  EFI/ubuntu/grubx64.efi

EFIの細かいことは調べてないのだけれど、Macでは 複数のefi が使えないらしく、 EFI/boot/bootx64.efi に起動したいEFIファイルを置くらしい。

この辺はまだ良くわかってない。EFIを使っていくうちにわかると思う。

Linux でのマウント先

Linuxでは EFIは次の場所にマウントされる

/boot/efi/

なのでEFIのファイルは、いかに存在した。

/boot/efi/EFI/boot/bootx64.efi

BIOSインストールしてしまった場合など

EFIインストールに失敗してたり、BIOSからブートできるイメージを使った場合は、grubEFIブート設定をインストールできる

mkdir -p /boot/efi
mount /dev/sda2 /boot/efi ## efi パーティションのマウント
/usr/sbin/grub-install --target=x86_64-efi /dev/sdb

あとはfstab を書き換えればオッケ。

もし、別のLinuxUSBメモリを差し込んで書き換える場合は

sudo mount /dev/sdf5 /mnt
for name  in  /dev  /proc /sys ; do sudo mount $name /mnt/$name ; done 
mount /dev/sdf2 /mnt/boot/efi ## efi パーティションのマウント
sudo chroot /mnt 
mkdir -p /boot/efi
/usr/sbin/grub-install --target=x86_64-efi /dev/sdf

EFIブートのディスクにBIOS起動を追加する

/usr/sbin/grub-install --target=i386-pc /dev/sda

まとめ USB メモリを差し替えて快適生活

仮想マシンLinuxWindowsを立ち上げると、どうしても不便さが解消されない。

またBootCampや仮想マシンはただでさえ少ないSSD容量を圧迫する。

そこで、USBメモリを差し替えて別OSを次々と切り替えられるのはとても便利だと思うのです。

Ubuntuに限らない

Debian/CentOS/Fedoraなども使える。WindowsOS X yosemite や El capitanSierra以前のOSだって手軽に試せるし、持ち運べる。

USB-Cはちょっと・・・

2016年の新型Macbook Pro はどう考えても Macbook Air 2です。少ないSSDにメモリ、なりよりUSB-Cが痛い。しかし、2013/2014 のMacbookProなら、USB-Aポートがしっかりついているので、極小USBメモリを挿しっぱなしにできる。USB-C2ポートは人類には早すぎたんだよ。

USBを挿すだけ

これは、便利なことだと思うのです。

複数OSの管理はめんどくさいけれど、USBさしてMacbook再起動すればいつでも環境を切り替えられる。直感的でよろしい。

極小 USB メモリから WindowsやYosemite起動

これは、今後の課題にしたい。

参考資料

MBR(bios)でもESP(uefi)でも起動できるgrub2の設定方法 - pyopyopyo - Linuxとかプログラミングの覚え書き -

MacOSでext4やext2,3にフォーマットする(mkfsのインストール) - それマグで!

macでフォーマットしてファイルシステムを作るコマンド - それマグで!

Macubuntuするには

https://help.ubuntu.com/community/UEFIBooting#Caution_for_Mac_owners

2021-06-22

EFIパーティションでヒットしないので、記述を見直し

FAT32でフォーマットやチェックディスクのため、mkfs.fat をbrew をいれる。

macOS X でも、fat を扱いたい。

BSD由来の newfs でもいいのだけれど、チェックディスクしたり、Linuxと同じ感覚で使えるmkfs を使いたい。

dosfstools をいれる。

brew install dosfstools

これを入れることで次のコマンドが使えるようになる。

  • fatlabel
  • fsck.fat
  • mkfs.fat

fsck がFATファイルシステムのチェック

fatlabel がFATボリュームに名前をつけるやつ。

便利。

Cygwinでも OSX でもLinuxでも同じコマンドが使えると楽だね。

hombrew 0.9→1.0を更新時にちょっと注意が必要だった。

hombrew 1.0 が出ています。

brew 1.0 公開数分後に、hombrew の更新して、ちょっとドハマリしたので、改めて変更点とハマりどころをまとめておく

homebrew 1.0 に更新には時間がかかる。

結構時間がかるので、Macを使わない時間帯にやること。

手が止まって地獄見た。慌ててタイムマシンで復旧した。

うっかりデスマ中に追加パッケージをいれるとき最新版にしたいだけでbrew upgradeを入れちゃうと、更新時間かかりすぎて、bash消えた。

私のハマりどころ

デフォルトシェルが /usr/local/bin/bash

bash の代わりに brewbash をずっと使ってるんですが、これがちょっと面倒くさい。

brew 1.0 の更新中には bash のリンクすら消される。なので更新前にデフォルトシェルを変更しておかないと、更新中は、リンク消されてターミナルが使えない。

更新終了するとリンクも戻されるんだけど、消さないでほしいよ。。。ほんと

git コマンドが /usr/local/bin/git

git も brew からの導入物を使っているので、更新中にgit がリンク切れた瞬間に詰む。

前述の/usr/local/bin/bash の処理をしてないと、git のリンク貼り直して起動しようにも、ターミナルがデフォルトシェル起動エラーになって焦る。

更新前に brew unlink git しておくのが無難。

主な変更点

brew0.9 現在。

brew --repository #=>/usr/local
brew --prefix #=>/usr/local

こうなる。

brew --repository #=>/usr/local/Homebrew
brew --prefix #=>/usr/local

変わらないもの

/usr/local/opt はそのまま。 /usr/local/optを使ってたリンクはそのまま使えるようだ。

つまり何か用事があれば。/usr/local/opt の該当パッケージにリンクしておいたほうが無難なのかもしれない。

brew cask はそのまま使えた。

brew まだまだ使うよ

brew ない生活はちょっと考えられない。GNUコマンド入れるのに大事。GNUコマンドをメインで使う私にはなくてはならない。

参考資料

Homebrew 1.0.0がリリース: これに伴う変更とそれに対するBrew-fileでの変更

ドミノ・ピザ - ピザを買ってピザを食べよう

pizza 大好き

ピザ持ち帰り1枚無料

ドミノ・ピザ【PC向けサイト】

みんなもピザ好きですか?

勉強会や懇親会でピザにお世話になります。

ドミノ・ピザ【PC向けサイト】

ピザ食べましょうピザ

ピザとビールがあれば、コード書くのがはかどります。

購入するならこちら

ピザ・リンク

HomeBrew の自分用Formulaレシピを作って、自分のバイナリをインストールする。

brew install 自分のパッケージ」をやりたい

brew install で自分のパッケージをインストールしたい。

やりかた

手順としてはそんなに難しくない。

  • brew create でFormula作成
  • github にレポジトリを作る
  • brew tap で持ってくる
  • brew install で使う。

brew create でFormula作成

サンプルとして rarlab のwinrar の rar コマンドを自分で入れると仮定してやってみます。

brew create 'http://www.win-rar.com/fileadmin/winrar-versions/rarosx-5.4.0.tar.gz'

この時指定する、rarosx-5.4.0.tar.gz というファイル名からバージョンと名前が自動的に決まります。

テンプレを作るためなので、あとで名前を変えてもオッケ

すると、/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/rarosx.rb にFormulaレシピファイルが作られます。

Formula の編集

brew create で作成されたFormulaは次のようになっています。 ここを編集すると楽ちんです。

# Documentation: https://github.com/Homebrew/brew/blob/master/docs/Formula-Cookbook.md
#                http://www.rubydoc.info/github/Homebrew/brew/master/Formula
# PLEASE REMOVE ALL GENERATED COMMENTS BEFORE SUBMITTING YOUR PULL REQUEST!

class Rarosx < Formula
  desc ""
  homepage ""
  url "http://www.win-rar.com/fileadmin/winrar-versions/rarosx-5.4.0.tar.gz"
  version "5.4.0"
  sha256 "09a14f40718c68fc1c24b30acb55d0f2f90f3e13b372c48b6ef1e789d748b754"

  # depends_on "cmake" => :build
  depends_on :x11 # if your formula requires any X11/XQuartz components

  def install
    # ENV.deparallelize  # if your formula fails when building in parallel

    # Remove unrecognized options if warned by configure
    system "./configure", "--disable-debug",
                          "--disable-dependency-tracking",
                         "--disable-silent-rules",
                          "--prefix=#{prefix}"
    system "cmake", ".", *std_cmake_args
    system "make", "install" # if this fails, try separate make/make install steps
  end

  test do
    # `test do` will create, run in and delete a temporary directory.
    #
    # This test will fail and we won't accept that! It's enough to just replace
    # "false" with the main program this formula installs, but it'd be nice if you
    # were more thorough. Run the test with `brew test rarosx`. Options passed
    # to `brew install` such as `--HEAD` also need to be provided to `brew test`.
    #
    # The installed folder is not in the path, so use the entire path to any
    # executables being tested: `system "#{bin}/program", "do", "something"`.
    system "false"
  end
end

今回はビルド済みパッケージを取り込むだけなので、以下のように編集しました。

class Rarosx < Formula
  desc "rar lab winrar for mac osx command line tools"
  homepage ""
  url "http://www.win-rar.com/fileadmin/winrar-versions/rarosx-5.4.0.tar.gz"
  version "5.4.0"
  sha256 "09a14f40718c68fc1c24b30acb55d0f2f90f3e13b372c48b6ef1e789d748b754"

  def install
    # ENV.deparallelize  # if your formula fails when building in parallel

    bin.install 'rar'
  end

  test do
    #system "false"
  end
end

bin.install について

見たらわかると思いますが、bin.install がDSLになっていて、これを使って、brew がインストールを行ってくれます。

rarosx-5.4.0.tgz を展開すると以下のようになっている。

takuya@rar$ tree .
.
├── acknow.txt
├── default.sfx
├── license.txt
├── order.htm
├── rar
├── rar.txt
├── rarfiles.lst
├── readme.txt
├── unrar
└── whatsnew.txt

この展開済みディレクトリに cd ( Change directory )してWorking Directoryにしたる状態で、brewは作業を始めるので

Formula 側でインストールするときに ./rarファイルを指定してる

def install 
    bin.install 'rar'
end

インストールをテストする。

Forumla 書いたら、次に brew install を試してみる。

takuya@~$ which rar
which: no rar in (snip
takuya@rar$ brew install --verbose --debug rarosx
takuya@~$ which rar
/usr/local/bin/rar

無事インストールができることを確認した。

次にアンインストールも試してみる。

takuya@~$ which rar
/usr/local/bin/rar
takuya@rar$ brew uninstall --verbose --debug rarosx
takuya@~$ which rar
which: no rar in (snip

これでFormula作成が出来た

此のまま使ってもいいんだけど。せっかくなので brew tap するようにしておく。

brew tap するためのレポジトリ名のルール

brew tap するためにレポジトリを作るときは レポジトリ名に prefix として homebrew- をつける

https://github.com/$USERNAME/homebrew-$FORMULA_NAME

たとえば、私の場合、次のようなレポジトリを作った。

https://github.com/takuya/homebrew-winrar-osx

レポジトリをclone してFormulaを作成。

git clone https://github.com/takuya/homebrew-winrar-osx
cd homebrew-winrar-osx
vim winrar-osx.rb

今回は、先の例と違ってファイル名を変えた。

Formulaのファイル名とクラス名はcamel_caseとCamellCaseとの対応になっている。

今回は ファイル名を次のようにしたので、CamelCaseにした。

ファイル名 winrar-osx.rb
クラス名  class WinrarOsx

Formula 作ったら git commit && git push

git commit
git push 

レポジトリ作ったら brew create で作ったFormulaはもういらないので消しておく

rm /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/rarosx.rb

brew で tap する

brew tap takuya/winrar-osx

brew install する

brew install winrar-osx

これで、どんなパッケージでも手軽に brew install できる。はー便利。

configure / make が必要なとき

system './configure' 
system 'make'
bin.install 'name'

などと、system コマンドで実行することで実現できる

man を入れたり、patchを当てたりすることは本家のマニュアルに書いてある

参考資料

http://reiki4040.hatenablog.com/entry/2014/10/19/124447

ログインシェルを変更するーデフォルトシェルのきまりかた( chsh/ 設定/ shells )

ターミナルを起動したときに実行するデフォルトシェルを変更する

ターミナルを実行したときに、起動するシェルは通常は /bin/bash です。

このbash を変更したいと思います。(たとえばzshbrewbash など )

この記事で書くこと

  • デフォルトシェルのきまりかた
  • /etc/passwd
  • mac OS の場合
  • Directory サービス
  • chshコマンド
  • ターミナルのプロファイルでも変えられる

はじめに デフォルトシェルの決まり方。

デフォルトで起動するシェルの基本設定は、UNIX古典的には /etc/passwd で決まります。

/etc/passwd で決定される以外に、/etc/passwd を外部サービスに委託するディレクトリサービスを使う場合があります。

/etc/passwd でのログインシェルの設定

passwd ファイルを見ると、次のようになってます。

takuya:x:1000:1000:takuya,,,:/home/takuya:/bin/bash

これは左から次のように見ます。

ユーザ名 不使用 UID グループID その他 ホーム ログインシェル
takuya x 1000 1000 takuya,,, /home/takuya /bin/bash

/etc/passwd のログインシェルを変更する

昔からの /etc/passwd の該当カラムを書き換えることで、ログイン時に起動するシェルを指定できる。

活用例

:再起動ユーザ・シャットダウンユーザ 昔のUNIXにはシャットダウン・リブート専用のユーザを作ってオペレーターがログインせずにシャットダウンできるようにしていました。

shutdown:1001:1001:shutdown,,,:/:/usr/local/sbin/reboot

最近ではいたずら防止のため作らないらしい。

Mac の場合

mac OS X の場合は、/etc/passwd には一般ユーザーは存在しない。その代わりに、ディレクトリ・サービスを使っている。

ディレクトリ・サービスとは、NIS/LDAPと同類ですね

ディレクトリ・サービスを起動する。

ディレクトリ・サービスの管理にはアプリが用意されている。

open -a '/System/Library/CoreServices/Applications/Directory Utility.app'

mac osx の場合、 /etc/passwd の代わりに ディレクトリサービスの該当エントリを書き換えればできる。

f:id:takuya_1st:20161128021226j:plain:w300

Linux の場合、LDAP管理ツールなどで変更する。

chsh コマンドでログインシェルを書き換える。

直接ファイルやディレクトリサービスを書き換えてしまうと記述ミスで詰むことがある。

なので、通常は専用のコマンドを使うことで、書き換える。

chshで設定を書き換える。

chsh を使うと比較的安全に設定を更新することができる。エディタが起動して書き換える

takuya@Desktop$ chsh
Changing shell for takuya.
Password for takuya:

または

chsh -s /usr/local/bin/bash

chshで指定できるshellの指定方法

どんなshell でも指定できるわけでもなくchsh で使えるものは制限できる。 指定外のshell を指定するとエラーになるので、事前に登録しておく必要がある。

sudo -e /etc/shells

ここにつかいたいShellを追記できる。

Mac OSX のGUIの場合

意外に、忘れがちなのが、ユーザー設定からの変更。右クリックという解り難さが、つい忘れがち。

ユーザー設定画面→ ロックを解除 → ユーザー名を右クリック

f:id:takuya_1st:20161128022544j:plain:w300

右クリックして設定画面を開くとシェル設定をすることができる

その他の方法:ターミナル・エミュレータで指定する

デフォルトシェルの変更はちょっとめんどくさいし、ぱぱっと一時的に試したいときや、一時的に切り替えたいときに不便なので。ターミナル・エミュレータの設定で対応する。

MacOSXに限れば、Terminal.app iTerm.app は最初に起動するシェルを指定することができる。

f:id:takuya_1st:20161128023304j:plain:w300

Linux の場合は gnome-terminal で同じことができる。 xfce4-terminal はできなかった。

まとめ

ログインシェルの決まり方と変更方法

  • ユーザーの管理方法による違い
  • /etc/passwd を使う
  • /etc/passwd の該当カラムを変更する
  • Directory Serviceの場合
  • ユーザーを検索
  • ユーザーのエントリを変更
  • chsh を使う
    • /etc/shells の一覧から選ぶ
  • OSのユーザー管理GUIを使う
    • OSX の場合 preference → ユーザー → ロック解除 → 右クリック
  • ターミナル・エミュレータを使う
    • Profiles の設定を使う。

以上です。

参考資料

https://wiki.debian.org/Console

ユーザーにシャットダウンを許可 - ArchWiki

http://d.hatena.ne.jp/kappamia/20091201/1259674041

less で大文字小文字を区別しない IgnoreCase / noCase する方法

less って vim 的に使えると思ってたけど、CaseSentiveなんだよ。

less で殆どの場合解決するけどだめだわ。大文字小文字が区別されちゃう。

-i をつける。

起動オプションをつけると ignore case できることがわかった。

alias する

alias less='less -i '

これを設定するだけで、大抵は解決するね。

参考資料

http://stackoverflow.com/questions/16828/how-do-you-do-a-case-insensitive-search-using-a-pattern-modifier-using-less

macでフォーマットしてファイルシステムを作るコマンド

mkfsコマンドに相当する mac osx コマンド

MacのUSB-HDDに作ったあるパーティションを、コマンドからフォーマットをしようとしたら、どのコマンドを使えばいいかわからなかった。

newfs コマンドでファイルシステムを作る

Macでのフォーマット全般は、newfs コマンドで作れることがわかった。

newfs コマンド・シリーズ

newfs_xxx のコマンドには、次のコマンド /usr/sbin/ に用意されている

newfs_exfat  newfs_hfs    newfs_msdos  newfs_udf

使い方

FAT32を作る

sudo newfs_msdos -F32 /dev/disk9s1

コマンド自体はBSD

BSDなんですねこのコマンド

参考資料

man

systemd起動が遅いので 依存関係を調べて、起動時間の計測

systemd でたまにめっちゃ遅い時がある。

systemd で起動していたらたまに遅い時がある。 理由を探すために、まず、起動時間のログを見てみることにした

systemd の起動ログをグラフで出す方法がある。

起動の状況を、グラフ(SVG)の出力して閲覧することができるらしい。

systemd-analyze plot > systemd-analysis.svg
firefox systemd-analysis.svg

実際に出力した例

f:id:takuya_1st:20161121231122j:plain:w400

各グラフの色の凡例

f:id:takuya_1st:20161121231112j:plain

うち場合、mount がやたら遅かった

もう使ってない blkid のディスクを探しにってて遅かった。

最近のディストリだとこういうの、grub2 を quiet で出してるとログ見れないから、苦労するんだよね。grub2のquiet を外すことにした。

参考資料

http://www.clear-code.com/blog/2015/12/28.html

macでHDDのパーティション入りRawファイル(ddしたもの)をマウントする

ddしたディスクイメージをマウントしたい。

ddしたのがパーティションではなく、ディスクドライブのまるごと全部でEFIEXT4などの複数パーティションが含まれている。

このファイルを マウントして中身を見たい

hdiutl を使う

hdiutil の attache を使うことでかんたんに通常ディスクとして扱うことができる。

hdiutil attach -imagekey diskimage-class=CRawDiskImage -nomount my-dd-disk-image.img

linux みたいに loop デバイス使わないで済むのが嬉しい。

attach したらあとは通常ディスクと同じ

接続さえ出来てしまえば、あとは通常のドライブと同じように mount できるし、gdisk でもできるっぽい。

MacUnixである点が存分に発揮される。楽しい。

参考資料

http://apple.stackexchange.com/questions/129921/how-to-mount-raw-disk-images

Message.appのメッセージの受信送信時刻を表示する

メッセージ.app のタイムスタンプを表示したい。

iOSなら、スライドですぐ見られるのに、MacOSならスライドできないので困った。

カーソルをホバーさせるしかなかった。

あれこれ調べたけど、カーソルホバーさせるのがベターだった。

f:id:takuya_1st:20161111174758j:plain:w450

PHP imagick でPDFからJPEG画像をDPI指定で取り出す

imagick で jpg 変換すると画質が悪い

ぱぱっとPDFをJPEGにしようとすると、とても画質が悪い

density オプションを付けたい

convert コマンドで与えるようなオプションを渡すにはどうすればいいのか。

setOption でDPIを渡す

<?php
$imagick = new Imagick();
$imagick->setOption('density',400 );
$imagick->readImage('sample.pdf[0]');
$imagick->writeImage('pageone.jpg');

これで、解像度400dpi の画質で取り出せるので、相当きれいになった。しかもページ番号指定できるのでスキャン画像の処理が楽。

関連資料

ページ番号を指定して取り出す。

<?php
$imagick->readImage('sample.pdf[0]');

image mgacik で pdf を高速に処理する - それマグで!

参考資料

http://php.net/manual/en/class.imagick.php

http://php.net/manual/en/imagick.setoption.php

http://stackoverflow.com/questions/17585457/how-to-change-the-dpi-of-an-image-from-72dpi-to-300dpi-with-imagick

LXCのコンテナ環境をぱぱっと作る。(debian apt)

LXC 環境を作る

そろそろ、LXCも枯れて来た存在になったし。Systemdとcgroup関連のゴタゴタもなさそうなのでOpenVZをやめて、LXCも使おうと思い立つ。

LXCのサポートはDebian 9 Strechでまた変化するっぽい

Debian Wikiを眺めていたら、lxc-net などのサポートコマンドがDebian9かららしい。

Debian のStableリリースでコマンド群や設定がCompatibleで一度書いたらずっと使えるようになるのは、もう少し先かな?

LXC 関連インストール

今回はJessieに突っ込むことにする。

 sudo apt install lxc debootstrap bridge-utils libvirt-bin

debootstrapを使うのは少し意外だった。このあたりもう少し汎用的になると嬉しいんだけど。

環境確認

cgroup を使うので、カーネルバージョンに注意する。

/sys/fs で cgroup が使えていることを確認・

takuya@:~$ mount | grep sys | grep cgruop
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset,clone_children)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)

もしない場合は/etc/fstab/ に追記する

cgroup  /sys/fs/cgroup  cgroup  defaults  0   0
mount /sys/fs/cgroup

動作確認

インストールが終わったら、無事に動いてるか確認する。enable で緑色になってたらオッケ。簡単になったねぇ。

takuya@:~$ sudo lxc-checkconfig
Kernel configuration not found at /proc/config.gz; searching...
Kernel configuration found at /boot/config-3.16.0-4-amd64
--- Namespaces ---
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
Network namespace: enabled
Multiple /dev/pts instances: enabled

--- Control groups ---
Cgroup: enabled
Cgroup clone_children flag: enabled
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
Cgroup memory controller: enabled
Cgroup cpuset: enabled

--- Misc ---
Veth pair device: enabled
Macvlan: enabled
Vlan: enabled
File capabilities: enabled

Note : Before booting a new kernel, you can check its configuration
usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig

テンプレートを初期化してインストール

lxc-create -n my-lxc-debian-01 -t debian -- -r jessie

Debianのサイトからテンプレートを持ってきて初期化してくれる。ここも楽ちん。ここで使われるdebootstrap 偉大だわ。

パスワードをメモっておく。

特に初期設定値を何も入れてないので、rootパスワードが画面に表示されるのでそれをコピっておく。

lxc-ls で一覧を閲覧

完成したら ls で見れる

$ sudo lxc-ls
my-lxc-debian-01 

インストールが終わったら起動

起動する。

$ sudo lxc-start my-lxc-debian-01 

これで、無事に起動する

起動すると、pts tty1経由で接続される。

接続は screen っぽい

接続と切断は 以下の通り

  • Ctrl + a q
Type <Ctrl+a q> to exit the console, <Ctrl+a Ctrl+a> to enter Ctrl+a itself

と出てくるので、GNU screen みたいな感じですね。っていうか、screenだろこれ・・・

切断後の再接続

sudo lxc-console コマンドを使って、コンソールに接続できる。

 sudo lxc-console --name my-lxc-debian-01

Connected to tty 1


Debian GNU/Linux 8 my-lxc-debian-01  tty1

my-lxc-debian-01  login:

ネットワーク設定

lxc-net を使うと楽なのですが、今回はkvm もあることだし、 libvirt経由にします。

ホスト側の設定

$ sudo virsh net-start default
$ sudo ip addr show virbr0

起動時にvirbr0 が起動するようにしておく

# virsh net-autostart default

コンテナ設定ファイルに追記

sudo -e /var/lib/lxc/$NAME/config

以下を追記

lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = virbr0
lxc.network.hwaddr = 00:FF:AA:00:00:01
lxc.network.ipv4 = 0.0.0.0/24

あとはrestart すれば、ネットワークに繋がる。

lxc の作成される先などディレクトリ構成

設定は /var/lib/lxc/$NAME/config に作られる。

/var/lib/lxc/ に各種のファイルが設置される。

/etc/lxc/auto/自動起動などの設定ファイルが置かれる。設定ファイルでlxc.start.auto = 1をしたうえで、/etc に設置すると、どこにLXCの設定を書いても動き出すとのこと。

デフォルトだと、ルートシステムは /var/lib/lxc/$NAME/rootfs に作られていた。

基本的な設定

設定ファイルは次のようになっていた。

# Template used to create this container: /usr/share/lxc/templates/lxc-debian
# Parameters passed to the template: debian-lxc01 -r jessie
# For additional config options, please look at lxc.container.conf(5)
lxc.network.type = empty
lxc.rootfs = /var/lib/lxc/my-lxc-debian-01/rootfs

# Common configuration
lxc.include = /usr/share/lxc/config/debian.common.conf
lxc.mount = /var/lib/lxc/ame/fstab
lxc.utsname = my-lxc-debian-01
lxc.arch = amd64
lxc.autodev = 1
lxc.kmsg = 0

template とデフォルト設定。

template は /usr/share/lxc/templates/ に作られていて、次の場所のようになっていた

takuya@:~$ ll /usr/share/lxc/templates/
合計 336
-rwxr-xr-x 1 root root 10789 2016-07-14 20:42 lxc-alpine
-rwxr-xr-x 1 root root 13533 2016-07-14 20:42 lxc-altlinux
-rwxr-xr-x 1 root root 10253 2016-07-14 20:42 lxc-archlinux
-rwxr-xr-x 1 root root  9446 2016-07-14 20:42 lxc-busybox
-rwxr-xr-x 1 root root 28932 2016-07-14 20:42 lxc-centos
-rwxr-xr-x 1 root root 10150 2016-07-14 20:42 lxc-cirros
-rwxr-xr-x 1 root root 14131 2016-07-14 20:42 lxc-debian
-rwxr-xr-x 1 root root 17427 2016-07-14 20:42 lxc-download
-rwxr-xr-x 1 root root 47200 2016-07-14 20:42 lxc-fedora
-rwxr-xr-x 1 root root 27808 2016-07-14 20:42 lxc-gentoo
-rwxr-xr-x 1 root root 13961 2016-07-14 20:42 lxc-openmandriva
-rwxr-xr-x 1 root root 13705 2016-07-14 20:42 lxc-opensuse
-rwxr-xr-x 1 root root 35445 2016-07-14 20:42 lxc-oracle
-rwxr-xr-x 1 root root 11837 2016-07-14 20:42 lxc-plamo
-rwxr-xr-x 1 root root  6851 2016-07-14 20:42 lxc-sshd
-rwxr-xr-x 1 root root 24273 2016-07-14 20:42 lxc-ubuntu
-rwxr-xr-x 1 root root 12401 2016-07-14 20:42 lxc-ubuntu-cloud

それらのデフォルト設定は次のとおりに、設置されていた。

takuya@:~$ ll /usr/share/lxc/config/
合計 80
-rw-r--r-- 1 root root 1993 2016-07-14 20:42 centos.common.conf
-rw-r--r-- 1 root root 1098 2016-07-14 20:42 centos.userns.conf
-rw-r--r-- 1 root root  126 2016-07-14 20:42 common.seccomp
-rw-r--r-- 1 root root 2148 2016-07-14 20:42 debian.common.conf
-rw-r--r-- 1 root root  745 2016-07-14 20:42 debian.userns.conf
-rw-r--r-- 1 root root 2080 2016-07-14 20:42 fedora.common.conf
-rw-r--r-- 1 root root 1098 2016-07-14 20:42 fedora.userns.conf
-rw-r--r-- 1 root root 1775 2016-07-14 20:42 gentoo.common.conf
-rw-r--r-- 1 root root 2823 2016-07-14 20:42 gentoo.moresecure.conf
-rw-r--r-- 1 root root 1059 2016-07-14 20:42 gentoo.userns.conf
-rw-r--r-- 1 root root 1953 2016-07-14 20:42 oracle.common.conf
-rw-r--r-- 1 root root 1059 2016-07-14 20:42 oracle.userns.conf
-rw-r--r-- 1 root root  778 2016-07-14 20:42 plamo.common.conf
-rw-r--r-- 1 root root  745 2016-07-14 20:42 plamo.userns.conf
-rw-r--r-- 1 root root  155 2016-07-14 20:42 ubuntu-cloud.common.conf
-rw-r--r-- 1 root root  103 2016-07-14 20:42 ubuntu-cloud.lucid.conf
-rw-r--r-- 1 root root  105 2016-07-14 20:42 ubuntu-cloud.userns.conf
-rw-r--r-- 1 root root 2640 2016-07-14 20:42 ubuntu.common.conf
-rw-r--r-- 1 root root   58 2016-07-14 20:42 ubuntu.lucid.conf
-rw-r--r-- 1 root root 1059 2016-07-14 20:42 ubuntu.userns.conf

最近は /etc/foo/bar.d に置かないのが多いんだろうか。

ストレージについて

   -B backingstore
     'backingstore'  には 'dir' か 'lvm' か 'loop' か 'btrfs' か 'zfs' か 'best' のいずれかを指定します。

とあるので、LVMのVGをそのまま使うとか、zfs や btrfs にそのまま接続できるっぽい。管理の手間は大幅に省けそうなので、コンテナ用のストレージのドライブではもうext4捨ててもいいかもしれない。

感想など

最近DebianWikiが充実してるし余計な情報がないのですごくわかりすい。

LXCはDebian Wikiの充実の恩恵を浴びてて、調べるのが楽だった。

LXCは、debian Strechから更に使いやすくなりそう。

BtrfsやZFSに搭載された重複ファイルの削除(節約)機能を使えば、この手のLXCコンテナってものすごくファイル量少なくて動かせるよね。btrfs楽しみ!

console 接続めんどくさい。

ここまで簡単になってるのに、さらにAnsibleするなんて設定のための設定地獄じゃないの・・・と思ってみたり。

参考資料

https://wiki.debian.org/LXC

https://wiki.debian.org/LXC/LibVirtDefaultNetwork

https://wiki.debian.org/LXC#Setup_networked_containers

ぱぱっとkvm/libvirtの仮想環境を作る(debian apt)

ぱぱっと仮想環境を作って使いたい。

今回作るのは、kvm を使った仮想環境。

ターゲットはDebian Jessie

jessie 以降の特徴

jessie 以降では, CONFIG_VFIO_PCI_VGA がオンでビルドされているので、VGA Passthroughだって可能らしい。これは試さないと。

The Debian Jessie kernel ships with CONFIG_VFIO_PCI_VGA=y, but for Wheezy one must compile

kvm で作るために、とりあえずProxmoxも考えたけれど、apt で kvmlibvirt 一式を入れることにしました。

インストールするもの

kvm 関連と libvirt を入れることにする。

sudo apt install qemu-kvm kvm libvirt-bin bridge-utils virt-manager -y

まぁこれくらい入れておけば大丈夫かな。

次に ユーザーをグループに追加。

libvirt はグループにいないと使えないので追加する。

takuya@:~$ getent group | grep  virt
libvirt:x:137:takuya
libvirt-qemu:x:138:libvirt-qemu
sudo adduser $USER libvirt
sudo adduser $USER libvirt-qemu

グループに追加したら、忘れずログアウトしておく

Xでログインしてる場合は、

sudo systemctl restart lightdm

ssh でログインしてる場合は

exit

でログインしてid反映させる。

もし、グループ追加を忘れると

virt-manager を起動した後に

libvirt に接続できませんでした:

このようなメッセージが出て悲しい思いをする。

リモートで virt-manager

ssh -X 

X転送で何とかする。

WEB-UIほしい。

まいかいSSHで転送して起動するの面倒だから、コンソールをWEBにリダイレクションできるやつほしい。

この辺もそのうち調べないと。

参考資料

https://wiki.debian.org/VGAPassthrough

Ubuntu 12.04にKVMをインストールし、bridge接続の設定を行う - Symfoware

iTerm でマウス選択のオプションを調べた

iTerm にはマウス選択範囲にオプションがあった。

知らんかった。iTerm 数年使ってるけど、iTermの設定や使い方は突っ込んだことがなかった。

公式のFAQにこのような記述がある。

Q: What modifier keys affect marking a selection for copy and paste?

A: If you hold down modifier keys while making a selection, the behavior changes in various ways:

  • Alt/Option: Mouse reporting will be disabled. If you're using vim and you can't make a selection, try holding down the alt key and see if that fixes it.
  • Alt + Cmd: Make a rectangular selection.
  • Shift: Extend an existing selection.
  • Alt + Shift: Extend a rectangular selection.
  • Cmd: Make a discontinuous selection

Q. iTerm に修飾キー押しながらマウスで選択したときどうなりますか?

A). 修飾キーを押しながらマウスで選択しときに、その修飾キーごとに操作がことなる

  • Alt/ Option を押しながら-- アプリ側にマウス動作を通知しない、tmux/screen/Vimなどにマウストラックキングをオンにしている場合に便利
  • Alt + CMD を押しながら -- 箱型選択!
  • Shift を押しながら -- 既存選択範囲をクリック位置まで拡張
  • Alt +Shift を押しながら -- 既存箱型選択の末尾から選択範囲を拡張
  • Cmd を押しながら -- 複数箇所を選択できるぜ

箱型選択!

箱型選択できたんですね。革命的!

その他にも

Additionally, you can affect other mouse-related activities with modifier keys:

Dragging a selection copies and pastes it. If you keep doing this by accident, turn on *Prefs > Advanced > To drag images or selected text, you must hold ⌘. This prevents accidental drags.. Cmd+click on a URL opens it.

  • URLの上で、CMD+クリックでURLを開く(右クリックならURLコピー
  • *Prefs > Advanced > To drag images or selected text をONにした状態でCMD押しながらドラッグすると、ドラッグでコピーしてドロップ位置にペーストする。

URLのクリックは便利!

参考資料

https://www.iterm2.com/faq.html