GPTなディスクをMBRにする

MBRからGPTはなんだか気づいたらなってることもおおいし(?)別にわりとどうでもいいんだけど、その逆は気づいたらなってるってことも無いのでメモ。

一発メモっておけば記憶にも残るでしょうということで。

parted /dev/sdb -s mklabel msdos

単純な感じだった。

参考:GPTをmbrに変換 – Qiita

ddするときに進捗状況をを確認する

pkill使えとかいうのが多いんだけど、killとかいう言葉が怖いし、pv使えばかんたんにいけるっぽいというお話。

パイプを使ってcatをpvに通してそれをddに通す。

ddでもpvコマンドを使えば進捗を簡単に見れる

ddでもpvコマンドを使えば進捗を簡単に見れる

 

cat→pv→ddという流れさえ覚えておけば簡単に使えるね。

ちなみにpvのインストールは普通にpacmanで良い

$ sudo pacman -S pv
$ cat ./img | pv |sudo dd of=/dev/mmcblk1

みたいな感じだね

既存のArchLinuxからUSBメモリにArchLinuxをインストールする

USBメモリから起動するArchLinux、という環境を作る。通常のHDDやSSDにインストールしてそこからブートする感覚で、ストレージデバイスとしてUSBメモリを使う。

普通にArchLinuxをインストールする時、isoイメージから起動ディスクを作成して、そこからブートしてインストールするが、今回は既存の環境から必要なデータをコピーするようにした。

ちなみにUEFI+GPT環境。(今回のターゲットはSurface Pro 4だったりする。Secure bootは気にしない方向で…)

 

なにはともあれlsblkしてUSBメモリが/dev/sdbである事を確認。

ついでにarch-install-scriptsをインストールしておく。

 

最初の山(最初っていうか山はこれしかない気もする)、パーティショニング。

購入したばかりのUSBメモリ(16GB)、MBRだったのでGPTに変換して、パーティションを切る。作業はともかく、こんな状態であれば良さそう。

# gdisk /dev/sdb
GPT fdisk (gdisk) version 1.0.1

Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): p
Disk /dev/sdb: 30497664 sectors, 14.5 GiB
〜略〜

Number Start (sector) End (sector) Size Code Name
1 2048 1050623 512.0 MiB EF00 EFI System
2 1050624 30497630 14.0 GiB 8300 Linux filesystem

Command (? for help):

要は、

・/dev/sdb1がEFI System(/bootになる)
・/dev/sdb2がLinux filesystem(/になる)

という事。

ターゲットになる環境はRAMが8GBあるし、メインストレージがUSBメモリになるのでswapは無しの方向で。

 

パーティショニングが完了したらファイルシステムのフォーマットとマウント。

普通にやれば良いが、

ジャーナルを無効にしたext4が良い

あるので、そうする。

# mkfs.vfat -F32 /dev/sdb1
# mkfs.ext4 -O "^has_journal" /dev/sdb2
# mount /dev/sdb2 /mnt
# mkdir /mnt/boot
# mount /dev/sdb1 /mnt/boot

 

次にベースシステムのインストール。

主要パッケージについては既存環境からコピーしてくるので、そのための準備をする。

手軽に取り扱える簡単なhttpdであるところのdarkhttpdを使う。

$ sudo pacman -S darkhttpd
$ sudo darkhttpd /var/cache/pacman/pkg

そして/etc/pacman.d/mirrorlistにServer http://localhost/とでも先頭に書いておく。

この状態でpacstrapすれば、/var/cache/pacman/pkgに存在するパッケージはコピーされ、そうでないものは404が返され、(次のリポジトリを探す事になるので)自動的にダウンロードされる。

# pacstrap /mnt base base-devel

 

fstabを作成する。

# genfstab -U -p /mnt >> /mnt/etc/fstab

