実はレンタルサーバ引っ越ししてました

raspberry piを弄るようになってから、少しだけlinuxが身近になった私。最初にraspberry piにインストールしたのはraspbianというDebian系のOS。
もっさり感はCPUの性能がアレだからと諦めていたのだが、Arch linuxは早いぞとグーグル様からご神託。
raspberry piはArch linux載せたのだが、使いたい mongodbがうまくコンパイルできない。いや、コンパイルは長時間かかって出来るのだが、mongoimportで全く原因不明のエラーが出る。
仕方がないので、Debian入れたり、Cent入れたり遊んでいた自作PCにArch linux入れてmongodb動かしたらあっさり動くじゃないか。でも、自作PCは速いグラフィックカード積んでるから24時間休みなしで稼働したら電気代がorz.

そこで、ふと広告が目に止まった。940円/月でroot権限付きのVPSレンタルサーバ。今まで契約していたレンタルサーバはroot権限ないから、Node.js入れたいと思ってもままならない。
でも、rootどころかOSも自由に入れられて、今のレンタルサーバよりちょっとランニングコストが安いとなれば、移動しない手はなかろう。
そこで、
さようならxserver。どうぞよろしく、お名前.com VPS(KVM)。xserverはメール設定変更しなきゃならない義父のアカウントを残して、全て引越し完了。
事の顛末はまた次回。

カテゴリー: VPS

Arch linux 一般ユーザの追加 ssh接続設定

操作はArch linuxマシンではなく、Macからターミナルで行う。

$ ssh root@192.168.0.10
The authenticity of host '192.168.0.10 (192.168.0.10)' can't be established.
RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.0.10' (RSA) to the list of known hosts.
root@192.168.0.10's password: 
Last login: Fri Aug 23 23:27:31 2013

この時点で接続できなかったら、
・Mac側の ~/.ssh/known_hostsを確認して接続したいIPアドレスの古いfinger printを削除
・Arch側ターミナルで

# ip addr
# systemctl status sshd

でIPアドレスとsshdがスタートされていることを確認すること。

いちいちIPアドレスを入力するのは面倒なので、公開鍵を登録し、パスワード無しでログインするため
以下の作業を行う。
公開鍵はmac_pro_rsa.pubとして作成済みとする。やり方が分からなかったらググりましょう。

Archに追加するユーザ名は hogehogeとする。

$ nano ~/.ssh/config

Host arch
HostName 192.168.0.10
Port 22
IdentityFile ~/.ssh/mac_pro_rsa
User hogehoge

IdentityFileは秘密鍵の場所を指定する。

$ ssh root@192.168.0.10
root@192.168.0.10's password: 
Last login: Fri Aug 23 23:29:37 2013 from 192.168.0.3
# useradd -m -g wheel hogehoge
# passwd hogehoge
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully

Archにログインしたら、一般ユーザとしてhogehogeを作製。
いずれsudoが実行できるようにwheelグループに入れておく。

公開鍵を転送する

$ scp ~/.ssh/mac_pro_rsa.pub hogehoge@192.168.0.10:/home/hogehoge
hogehoge@192.168.0.10's password: 
mac_pro_rsa.pub                               100%  404     0.4KB/s   00:00    
$ ssh hogehoge@192.168.0.10
hogehoge@192.168.0.10's password: 
$ ls
mac_pro_rsa.pub
$ mkdir .ssh
$ chmod 700 .ssh
$ cat mac_pro_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys

.sshディレクトリや中のファイルは適切にアクセス権を変更しておこう。

$ ssh arch
Last login: Fri Aug 23 23:39:06 2013 from 192.168.0.3

以上の作業が無事終了したら、Macのターミナルから ssh archとやるだけで、ログイン出来るようになる。

パスワードでのログインを無効にしておく

# vim /etc/ssh/sshd_config

PasswordAuthentication yes
#RSAAuthentication yes
#PubkeyAuthentication yes

PasswordAuthentication no
RSAAuthentication yes
PubkeyAuthentication yes

# systemctl restart sshd

hogehogeユーザが sudoを実行できるように

# visudo

# %wheel ALL=(ALL) ALL

%wheel ALL=(ALL) ALL
のようにコメントを外す。

UEFIシェルの起動

実はArch linuxに辿り着く前に、DebianとかCent OSとか色々試してみた私。良く解らないままにインストールCDの指示に沿ってインストールしていくと、Bootデバイスの選択画面にブートローダの残骸が…

GYGABITEのマザーボードを使っているのだが、ボードのBIOS設定画面にNVRAMの編集画面など見当たらない。

散々検索かけて、UEFIシェルを起動できればいいと分かった。

でも、灯台下暗し。UEFIシェルはArch linuxのインストールCDの起動時にメニューで選択できるようになっていたよ。ちなみに2013年7月のインストールCDです。

Shell>bcfg boot dump -v

で一覧。

Shell> bcfg boot rm 3

でブートオプション3のメニューを削除できた。すっきり。

自作PCにArch linuxをインストール

GPTパーティション、UEFIで起動させる
自作PCにArch linuxをインストール
GPTパーティション、UEFIで起動させる
#表示はrootでの操作、$はリモートPCから一般ユーザの操作。

