Microsoft Edge とかいう VMware Host Client client

最近戯れで ESXi を弄って遊んでるんだが、管理に使う VMware Host Client が Edge じゃないとまともに動かない(Edge でもまともに動いてない部分があるがw)
Edge は chrome のダウンロードツールだと思ってたが最近はタスクバーにピン止めしてる。

最近の Raspbian を USB 接続のドライブで起動する

新しめの Raspbian を DL してきたら Berryboot から起動するようになってて、一筋縄では USB 接続のドライブから起動するようにできそうもなかったのでメモ
(そもそも RPi3 だと SD カードレスで起動できるらしいんだけど上手く行かなかったのと、いま USB のドライブから起動したいのは RPi2 なのであくまで SD カード自体は使う方式で)。


とりあえず USB 接続のストレージがあるとして適当な Linux 機でフォーマットする手順(適当)。sdx ってなってるところは適切にフォーマット対象のデバイスを選ぶこと(まるごと消すから)
まずまっさらな GPT 形式にしてパーティション切っていく
$ sudo sgdisk -Z /dev/sdx
$ sudo gdisk /dev/sdx
(o で GPT パーティションテーブルを作って n でパーティション切って w で書き込んで終わり)
$ sudo mkfs -t ext4 /dev/sdx1
あとで Raspbian の中身をコピーしてくるのでマウントしておく
$ mkdir -p ~/mnt/dst
$ sudo mount /dev/sdx1 ~/mnt/dst


公式のイメージファイルが 2017-03-02-raspbian-jessie.img だとして、中身をさぐる
$ parted ~/2017-03-02-raspbian-jessie.img unit B print
二つにわかれてる両方に用事があるので両方マウントしておく


$ mkdir -p ~/mnt/boot
$ mkdir -p ~/mnt/berryboot
$ sudo mount -o offset=1048576,sizelimit=133169152 ~/2017-03-02-raspbian-jessie.img ~/mnt/boot
$ sudo mount -o offset=134217728,sizelimit=7610564608 ~/2017-03-02-raspbian-jessie.img ~/mnt/berryboot
ext4 の berryboot の中に Raspbian のイメージが入ってる。つまり bag in bag!!
こいつをマウントする


$ mkdir -p ~/mnt/raspbian
$ sudo mount ~/mnt/berryboot/images/Debian_Jessie_Raspbian_2016.11.img192 ~/mnt/raspbian