/mnt/etc/fstabに書き込む許可が無いよ、と言われたので、genfstabの出力をクリップボードに放り込んで、# gedite /mnt/etc/fstabして強引に放り込んでおいた。

このfstabに、/dev/sdb1等ではなく、きちんとパーティションのUUIDで指定されているかどうか、必ず確認しておく。

 

chrootしてロケール設定その他諸々てきとうに…

# arch-chroot /mnt /bin/bash
# vi /etc/locale.gen
# localge-gen
# echo LANG=en_US.UTF-8 > /etc/locale.conf
# export LANG=en_US.UTF-8
# ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# echo HOSTNAME > /etc/hostname
# passwd

 

最後にブートローダーのセットアップ。

grubを使うのだけど、grub-install時に–removableオプションを付けておけと書いてあったのでそうしてある。

# pacman -S grub dosfstools efibootmgr
# grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub --removable --recheck --debug
# grub-mkconfig -o /boot/grub/grub.cfg

/boot/efi/boot/bootx64.efiが存在しているか確認しておく。無ければ以下の感じで。

# mkdir /boot/efi/boot
# cp /boot/efi/arch_grub/grubx64.efi /boot/efi/boot/bootx64.efi

 

初期RAMディスクの作成をする前にゴニョゴニョしておけとUSB キーに Arch Linux をインストール – ArchWikiに書いてあったのでしておく。タイミングはよくわかってない(最後にやった)。

# vi /etc/mkinitcpio.conf
# mkinitcpio -p linux

/etc/mkinitcpio.confの中でHOOKSのudev直後にblockと追加しておく。

 

以上で基本のインストールは完了。その後適宜環境を構築していこう。(今回はここでおしまい)

指紋認証使わない事にした

指紋認証を使うで、ノートPCで指紋認証を使うようにしてみたはいいけど、指紋認証ってめんどい。

指を指紋リーダに持っていく→優しくかつ力強く撫でる→たまに失敗する

ゴミか…。

という訳で使わない事にした。

/etc/pam.d以下の編集を元に戻して、sudo pacman -Rs fingerprint-gui でさようなら。

再起動して無事処理完了という事ですね。

 

指紋認証って、なんかかったるいんだよね。i{Phone, Pad}の指紋認証も、ホームボタン押して、ひと呼吸おいてからロック解除される。このひと呼吸がかったるい。普通にロック解除操作した方が速いのだ。

ノートPCで使ってた状態もそんなような感じでかったるかったので、結局キーボードでちゃんと操作した方が速いと。

生体を使った認証技術、他にも虹彩とか声紋とか諸々あるみたいだけど、どれもキーボード操作には速度的には負けるんじゃないかなとか思うんだよね(使ったことないけど)

生体認証技術の目的はきっとそこじゃなくて、個人に固有とか、覚える必要無しとか、そういうとこなんだろうけどね。

 

おしまい。

ArchLinuxのリポジトリミラーをローカルに立てる

Ubuntuでならやったことあるんだけど、そういえばArchLinuxではやったことないな~とふと思ったのでやってみた。

基本はLocal Mirror – ArchWikiの通りにしたんだけど、再三「マジ?やめとけよ、な?無駄だろ?pacman cacheとかにしなよ?な?」と言われまくったので、sync.shの内容は省略する。

ちなみにいつもどおり、ArchLinuxと見せかけてAntergosでの実験である()

 

自分のところにリポジトリミラーを作っておけば、ローカルでの通信になるので非常に高速に処理が可能になる。リモートのミラーサーバからなら、大抵の場合ボトルネックになるのはインターネット回線(というよりミラーサーバ側の通信帯域制限)だけど、ローカルからだとストレージの速度になるんかな。LANはギガビットイーサだし。

 

/dev/sdc1を/var/mirrorとしてmount、その中にLinuxというディレクトリを作成し、その中にミラーリングするようにした。実際ArchLinuxのミラーサーバには不満全然なくていいんだけど、Antergosのほうにこそ不満があるため、こちらもミラーリングする。