PCにインストールCD入れて CDから起動するが、
ブートメニューではUEFI モードのCD Driveから起動

シェルが出てきたら

# passwd

でrootのパスワード入力

# ip addr

でPCのプライベートIPアドレスが取得されていることを確認

# systemctl start sshd

以上がインストール先のPC上での作業。後はメインのPC (ここではMac)のターミナルから作業開始

$ ssh root@[先ほどのプライベートIPアドレス]
# ls -l /sys/firmware/efi
total 0
drwxr-xr-x  2 root root    0 Aug 23 08:27 efivars/
-r--------  1 root root 4096 Aug 23 08:32 systab
drwxr-xr-x 99 root root    0 Aug 23 08:32 vars/

のように何か表示されたらEFIモードで起動している。

# lsblk
NAME              MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda                 8:0    0 139.8G  0 disk 
├─sda1              8:1    0   100M  0 part 
├─sda2              8:2    0   128M  0 part 
└─sda3              8:3    0 139.5G  0 part 
sdb                 8:16   0   2.7T  0 disk 
├─sdb1              8:17   0   128M  0 part 
└─sdb2              8:18   0   2.7T  0 part 
sdc                 8:32   0 279.5G  0 disk 
├─sdc1              8:33   0   512M  0 part 
└─sdc2              8:34   0   279G  0 part 
sr0                11:0    1 522.3M  0 rom  /run/archiso/bootmnt
loop0               7:0    0 226.4M  1 loop /run/archiso/sfs/root-image
loop1               7:1    0   1.5G  1 loop 
└─arch_root-image 254:0    0   1.5G  0 dm   /
loop2               7:2    0   1.5G  0 loop 
└─arch_root-image 254:0    0   1.5G  0 dm   /

この様に階層表示で接続されているHDDなどが表示されるので、インストール先のHDDの
デバイス表示を確認。

# cgdisk /dev/sdc

cgdiskパーティションを作成するが、
/dev/sdc1 boot linux partition
/dev/sdc2 efi FAT32でフォーマットし EFI boot partitionとする
/dev/sdc3 / linux partition

一番上のfree スペースはMBR領域であるが、EFIブートなのでfreeのままにしておく。
efi boot partitionはタイプをef02にすると EFI partitionになる。

# mkfs.vfat -F32 /dev/sdc2 
# mkfs.ext4 /dev/sdc1 && mkfs.ext4 /dev/sdc3
# mount /dev/sdc3 /mnt
# mkdir /mnt/boot
# mount /dev/sdc1 /mnt/boot
# mkdir /mnt/boot/efi
# mount /dev/sdc2 /mnt/boot/efi
# nano /etc/pacman.d/mirrorlist

control+w でJapanを検索。 行頭の数字を 0,1に変更して日本のダウンロードサイトを優先させる。

# pacstrap -i /mnt base vim openssh grub efibootmgr os-prober
# genfstab -U -p /mnt >> /mnt/etc/fstab
# arch-chroot /mnt /bin/bash
# vim /etc/locale.gen

en_US.UTF-8とJa_JP.UTF-8の行頭をアンコメントする。

# locale-gen
Generating locales...
  en_US.UTF-8... done
  ja_JP.UTF-8... done15
Generation complete.
# echo LANG=en_US.UTF-8 > /etc/locale.conf
# echo KEYMAP=jp106 > /etc/vconsole.conf
# ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# hwclock --systohc --utc
# echo Arch >  /etc/hostname

sshdの起動をセットしたらmkinitcpio,パスワードの設定してブートローダのインストール。

# systemctl enable sshd.service
# mkinitcpio -p linux
# passwd 
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
#grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch_grub --recheck
# grub-mkconfig -o /boot/grub/grub.cfg

ネットワークの設定はbeginnersに長々と書いてあるが、NetworkManager一発でOKっぽい。
NetworkManagerの日本語版wikiをみると
最後にNIC (Network Interface Controllers, ネットワークカード) を落として下さい。
と書いてあるが、この通りにやるとMacからのターミナル接続が切れてしまうので不要。
英語版にはこの記載なし。

# pacman -S NetworkManager
# systemctl enable NetworkManager.service
# exit

その後chrootを抜ける。

# umount /mnt/boot/efi
# umount /mnt/{boot,}
# shutdown -h now

アンマウントしてから、シャットダウン。rebootでも良い。CDは取り出すこと。

ShiftJIS エンコーディングのCSVファイルをnode.jsで読み込みしたい

 やりたいことはNode.jsと連携させるつもりのMongoDBにShiftJISエンコーディングのCSVファイルのデータを突っ込むこと。
MongoDBはファイルのタイプに関するオプション JSONとかCSVとか は存在するがencoding指定はないのでおそらくutf-8前提と思われる。
Node.jsからエンコーディング指定してファイルを読み込み、MongoDBのデータベースに書き込む設計とする。
node-csv-parserで郵便番号処理というページがヒット。
郵便番号辞書はShift_JISで公開されているので、ファイルエンコーディングは同じ。

npm install csv
npm install iconv