blog.monophile.net

コンピュータのこととかのメモ。

Takaaki Yamamoto

東京工業大学において計算機科学と応用数学を学び、 情報科学芸術大学院大学[IAMAS] においてメディア表現を専攻し修了。 現在は digitiminimi Inc. において、インフラエンジニアとして生計をたててている。

work

各種システム構築と管理を承ります。

Cloud Platform Openstack, GCP, AWS, Azure, ...
Openstack keystone, glance, cinder, swift, neutron, nova, ...
Virtualization QEMU+KVM, LXD/LXC, Docker, ...
OS Debian GNU/Linux, Ubuntu, CentOS, ...
Networks IPSec, L2TP, VXLAN, WirelessAP, ...
WebApps WordPress, GitLab, Redmine, ...
Configuration Management Ansible, Terraform, ...
Monitoring Nagios, Munin, ...

posts

OpenZFS on OS Xでバックアップ

概要

使っているMacBook Pro(15-inch, Mid 2015)のバッテリーが膨らんできたので、 Apple Storeへ持ち込みでバッテリー交換に出そうかと。 修理の前にはバックアップが必要らしいので、 ZFSでホームディレクトリのみをバックアップしてみた。 (基本的にシステムのフルバックアップは必要のない使い方をしている。)

MacOSのTimeMachineは複数HDDのTimeMachineのデータを一つのHDDへ結合したり、 別FSに移行したりすることが困難だったので、最初からZFSにしてみる。 なんせ、ZFSならばFreeBSDでもLinuxでも読めるし、 普段は外付けのUSBのHDDにバックアップしておいて、 あとでRAIDZを組んだNASにsend|receiveもできる。

OpenZFSをインストールする。

↓のページを参考にしてOpenZFSをインストールする。

ディスクの確認

diskutilなどでZFSを使用するディスクを決める。 今回はUSB接続HDD(2TB)の/dev/disk3を利用する。

$ diskutil list /dev/disk3
/dev/disk3 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *2.0 TB     disk3
   1:                        EFI EFI                     209.7 MB   disk3s1
   2:                  Apple_HFS usbwd00                 2.0 TB     disk3s2

プールの作成

プールの作成は既存のデータが消えるため、ディスクの指定はよく確認する。

MacOSはデフォルトの設定であればファイル名の大文字小文字を区別しないのと、 Unicodeの正規化がNFDという方法のため、下記のように作成時に指定する。 これらのオプションはプール作成後では変更不可能になる。

sudo zpool create -f -o ashift=12 -O casesensitivity=insensitive -O normalization=formD usb2tb disk3

プールが作成され、パーティションが変更されていることが確認できる。

$ diskutil list /dev/disk3
/dev/disk3 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *2.0 TB     disk3
   1:                        ZFS usb2tb                  2.0 TB     disk3s1
   2: 6A945A3B-1DD2-11B2-99A6-080020736631               8.4 MB     disk3s9

調整

パフォーマンスを上げたい場合は、 下記のようにして圧縮(lz4)を有効にし、atimeを無効にする。

sudo zfs set compression=lz4 atime=off usb2tb

実際のデータの圧縮率を確かめるときは↓のようにすればよい。

$ sudo zfs get compressratio
NAME                   PROPERTY       VALUE  SOURCE
usb2tb                 compressratio  1.42x  -
usb2tb/backup          compressratio  1.42x  -
usb2tb/backup/mbphome  compressratio  1.42x  -

データセットの作成

今回は usb2tb/backup/mbphome というデータセットにバックアップをするので、 下記のようにして作成する。

$ sudo zfs create -p usb2tb/backup/mbphome

下記のようにデータセットが作成され、 /Volumes/usb2tb/backup/mbphome にマウントされている事がわかる。

$ sudo zfs list
NAME                       USED  AVAIL  REFER  MOUNTPOINT
usb2tb                    2.15M  1.76T  1.14M  /Volumes/usb2tb
usb2tb/backup              832K  1.76T   416K  /Volumes/usb2tb/backup
usb2tb/backup/mbphome      416K  1.76T   416K  /Volumes/usb2tb/backup/mbphome

違う場所にマウントしたい場合は↓のように設定する。

$ sudo zfs set mountpoint=/mnt/point usb2tb/backup/mbphome

バックアップ

rsyncを使ってバックアップ。

$ sudo rsync -av $HOME/ /Volumes/usb2tb/backup/mbphome/

スナップショット

スナップショットを作成する。

$ sudo zfs snapshot usb2tb/backup/mbphome@$(date +%s)

作成されたスナップショットは↓で確認できる。

$ sudo zfs list -t snapshot
NAME                                  USED  AVAIL  REFER  MOUNTPOINT
usb2tb/backup/mbphome@1508171437      0      -   156G  /Volumes/usb2tb/backup/mbphome/.zfs/snapshot/1508171437