ftp.tsukuba.wide.ad.jpから、core, extra, community, iso, multilib、それからmirror.us.leaseweb.netからantergosをrsyncでもらってくる。rsyncするサーバは新しいミラーのガイドライン|antergosウィキで見つけたものを使った。

/var/mirror/Linux/$repoではなく、/var/mirror/Linux/{archlinux, antergos}/$repoという構成にしておかないと、rsyncでmultilibが削除されてしまうので横着せず、それぞれ処理を行う。

最終的なフォルダツリーはこんな感じ。

$ cd /var/mirror/Linux
$ tree -d
.
├── antergos
│ ├── antergos
│ │ ├── i686
│ │ └── x86_64
│ ├── antergos-staging
│ │ ├── i686
│ │ └── x86_64
│ ├── iso
│ │ ├── release
│ │ └── testing
│ │   └── uefi
│ │      └── antergos-staging
│ │         ├── i686
│ │         └── x86_64
│ └── project
│    └── trace
└── archlinux
   ├── community
   │ └── os
   │   └── x86_64
   │     └── local
   ├── core
   │ └── os
   │   ├── i686
   │   └── x86_64
   ├── extra
   │ └── os
   │   ├── i686
   │   └── x86_64
   ├── iso
   │ ├── 2016.06.01
   │ │ └── arch
   │ │       ├── boot
   │ │       │ └── x86_64
   │ │       └── x86_64
   │ ├── 2016.07.01
   │ │ └── arch
   │ │   ├── boot
   │ │   │ └── x86_64
   │ │   └── x86_64
   │ ├── 2016.08.01
   │ │ └── arch
   │ │    ├── boot
   │ │    │ └── x86_64
   │ │    └── x86_64
   │ ├── archboot
   │ │ ├── 2016.05
   │ │ │ └── boot
   │ │ ├── history
   │ │ └── latest
   │ │    └── boot
   │ └── latest
   │    └── arch
   │       ├── boot
   │       │ └── x86_64
   │       └── x86_64
   ├── multilib
   │ └── os
   │ └── x86_64
   └── project
      └── trace
61 directories

後は好きなHTTPサーバを入れて、

・DocumentRootを/var/mirror/Linuxにする

・インデックス表示されるようにするといいかも

・ポート番号変えても良い

mirrorlistはそれぞれこんな感じで。

# ArchLinux
Server = http://localhost:1123/archlinux/$repo/os/$arch

# Antergos
Server = http://localhost:1123/antergos/$repo/$arch

ISOが手元にあるので、毎度インストールメディア作ろうと思って拾ってくる待ち時間を過ごす必要が無くなったし、新規にインストールするのも時間かからずいけるな!って気持ち。

新規にインストールする機会がそう沢山あるのかどうかは置いといて感がすごい。

ArchLinuxのmirrorlistを自動で選択してもらう

Reflectorを使うだけ。

$ sudo pacman -S reflector
$ sudo reflector --verbose --country Japan -l 200 -p http --sort rate --save /etc/pacman.d/mirrorlist

日本にいないとか実は国外サーバのほうが早い地域なんだよねとかの事情があれば(?)country指定はやめよう。

-l 200で200個調べる感じになるけど、countryでJapan指定したあたりでもうftp.jaist.ac.jpとftp.tsukuba.wide.ad.jpしか残ってない状態なんだなぁ…

HENkakuリリースされたのでPSVitaでHello Worldする

もうhenkaku.xyz行ったらそれだけでぜーんぶ完了しちゃって一瞬にして終了しちゃうので、自分でビルドしてHello Worldしてみるか~というお話。

https://henkaku.xyz/developer/を参考に!

 

あんまり多くをインストールしてないArchLinuxで実験。

取り敢えず環境構築。

cmakeが必要らしいのでまずそれをインストールしてから。