中身をコピー(ここのコピー元の最後の / は重要で、忘れたら sudo mv ~/mnt/dst/raspbian/* ~/mnt/dst みたいにして移動する必要があるw)
$ sudo rsync -av ~/mnt/raspbian/ ~/mnt/dst


いったんこれで外付けする USB ストレージは完成。
$ sudo umount ~/mnt/dst
$ sudo umount ~/mnt/raspbian
$ sudo umount ~/mnt/berryboot


~/mnt/boot から RPi の起動につかう SD カードへ中身をコピー(この SD カードはあまり容量を大きくとると RPi の一番最初のブート処理部分が bootcode.bin を見つけられずに失敗するかもしれないので控えめなサイズにしておく。公式イメージそのままだと 127MB くらいになってる)
$ cp ~/mnt/boot/* /mnt/sdcard
$ sudo umount ~/mnt/boot


で、SD カード内のファイルをいじっていきます。まずは config.txt から


# Berryboot settings, do not change
initramfs berryboot.img


って書いてある部分を消すかコメントアウトします
チェンジするなって書いてあるけど全力ででチェンジで!!


# Berryboot settings, do not change
# initramfs berryboot.img


つぎに cmdline.txt を書き換えます。
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/sda1 rootfstype=ext4 elevator=deadline rootwait
これでいったん /dev/sda1 から起動するはずなので、SD カードと USB ストレージをつけて RPi を起動します(/dev/sda1 って決め打ってる状態なので他のストレージを繋がないように)


ここで RPi が起動すれば8割完了ですが、まだ /dev/sda1 って決め打ってるのが気持ち悪いので UUID 指定にします。
カーネル単体だと UUID 指定を理解してくれないようなので initramfs を作って指定します。


もし initramfs-tools がなければ入れておきます(標準のイメージなら入ってるはず)
$ sudo apt-get install initramfs-tools


さくっと作れるかと思ったらモジュールの入ったディレクトリがないとか怒られるので、適当に空ディレクトリ作ったら警告はでるけどできました。
$ sudo mkinitramfs -o /boot/initrd.img
$ sudo mkdir -p /lib/modules/4.4.47v7-aufs
$ sudo mkinitramfs -o /boot/initrd.img


また config.txt をいじります。
initramfs initrd.img


$ sudo blkid して USB ストレージの uuid を調べておきます。
それを cmdline.txt で指定します


dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=UUID=00000000-0000-0000-0000-000000000000 rootfstype=ext4 elevator=deadline rootwait


これで再起動してちゃんと起動したら完了です。
もう他の USB ストレージをつないでも大丈夫。
つか自分用備忘録なので分かりづらくてさーせん。

ユーザー名を pi から変えておく

まず sudo passwd で root のパスワードを設定しておく.
そして pi のプロセスがひとつもない状態にする(入れたばかりならログアウトして root でログインしなおせば大丈夫なはず)


ユーザー名 pi から変えておく

# usermod -l new_user_name pi


グループ名を pi から変えておく

# groupmod -n new_group_name pi


ホームディレクトリの変更(ディレクトリ自体の移動もしてくれる)

# usermod -d /home/new_user_name -m pi


crontab とか他のもろもろはこの操作だけじゃ変わらないので、ユーザー pi でいろいろいじくる前にやってしまうのが良さそう。
/etc/sudoers.d/010_pi-nopasswd とかもいじることになる.

Raspbian のコンソールのフォントを変える

これは昔から変わらないと思うが、やり方忘れてググったのでメモ。


やりかた1

$ sudo dpkg-reconfigure console-setup

"UTF-8" を選択.
"Guess optimal character set" を選択.
"Terminus", "TerminusBold" あたりを選択.
お好みのフォントサイズを選択.


やりかた2

$ sudo vi /etc/default/console-setup

FONTFACE="Terminus"
FONTSIZE="16x32"

$ sudo /etc/init.d/console-setup restart


候補はこんな感じ
Terminus
6x12
8x14
8x16
10x20
11x22
12x24
14x28
16x32

TerminusBold
8x14
8x16
10x20
11x22
12x24
14x28
16x32

TerminusBoldVGA
8x14
8x16

systemd 化されてしまった Raspbian でコンソールへの自動ログインをやめさせる

またしても systemd か。


やめさせる

ln -fs /lib/systemd/system/getty@.service     /etc/systemd/system/getty.target.wants/getty@tty1.service


自動ログインに戻す

ln -fs /etc/systemd/system/autologin@.service /etc/systemd/system/getty.target.wants/getty@tty1.service

謎の企業⽢潤社とはっ

⽢潤社、聞いたこともないような名前の企業である
しかしてその実態は膨大な量の暗号文を配布し、社員をはじめその理念に賛同するもの達への指示を行っている悪の秘密結社である!


というのは嘘で、ShiftJIS 優先のエディタで HTML 書き始めてうっかりそのまま保存して Chrome でみたら


㱨瑭氾ഊ़桥慤㸍ਉ़瑩瑬放浵獩挼⽴楴汥㸍ਉ़獣物灴⁳牣㴢浵獩挮臏∾㰯獣物灴㸍ਉ㰯桥慤㸍ਉ㱢潤社ഊउ苙芰ഊ़⽢潤社ഊ㰯桴浬


こんな風に化けてました
ちょっと謎。

template <typename NUMBER_TYPE>
NUMBER_TYPE calculateGcdWithEuclidean(NUMBER_TYPE fst, NUMBER_TYPE snd)
{
	if (fst <= 0) { fst *= -1; }
	if (snd <= 0) { snd *= -1; }
	
	while (fst != snd)
	{
		if (fst > snd)
		{
			fst -= snd;
		}
		else
		{
			snd -= fst;
		};
	};
	
	return fst;
};

#include <iostream>
#include <stdlib.h>
int main(int argc, const char** argv)
{
	long timesPerSecond = 1000000; // 1000
	long framesPerSecond = 60; // 60
	long baseTime = timesPerSecond / framesPerSecond; // 16
	long remaindered = timesPerSecond % framesPerSecond; // 40
	
	long gcd = calculateGcdWithEuclidean(framesPerSecond, remaindered); // 20
	long cycle = framesPerSecond / gcd; // 3
	long longSpanCount = remaindered / gcd; // 2
	std::cout << "baseTime:" << baseTime << std::endl;
	std::cout << "remaindered:" << remaindered << std::endl;
	std::cout << "gcd:" << gcd << std::endl;
	std::cout << "cycle:" << cycle << std::endl;
	std::cout << "longSpanCount:" << longSpanCount << std::endl;
	
	// assertEqual(timesPerSecond, (cycle * gcd * baseTime) + (longSpanCount * gcd));
	long* pTimeTable = (long*)malloc(sizeof(long) * cycle);
	for (int i = 0; i < cycle; i += 1)
	{
		pTimeTable[i] = baseTime + ((i < longSpanCount) ? 1 : 0);
		std::cout << i << ":" << pTimeTable[i] << std::endl;
	}
	free(pTimeTable);
	
	return 0;
}