refs

Mac環境でInternet Explorerによる表示確認(VirtualBox)

概要

Windows(IE)環境で簡単な動作検証をしたいときに便利そうだったのでやってみた。 VirtualBoxを使う。

VirtualBoxをインストールする。

VirtualBoxを以下からダウンロードして、インストール。

Windowsの仮想マシンイメージをダウンロードする

以下から好きな仮想マシンイメージをダウンロードする。 今回は“IE11 on Win7(x86)”を選んだ。

ダウンロードしたzipファイルを展開しておく。

$ unzip IE11.Win7.For.Windows.VirtualBox.zip
Archive:  IE11.Win7.For.Windows.VirtualBox.zip
  inflating: IE11 - Win7.ova

仮想マシンの立上げ

  1. VirtualBoxを立上げ、上部メニューより、 [File] -> [Import Appliance… (Cmd-I)] を選択。
  2. 展開した“IE11 - Win7.ova”を選択し、Continue。
  3. デフォルトの設定のままでImportを押す。 状況に応じて設定を変えても良いと思う。
  4. (インポートに少し時間がかかるが、気長に待つ。 仮想ディスクをフォーマットし、展開とかをしているのだと思う。)

インポートが終わったら上図の仮想マシンのアイコンをダブルクリックで仮想マシンを起動。

無事に起動し、IEを開けば動作確認が可能。

めでたしめでたし。

仮想環境が一昔前よりサクサク動く印象があって、時代を感じる。

備考

C:\Windows\system32> slmgr -rearm

refs

Homebrewを指定のパスにインストールする

概要

MacPortsをメインに使っているので、Homebrewを標準ではないパス /opt/homebrew にインストールする。

install

$ sudo mkdir /opt/homebrew
$ sudo chown ${USER}:staff /opt/homebrew
$ cd /opt
$ curl -L https://github.com/Homebrew/homebrew/tarball/master | tar xz --strip 1 -C homebrew
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   124    0   124    0     0     31      0 --:--:--  0:00:04 --:--:--    30
100   139    0   139    0     0     34      0 --:--:--  0:00:04 --:--:--  135k
100  194k  100  194k    0     0  39842      0  0:00:05  0:00:05 --:--:--  368k
$ cd /opt/homebrew
$ mv share/doc/homebrew docs

インストール自体は↑で終わり。 /opt/homebrew/binを環境変数PATHに追加すればbrewコマンドが使える。

備考

基本的には上記のページと同じだが、そのままだと初回の brew update で↓のようにコケるため、 mvコマンドで/opt/homebrew/share/doc/homebrewを/opt/homebrew/docsへ移動している。

$ brew update
Initialized empty Git repository in /opt/homebrew/.git/
remote: Counting objects: 1126, done.
remote: Compressing objects: 100% (1035/1035), done.
remote: Total 1126 (delta 116), reused 378 (delta 49), pack-reused 0
Receiving objects: 100% (1126/1126), 1.21 MiB | 740.00 KiB/s, done.
Resolving deltas: 100% (116/116), done.
From https://github.com/Homebrew/brew
 * [new branch]      master     -> origin/master
HEAD is now at ec0d8fa Merge pull request #3220 from yzguy/yzguy/cask_available_languages_to_info
To restore the stashed changes to /opt/homebrew run:
  'cd /opt/homebrew && git stash pop'
==> Downloading https://homebrew.bintray.com/bottles-portable/portable-ruby-2.3.3.leopard_64.bottle.1.tar.gz
######################################################################## 100.0%
==> Pouring portable-ruby-2.3.3.leopard_64.bottle.1.tar.gz
==> Homebrew has enabled anonymous aggregate user behaviour analytics.
Read the analytics documentation (and how to opt-out) here:
  https://docs.brew.sh/Analytics.html

==> Tapping homebrew/core
Cloning into '/opt/homebrew/Library/Taps/homebrew/homebrew-core'...
remote: Counting objects: 4596, done.
remote: Compressing objects: 100% (4383/4383), done.
remote: Total 4596 (delta 29), reused 340 (delta 6), pack-reused 0
Receiving objects: 100% (4596/4596), 3.83 MiB | 4.37 MiB/s, done.
Resolving deltas: 100% (29/29), done.
Tapped 4374 formulae (4,643 files, 11.9MB)
Already up-to-date.
Error: Could not link:
/opt/homebrew/share/doc/homebrew

Please delete these paths and run `brew update`.

refs

Chromeのテーマを作成しフレームの色を変える

概要

Google Chromeで同時に多数のプロファイルを使う時に混乱しないように、 テーマ機能を使ってフレームの色を変えてみた。

manifest.json

フレームの色を変えたいだけであれば、基本的には下記のようなmanifest.jsonだけ作成すればよい。 色はHexコードではダメで整数(0-255)の配列を指定する。