$ sudo pacman -S cmake
$ git clone https://github.com/vitadev/vdpm
$ cd vdpm
$ ./bootstrap-vitasdk.sh

パーミッション周りでめちゃエラー出てたっぽい。

bootstrap-vitasdk.shの中を見ると、/usr/local/vitasdkを$USER:$USERにchownするコマンドがあったぽいけど、$USERなグループってあったか?usersじゃない?

というわけで手作業で実行しリベンジ

$ sudo chown tea:users /usr/local/vitasdk
$ ./bootstrap-vitasdk.sh
$ export VITASDK=/usr/local/vitasdk
$ export PATH=$VITASDK/bin:$PATH
$ ./install-all.sh

インストールできたっぽいのでサンプルソースをパクってきてビルドする

$ cd ~
$ git clone https://github.com/vitasdk/samples
$ cd samples/hello_world/src
$ arm-vita-eabi-gcc -c -o main.obj main.c
$ arm-vita-eabi-gcc -Wl,-q -o homebrew.elf main.obj
$ vita-elf-create homebrew.elf homebrew.velf
$ vita-make-fself homebrew.velf eboot.bin

出力されたeboot.binをvpkに放り込めよって書いてあったけど、既存のvpkにアーカイブマネージャで突っ込むのじゃ流石にダメだったので、vita-pack-vpkを使う

こちらでバイナリが拾えそうだったので使わせていただく。libzip.so.4がないよと怒られたのでlibzipのインストールも。

$ unzip vita-pack-vpk.zip
$ chmod +x ./vita-pack-vpk
$ ./vita-pack-vpk
./vita-pack-vpk: error while loading shared libraries: libzip.so.4: cannot open shared object file: No such file or directory
$ sudo pacman -S libzip
$ ./vita-pack-vpk
Usage:
/home/tea/vita-pack-vpk [OPTIONS] output.vpk
-s, --sfo=param.sfo    sets the param.sfo file
-b, --eboot=eboot.bin    sets the eboot.bin file
-a, --add src=dst    adds the file src to the vpk as dst
-h, --help    displays this help and exit
$ alias vita-pack-vpk=/home/tea/vita-pack-vpk
$ cd samples/hello_world
$ vita-pack-vpk -b ./src/eboot.bin out.vpk
.sfo file missing.

sfoファイルがないとダメらしい。それらしくつくってリベンジ。

$ vita-mksfoex -s TITLE_ID=XXXX00001 "hello world" param.sfo
$ vita-pack-vpk -s ./param.sfo -b ./src/eboot.bin out.vpk

エラー出なかったのでこれをFTP経由でVitaに放り込んで、あとは通常のvpkと同じようにインストール。

 

バブルできた

バブルできた

 

 

LiveAreaもできる

LiveAreaもできる

 

ちなみに、今回使ったソースコードは、

#include <psp2/kernel/processmgr.h>
#include <stdio.h>

int main(int argc, char *argv[]){
printf("Hello World!\n");
sceKernelExitProcess(0);
return 0;
]

みたいな感じ。(サンプルそのまんま)

標準出力にHello Worldしたそのすぐ後にはもう終わりそうな行があるし、次の行にはreturnなので、つまりPSVita側で実行したらおおよそ何も見えずに終了してしまうのであった。

forで10000回くらい回せば見れるでしょ~とか思ってやり直してみたんだけど、時間が長くなっただけで画面には何もうつらなかった。アプリケーション起動しても標準出力は見えないんかなぁ。

 

ちなみに、ばっちりMakefile用意して貰えてるので、vita-pack-vpkの導入さえ出来ていれば全自動でイケる。

UbuntuでSSDをSecureEraseする

RAID環境にArchLinuxのインストール

順番が前後したけど、これやる前に、SSDをSecureEraseしたんですよね。で、まぁSecureEraseってやる度にどうやるのかわかんなくて、ふわふわ調べてやってて、毎度困り果てながら最終的になんとか遂行するみたいな状態。