{
  "manifest_version": 2,
  "version": "2.6",
  "name": "blue",
  "theme": {
    "colors": {
      "frame": [33, 150, 243],
      "toolbar": [227, 242, 253]
    }
  }
}

apply

  1. chrome://extensions を開く
  2. “Developer mode” にチェックを入れる
  3. “Load Unpacked extention…” を押し、manifest.jsonが置かれているディレクトリを選択する。

適用方法は上記の通り。 適用すると↓の様に色が変わる。

refs

IntelAMTをLinuxで使ってみる

概要

vPro対応のThinkPadを持っていたので、IntelAMTを使って、SOLをやってみた。 BIOSの設定も可能。 2017年になってIntelAMTの脆弱性が発見されたので、IntelAMTのファームウェアのアップデートは必須。 (おそらく、同じセグメントに信頼できるホストしか居ない場合は問題ない。) IntelAMTのファームウェアのアップデートはWindowsじゃないとできなさそう。

IntelAMTの設定

起動時のThinkPadロゴマーク表示しているときににEnterを押してからCtrl-Pを押してから以下のように設定する。 (今回はSOLのみの設定。)

Linux側の設定

pciの[VendorID:DeviceID]を確認する。

$ lspci -nn | grep -i "serial controller"
00:16.3 Serial controller [0700]: Intel Corporation 7 Series/C210 Series Chipset Family KT Controller [8086:1e3d] (rev 04)

/etc/udev/rules.d/z25_sol.rules に上で確認したIDでttySOLへのシンボリックリンクを作成するように設定する。

KERNEL!="ttyS[0-9]", GOTO="no_serial"
ATTRS{vendor}!="0x8086", GOTO="vendor_not_intel"
ATTRS{device}=="0x1e3d", SYMLINK+="ttySOL", ENV{COMMENT}="Serial-Over-Lan $attr{vendor}:$attr{device}"
GOTO="vendor_not_intel"
LABEL="no_serial"

再起動すると以下のようにシンボリックリンクが作成されることが確認できる。

$ ls -l /dev/ttySOL
lrwxrwxrwx 1 root root 5 Aug  4 22:04 /dev/ttySOL -> ttyS4

この状態でgettyを起動することによって、ttySOLが使えるようになる。

$ sudo /sbin/getty -L ttySOL 115200 vt100-nav

ブート時にgettyが立ち上がるように設定するために、 /etc/default/grubでカーネルの起動パラメータを以下のように変更しupdate-grubする。

GRUB_CMDLINE_LINUX="console=tty0 console=ttyS4,115200n8"
GRUB_TERMINAL=serial
GRUB_SERIAL_COMMAND="serial --speed=115200 --port=0xf0e0 --word=8 --parity=no --stop=1"

確認

192.168.xx.xx/255.255.255.0 と同じセグメントから http://192.168.xx.xx:16992/ にアクセスするとIntelAMTの画面が見れる。

また、以下でIntel AMTの情報を確認することも可能。

$ sudo apt install amtterm
$ export AMT_PASSWORD=P@assw0rd
$ amttool -h 192.168.xx.xx info
### AMT info on machine '192.168.xx.xx' ###
AMT version:  8.1.71
Hostname:     your-hostname
Powerstate:   S0
Remote Control Capabilities:
    IanaOemNumber                   0
    OemDefinedCapabilities          IDER SOL BiosSetup BiosPause
    SpecialCommandsSupported        PXE-boot HD-boot cd-boot
    SystemCapabilitiesSupported     powercycle powerdown powerup reset
    SystemFirmwareCapabilities      f800

Serial Over LAN

別ホストからIntelAMTのIPアドレスを指定することによってSerial Over LANができた。

$ export AMT_PASSWORD=P@assw0rd
$ amtterm 192.168.xx.xx
amtterm: NONE -> CONNECT (connection to host)
ipv4 192.168.xx.xx [192.168.xx.xx] 16994 open
amtterm: CONNECT -> INIT (redirection initialization)
amtterm: INIT -> AUTH (session authentication)
amtterm: AUTH -> INIT_SOL (serial-over-lan initialization)
amtterm: INIT_SOL -> RUN_SOL (serial-over-lan active)
serial-over-lan redirection ok
connected now, use ^] to escape

Ubuntu 17.04 your-hostname ttyS4

your-hostname login:

BIOSの設定

IntelAMT経由でBIOSの設定をリモートでするには、 予めBIOSで下記のようにConsole TypeをVT100にしておかなければならない。

上記のように設定した状態で下記のように再起動するとBIOSの設定画面を操作することができる。

$ export AMT_PASSWORD=P@assw0rd
$ gamt 192.168.xx.xx &
$ amttool -h 192.168.xx.xx reset bios

refs