困るのはたいてい、

・SecureEraseするためのソフトウェアが起動しない

・Not frozenに出来ない

のところ。Parted Magicが起動しないとかHDDErase起動するためのDOS環境が作れないとか、クッソ面倒に生きてた。クッソ面倒なんで結論だけ。

 

Core i7 870 + ASRock P67 Transformer構成で、Ubuntu 14.04.3をUSBメモリから起動して、terminalからhdparmコマンドを使った。

 

hdparm -I /dev/sdaみたいな感じで状態を確認する。最後の方にある「not enabled」と「frozen」をそれぞれいじる。まずはfrozenを解除。

これはもういつものやつ。SATAケーブルなり電源ケーブルなりを抜き差しする。いつものやつっていうかこれ毎度毎度めちゃくちゃこえーんだよな。

あと# echo -n mem > /sys/power/stateでPCをスタンバイに入れて復帰っていう手もあるみたい。

もう一度hdparm -I /dev/sdaで見ると、うまく行ってれば「not frozen」になっているはず。

次にディスクにパスワードを設定する(SecureEraseを実行すると解除されるものなのでてきとうに決める)。ただしパスワード設定したまま再起動等するとディスクアクセス出来なくなる模様なので以下のように解除する。master passwordはList of hard disk ata master passwords – I SEE 0XDEAD DISKSあたりを参考に。

//パスワードの設定
# hdparm --user-master u --security-set-pass PASSWORD /dev/sda

//master passwordによるパスワードの解除
# hdparm --user-master m --security-unlock MASTER_PASSWORD /dev/sda
# hdparm --user-master m --security-disable MASTER_PASSWORD /dev/sda

うまく設定できると、hdparm -I /dev/sdaの出力が変化して「enabled」になる。

 

つまり、not enabledがenabledになっている事、frozenがnot frozenになっている事を確認した後、SecureEraseを実行する。

# hdparm --user-master u --security-erase PASSWORD /dev/sda

ちなみにhdparm -I /dev/sdaの出力にsupported: enhanced eraseがある場合、Enhanced SecureEraseが可能なので、–security-erase-enhancedみたいな感じに差し替えてみよう。

最終的にまたhdparm -I /dev/sdaの出力が「not enabled」に戻っていることを確認して作業完了。

RAID環境にArchLinuxのインストール

普通にArchLinuxをインストールしようと思うと、「真面目にパーティション切らなきゃなぁ…」「そのためにどういう構成にするのか検討しないと…」とか思うのでまぁ問題ないといえば問題ない。

しかし例えばAntergosを使う場合には、cnchiというグラフィカルで大変簡単なインストーラがついてくる。これだとウィザードに従ってぽいぽい進めていけば、それだけでインストールが完了してしまうとかいう状況。

ArchLinuxを使いたいけどInstallBattleは面倒だなという場合には、大変重宝するのだけど、細かいことを意識しないまま作業を進められてしまうので、困ることもある。

というわけで、今回はそういうお話。

 

ちなみに構成はCore i7 870 + ASRock P67 Transformerに16GBくらいRAM載せてGTX750Tiぶっさした感じ(元メインマシン)。ここにCrucial C300 64GBを2つのせて、マザーボードで
RAID組んでる。OSから見たらただの1つのストレージデバイスに見えていると思い込んでいた(OSよりも下のレイヤーとして独立していると思い込んでいた)のが失敗で、実際にはOSに「ここでこんな感じでアレイ組んでますよー」と教えてあげる必要があったみたい。

RAID環境にインストールする場合、mdadmに何か喋らせたりしないといけないみたいなんだけど、全然意識しないままインストール作業終わらせちゃって、インストールも出来てブートローダも起動するけどなんだか見つけてくれない状態。具体的にはこんな感じ。

starting version 230
ERROR: resume: hibernation device ‘UUID=xxxx’ not found
ERROR: device ‘UUID=xxxx’ not found. skipping fsck.
ERROR: Unable to find root device ‘UUID=xxxx’.
You are being dropped to a recovery shell
Type ‘exit’ to try and continue booting
sh: can’t access tty: job control turned off
[rootfs ]# _

はい、完全にストレージを見失っております。

 

必ずインストールのときにパーティション構成を理解しておく。サイズから予想することも出来なくもないけど。今回は、

/dev/md126p1→/boot
/dev/md126p2→/
/dev/md126p5→swap

という構成(RAMが16GBもあるしswap不要じゃない?というのはAntergosのcnchiに言ってくれ)。

さて、AntergosのLiveCDから起動(今回はUSBメモリ使ったけど別になんでもいい、とにかくArchLinuxのLive環境が起き上がればそれで十分)して作業する。

RAIDにArchLinuxをインストール – RAID – ArchWikiをパクるだけ。

まずストレージのマウントを済ませる。(まだarch-chrootしてはいけない)

# mount /dev/md126p2 /mnt
# mount /dev/md126p1 /mnt/boot

mdadm.confを更新する。その後一応もくろみ通りの状態になっているか確認する。

# mdadm --detail --scan >> /mnt/etc/mdadm.conf
# vi /mnt/etc/mdadm.conf

chrootしてmdadmフックをmkinitcpio.confに追加する

# arch-chroot /mnt
# vi /etc/mkinitcpio.conf
HOOKS="base udev autodetect modconf block mdadm_udev keyboard keymap resume filesystems fsck"
# mkinitcpio -p linux

ArchWikiのブートローダーの設定の項目はやらなくても起動しました。

 

あとどうでもいいけどママンにのっかってるNICが死んでて全然繋がらなくて2時間くらい悩んだ。以前ママンのNIC死んだからって追加でNIC放り込んでたのすっかり忘れてたぜ

指紋認証を使う

使っているノートPCであるVPCS14AFJ、ふとlsusbの結果を眺めていると、

Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 007: ID 0489:e00f Foxconn / Hon Hai Foxconn T77H114 BCM2070 [Single-Chip Bluetooth 2.1 + EDR Adapter]
Bus 001 Device 006: ID 8086:0186 Intel Corp. WiMAX Connection 2400m
Bus 001 Device 005: ID 054c:02e1 Sony Corp. FeliCa S330 [PaSoRi]
Bus 001 Device 004: ID 04f2:b1dc Chicony Electronics Co., Ltd
Bus 001 Device 003: ID 147e:1001 Upek TCS5B Fingerprint sensor
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Bluetoothはちらちら使うし、FeliCa S330もなんとなく使える。WiMAXは回線契約が無いので試しようもない。あと用途がさっとわかるもので使っていないのは、指紋認証のセンサーだ。

取り敢えず「Linux 147e:1001 Upek TCS5B Fingerprint」とかでぐぐると使用事例と共にarchwikiがヒット。

https://wiki.archlinuxjp.org/index.php/Fingerprint-gui

結局archwikiの内容をそのまま操作しただけで使えるようになった。取り敢えずsudoとlightdmで有効にしておけばかなり利便性は確保できるでしょう。

パスワードの入力と指紋の読み取りと、併用して使えるのが良い。手袋をしている、指が油まみれ(そもそもパソコン触るなよ)等の事情で指紋の読み取りが出来ないときに従来通りパスワードでも認証出来る。

また、CPU負荷はfingerprint-helperというプロセスが1%か2%程度食べるだけなので、非常に軽い。

ちなみに、読み取りに失敗するとか、登録されてない指を読み取らせるとかしても、通常のパスワード入力ミスの時とは違い、失敗したよタイムアウトはない。すぐさま読み取りにリベンジ出来る。

特に難しい事なく出来た。よかったよかった。

 

指紋認証リーダーって高いんだな。ノートPCにビルトインだったから気にしてなかったけど。