【メモ】 Ubuntu 16.04 に nheqminer をインストールして zcash を掘る #仮想通貨 #GPU

前回の CUDA インストールに続き nheqminer のインストールして zcash を掘ります。
基本的に公式ドキュメントの手順でうまく行きますが細かいところがコピペでは完結しなかった気がします。

$ git clone https://github.com/nicehash/nheqminer.git

$ export CUDA_CUDART_LIBRARY="/usr/local/cuda/lib64/libcudart.so"

$ cd nheqminer/cpu_xenoncat/asm_linux 

$ chmod 774 ./fasm

$ sh assemble.sh

$ cd ../../../

$ mkdir build && cd build

$ cmake -DCUDA_CUDART_LIBRARY=CUDA_CUDART_LIBRARY ../nheqminer/

$ make -j $(nproc)

ここまでエラー無く完走すればビルドは完了。
後は自分の環境にあわせてオプションを与えて実行してあげればよい。

$ ./nheqminer -h

        ==================== www.nicehash.com ====================
                Equihash CPU&GPU Miner for NiceHash v0.5c
        Thanks to Zcash developers for providing base of the code.
            Special thanks to tromp, xenoncat and djeZo for providing 
              optimized CPU and CUDA equihash solvers.
        ==================== www.nicehash.com ====================

Parameters: 
        -h              Print this help and quit
        -l [location]   Stratum server:port
        -u [username]   Username (bitcoinaddress)
        -a [port]       Local API port (default: 0 = do not bind)
        -d [level]      Debug print level (0 = print all, 5 = fatal only, default: 2)
        -b [hashes]     Run in benchmark mode (default: 200 iterations)

CPU settings
        -t [num_thrds]  Number of CPU threads
        -e [ext]        Force CPU ext (0 = SSE2, 1 = AVX, 2 = AVX2)

NVIDIA CUDA settings
        -ci             CUDA info
        -cv [ver]       Set CUDA solver (0 = djeZo, 1 = tromp)
        -cd [devices]   Enable CUDA mining on spec. devices
        -cb [blocks]    Number of blocks
        -ct [tpb]       Number of threads per block
Example: -cd 0 2 -cb 12 16 -ct 64 128

自分の場合は bitcoin でも有名な slushpool でプールマイニングをしているので

    -l でプールを指定
    -u でプールの ID と worker 名
    -t で CPU のスレッド数
    -cd でビデオカード(NVIDIA)の 0 番 ※ -od

を指定して実行した。

$ ./nheqminer -l zec.slushpool.com:4444 -u [USERID].worker1 -t 4 -cd 0

        ==================== www.nicehash.com ====================
                Equihash CPU&GPU Miner for NiceHash v0.5c
        Thanks to Zcash developers for providing base of the code.
            Special thanks to tromp, xenoncat and djeZo for providing 
              optimized CPU and CUDA equihash solvers.
        ==================== www.nicehash.com ====================

Setting log level to 2
[16:13:02][0x00007f11dc23f740] Using SSE2: YES
[16:13:02][0x00007f11dc23f740] Using AVX: YES
[16:13:02][0x00007f11dc23f740] Using AVX2: NO
[16:13:03][0x00007f11d3970700] stratum | Starting miner
[16:13:03][0x00007f11d3970700] stratum | Connecting to stratum server zec.slushpool.com:4444
[16:13:03][0x00007f11d116b700] miner#4 | Starting thread #4 (CUDA-DJEZO) GeForce GTX 1060 3GB (#0) M=1
[16:13:03][0x00007f11d296e700] miner#1 | Starting thread #1 (CPU-XENONCAT-AVX) 
[16:13:03][0x00007f11d316f700] miner#0 | Starting thread #0 (CPU-XENONCAT-AVX) 
[16:13:03][0x00007f11d196c700] miner#3 | Starting thread #3 (CPU-XENONCAT-AVX) 
[16:13:03][0x00007f11d216d700] miner#2 | Starting thread #2 (CPU-XENONCAT-AVX) 
[16:13:03][0x00007f11d3970700] stratum | Connected!
[16:13:03][0x00007f11d3970700] stratum | Subscribed to stratum server
[16:13:03][0x00007f11d3970700] miner | Extranonce is ******
[16:13:03][0x00007f11d3970700] stratum | Target set to ******
[16:13:03][0x00007f11d3970700] stratum | Received new job #******
[16:13:03][0x00007f11d3970700] stratum | Authorized worker *******.worker1
[16:13:13][0x00007f11dc23f740] Speed [15 sec]: 115.362 I/s, 215.719 Sols/s

mdraid(RAID1)のディスク交換をしてみたメモ

自宅サーバで使用しているHP MicroServerはオンボードのRAIDがFakeRAIDでLinux用のドライバもないし(多分)使う価値がないので、
mdraidを使っていたのですが今までディスク交換のオペレーションを行ったことがありませんでした。

そしてとある日 Seagate ST2000DX001(SSD Hybrid Drive)を購入したので酒を呑みながら自宅サーバのディスク交換をしていたら、
血中アルコールの影響で頭の中がこんがらがってしまって最終的にはレスキューディスクでシステムをぶっ壊してしまったので
戒め書としてこのPOSTを余生に残しておく。

以下の状態からブロックデバイスsdcを追加してsdbを切り離すオペレーションを実施しました。
効率の良い方法を知っている方ツッコミ歓迎です。教えてください。

ディスクの構成

/dev/sda (md0 raid1 active)
+- /dev/sda1 (Extended Volume)
+- /dev/sda2 (Linux RAID Volume)
+- /dev/sda5 (Linux SWAP Volume)

/dev/sdb (md0 raid1 active)
+- /dev/sdb1 (Extended Volume)
+- /dev/sdb2 (Linux RAID Volume)
+- /dev/sdb5 (Linux SWAP Volume)

/dev/sdc (md0 standby)
+- Blank

fdiskでsdcのパーテーションを切る

交換前のディスクと同じ感じにパーテーションを切る

# fdisk /dev/sdc

(snip)

The device presents a logical sector size that is smaller than
the physical sector size. Aligning to a physical sector (or optimal
I/O) size boundary is recommended, or performance may be impacted.

コマンド (m でヘルプ): p

Disk /dev/sdc: 2000.4 GB, 2000398934016 bytes
ヘッド 255, セクタ 63, シリンダ 243201, 合計 3907029168 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
セクタサイズ (論理 / 物理): 512 バイト / 4096 バイト
I/O サイズ (最小 / 推奨): 4096 バイト / 4096 バイト
ディスク識別子: 0xcd6994eb

デバイス ブート 始点 終点 ブロック Id システム
/dev/sdc1 3899213824 3907028991 3907584 5 拡張領域
/dev/sdc2 2048 3899213823 1949605888 fd Linux raid 自動検出
/dev/sdc5 3899215872 3907028991 3906560 82 Linux スワップ / Solaris

パーティションテーブル項目がディスクの順序と一致しません

 

md0(RAID1)のアレイにデバイスを追加する

# mdadm –manage /dev/md0 –add /dev/sdc2
mdadm: added /dev/sdc2

スタンバイ中のデバイスにデータをSync(rebuild)

# mdadm –manage /dev/md0 –raid-devices=3

Syncが終わったか確認

# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdc2[2] sdb2[1] sda2[0]
1949474624 blocks super 1.2 [3/3] [UUU]

unused devices: <none>

新しいDiskにgrubをインストール

# grub-install /dev/sdc
Installation finished. No error reported.

sdb2をfailにする

# mdadm –manage /dev/md0 –fail /dev/sdb2
mdadm: set /dev/sdb2 faulty in /dev/md0

# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdc2[2] sdb2[1](F) sda2[0]
1949474624 blocks super 1.2 [3/2] [U_U]

unused devices: <none>

sdb2をアレイから外す

# mdadm –manage /dev/md0 –remove /dev/sdb2
mdadm: hot removed /dev/sdb2 from /dev/md0

# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdc2[2] sda2[0]
1949474624 blocks super 1.2 [3/2] [U_U]

unused devices: <none>

SWAP領域を作る(fdiskでパーテション切られているのを前提)

# mkswap /dev/sdc5
スワップ空間バージョン1を設定します、サイズ = 3906556 KiB
ラベルはありません, UUID=46784dd2-6ca5-44f5-b18f-157ee2197182

fstabを確認

必要に応じて書き換えを行う

 # vi /etc/fstab

# /etc/fstab: static file system information.
#
# Use ‘blkid’ to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc nodev,noexec,nosuid 0 0
# / was on /dev/md0 during installation
UUID=d54325b4-7b02-45d5-93f7-a8a049a50830 / ext4 errors=remount-ro 0 1
# swap was on /dev/sda5 during installation
UUID=4a3e84f9-5f51-4856-8306-08391cdc23bf none swap sw 0 0
# swap was on /dev/sdb5 during installation
UUID=46784dd2-6ca5-44f5-b18f-157ee2197182 none swap sw 0 0 <===今回の場合はsdb5のUUIDをsdc5のものに書き換える

swapon する

# free -m ; swapon -a ; free -m
total used free shared buffers cached
Mem: 7860 5466 2393 0 572 3704
-/+ buffers/cache: 1189 6670
Swap: 7629 0 7629
total used free shared buffers cached
Mem: 7860 5473 2386 0 572 3704
-/+ buffers/cache: 1195 6664
Swap: 11444 0 11444

古いディスクを外す

Hotswapじゃないけど気合で外す。
(SATAのコネクタはホットスワップ前提で作られているから電気的には大丈夫なはず。)

 

以上でひと通りの作業が完了のはずです。

今回の教訓 酒を呑みながらのオペレーションはやめよう。

 

BIND9 からの卒業 – PowerDNS 3.0 編

BIND9  の脆弱性の対応に疲れた今日この頃、
なぜ BINDを使っているのか自問自答して欝になりかけた日もある(嘘)

そんなこんなで、 BIND9 との決別を決めた。

次の相棒は今 最もホットでナウい PowerDNSNSD4 (beta)
この Post では PowerDNS にフォーカスする。

0. 検証環境

CPU : Intel(R) Xeon(R) CPU E5-2670 0 @ 2.60GHz stepping 07

Memory : DDR3 1333 NonReg ECC 16GB

HDD : 146GB 15000rpm SAS RAID 1

OS : Ubuntu 12.04.2

DNS : PowerDNS 3.0

DB : MySQL 5.5.29

 

1. 構築手順(メモ程度) 

  • MySQL と PowerDNS のパッケージインストール

# apt-get install pdns-server pdns-backend-mysql mysql-server mysql-client

  • MySQL にログインしてデータベースとテーブルを作る

# mysql -u root -p

mysql> create database pdns;

Query OK, 1 row affected (0.00 sec)
Create MySQL User

mysql> GRANT ALL ON pdnstest.* TO ‘pdns’@’localhost’ IDENTIFIED BY ‘hogehogepasswd’;

mysql> FLUSH PRIVILEGES;
Change Database

mysql> use pdns;
Database changed
Create Tables

mysql> create table domains (
id INT auto_increment,
name VARCHAR(255) NOT NULL,
master VARCHAR(128) DEFAULT NULL,
last_check INT DEFAULT NULL,
type VARCHAR(6) NOT NULL,
notified_serial INT DEFAULT NULL,
account VARCHAR(40) DEFAULT NULL,
primary key (id)
) Engine=InnoDB;

CREATE UNIQUE INDEX name_index ON domains(name);

CREATE TABLE records (
id INT auto_increment,
domain_id INT DEFAULT NULL,
name VARCHAR(255) DEFAULT NULL,
type VARCHAR(10) DEFAULT NULL,
content VARCHAR(64000) DEFAULT NULL,
ttl INT DEFAULT NULL,
prio INT DEFAULT NULL,
change_date INT DEFAULT NULL,
primary key(id)
) Engine=InnoDB;

CREATE INDEX rec_name_index ON records(name);
CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);

create table supermasters (
ip VARCHAR(25) NOT NULL,
nameserver VARCHAR(255) NOT NULL,
account VARCHAR(40) DEFAULT NULL
) Engine=InnoDB;

mysql> quit;

  • コンフィグを編集

ここでは Masterでの動作を念頭において設定している。

# vi /etc/powerdns/pdns.conf

allow-axfr-ips=10.200.8.0/24  # <- AXFRできるネットワーク or IPアドレス
config-dir=/etc/powerdns
daemon=yes
default-soa-name=ns0.mykw.jp  # <- SOAレコードに書くDNSのホスト名
disable-axfr=no
disable-tcp=no
local-port=53
log-dns-details=yes
log-failed-updates=yes
logfile=/var/log/pdns.log
logging-facility=0
loglevel=4
master=yes
module-dir=/usr/lib/powerdns
negquery-cache-ttl=60
setgid=pdns
setuid=pdns
use-logfile=yes
version-string=powerdns
include=/etc/powerdns/pdns.d 

DB接続情報は別ファイルに分けて書く

# vi /etc/powerdns/pdns.d/pdns.local.gmysql
# MySQL Configuration
#
# Launch gmysql backend

launch=gmysql
gmysql-socket=/var/run/mysqld/mysqld.sock  # <-ローカルの DB 使うなら Socket 使った方が
gmysql-user=pdns
gmysql-password=hogehogepasswd
gmysql-dbname=pdns

これで一通り使う準備は完了。

 

2. 既存のゾーンファイルを SQL に変換

PowerDNS には zone2sql という便利な SQL 変換スクリプトが標準で用意されている。

BIND で使っていたゾーンファイルを以下の手順で変換・DBへの投入を行う。
素直に変換できないことが多いので、named.conf 調整しながら変換しよう。

  • ゾーンファイルを変換

# zone2sql –gmysql –dnssec=no –named-conf=/etc/bind/named.conf –start-id=1 > zone.sql

  • 変換したレコードをDBにぶち込む

# mysql -updns -phogehogepasswd pdns < zone.sql

  • 変換したゾーンに MASTER のフラグを立てる

これをしないと AUTOSERIAL が有効にならない。

# mysql -u pdns -phogehogepasswd -e “update pdns.domains set type=’MASTER’;”

詳しい説明については公式サイトの Wiki にお任せしよう。

http://wiki.powerdns.com/trac/wiki/Zone2SQLFAQ

 

これでお引越しは完了したはずだ。

 

3. 動作確認

適当に dig とかして動作確認をしてみよう。

ちゃんと回答が帰ってくれば動いているはずだ。

# dig @10.200.4.230 mykw.jp soa

ついでに dnsperf でベンチマーク

32110 行のクエリリストを食わせて 4thread でいじめてみた

  • PowerDNS
# dnsperf -c 4 -s 10.200.4.230 -d querylist -l 300
DNS Performance Testing Tool
Nominum Version 2.0.0.0

[Status] Command line: dnsperf -c 4 -s 10.200.4.230 -d querylist -l 300
[Status] Sending queries (to 10.200.4.230)
[Status] Started at: Fri Mar 15 18:01:29 2013
[Status] Stopping after 300.000000 seconds
n[Status] Testing complete (time limit)

Statistics:

  Queries sent:         33040355
  Queries completed:    33040355 (100.00%)
  Queries lost:         0 (0.00%)

  Response codes:       NOERROR 32976558 (99.81%), NXDOMAIN 63797 (0.19%)
  Average packet size:  request 36, response 52
  Run time (s):         300.000634
  Queries per second:   110134.283916

  Average Latency (s):  0.000890 (min 0.000144, max 0.431226)
  Latency StdDev (s):   0.001421

ちなみにBINDは以下のような結果になった。

  • BIND 9.8.1-P1

# dnsperf -c 4 -s 10.200.4.230 -d querylist -l 300
DNS Performance Testing Tool
Nominum Version 2.0.0.0

[Status] Command line: dnsperf -c 4 -s 10.200.4.230 -d querylist -l 300
[Status] Sending queries (to 10.200.4.230)
[Status] Started at: Sun Mar 31 00:28:16 2013
[Status] Stopping after 300.000000 seconds

[Status] Testing complete (time limit)

Statistics:

Queries sent: 58084969
Queries completed: 58084969 (100.00%)
Queries lost: 0 (0.00%)

Response codes: NOERROR 57898647 (99.68%), NXDOMAIN 112154 (0.19%), REFUSED 74168 (0.13%)
Average packet size: request 36, response 225
Run time (s): 300.003788
Queries per second: 193614.118632

Average Latency (s): 0.000313 (min 0.000227, max 0.060098)
Latency StdDev (s): 0.000382

 

 

4. まとめ

前項の結果でも分かるように BIND9 は意外に早かった。

とはいえ、今年も夏のアップデート祭り(予定)に参戦するのはイヤということで
しばらく自宅環境はPowerDNSで頑張ってみることにした。

ちなみに今回使ったマシンの前にはRAIDキャッシュなしのマシンで検証していたのだが、
スコアは半分ぐらいであまりふるわない成績だった。
SQL を使っているので Disk I/O に引っ張られる印象があるが、
update が多いようなアプリケーションではないので DISKが遅いマシンでも
querycache をたんまり盛ってあげればそこそこ捌いてくれそうな気がする。

SSDとかNANDフラッシュ系の高級ストレージって楽するという選択もありですかね。
空から iodrive か intel SSD 910 降ってこないかな。

Ubuntu 12.04 Desktop でEMOBILE GL04PをUSB接続してみた

昨今、S●ftbankやKD●Iなどの携帯電話キャリアがWifiのアクセスポイントをバラまいて、
有線回線へのオフロードを謀っておりますが、その影響でWifiのチャンネルが埋まってしまい、
いざというときにPocketWifiが使えないといったことが多くなってきた気がします。

※そもそもモバイルルータを持ち歩く人が多くなったせいもあるか。

WindowsもMacも使っていない私はUSBのドライバが用意されていないと思い込みで
数か月間EMOBILE GL04Pを使って来ましたが、勉強会・セミナーで不便を強いられることが
多くなってきたので、仕事をサボ(ry 快適環境を追い求めてみました。

手順は以下の通り。

1.ドライバのダウンロード

これが一番探すのに苦労した。

HUAWEIのサイトからLinux用ドライバを入手

http://www.huaweidevice.com/worldwide/downloadCenter.do?method=toDownloadFile&flay=software&softid=NDcwMzU=

 

2.ドライバの展開

なぜかZIPを展開するとtar.gzが出てくるのでさらに展開

$ unzip HUAWEI\ Data\ Cards\ Linux\ Driver.zip

$ tar xf Linux\ Driver\ 4.19.19.00.tar.gz

 

3.ドライバのインストール

インストーラがついているので、実行するとmakeが始まる

$ cd driver/

$ sudo ./install

4.再起動

再起動してGL04Pを接続するとNetworkManagerで認識しているはずだ。

あまりに簡単すぎてあれだが、ドライバを探すのに時間を費やしたので記録に残しておく。

Ubuntu12.04 DesktopでSynergyを自動起動で使いたい(メモ)

Linux版Synergyの導入手順メモ(For Ubuntu12.04)

http://sourceforge.net/projects/synergy2/

1. synergyをインストール

# apt-get install synergy

2. configを作る(ml115:server op740:client)

# vi /etc/synergy.conf
section: screens
ml115:
op740:
end

section: links
ml115:
left = op740
op740:
right = ml115
end

3. lightdm起動時に一緒に起動させる

# vi /etc/lightdm/lightdm.conf

[SeatDefaults]
user-session=ubuntu
greeter-session=unity-greeter
#greeter-setup-script=/usr/bin/synergyc 192.168.2.80 ←クライアントとして使うとき(サーバのIP)
greeter-setup-script=/usr/bin/synergys -c /etc/synergy.conf  ←サーバとして使うとき

 

ユーザ権限で virt-manager がが

デスクトップOSとしてUbuntuを使うとサーバとの連携がいろいろと楽でいいのですが、
まれにその連携がうまくいかないことがあります。

今回はユーザ権限で起動したvirt-managerでlibvirtdに接続ができなかったので
対応した内容をメモ書きで残しておきます。

0. 環境

OS:Ubuntu 12.10 Desktop

1. エラー内容

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

Verify that:
– The ‘libvirt-bin’ package is installed
– The ‘libvirtd’ daemon has been started
– You are member of the ‘libvirtd’ group

Libvirt URI is: qemu:///system

Traceback (most recent call last):
File “/usr/share/virt-manager/virtManager/connection.py”, line 1027, in _open_thread
self.vmm = self._try_open()
File “/usr/share/virt-manager/virtManager/connection.py”, line 1009, in _try_open
flags)
File “/usr/lib/python2.7/dist-packages/libvirt.py”, line 102, in openAuth
if ret is None:raise libvirtError(‘virConnectOpenAuth() failed’)
libvirtError: ソケットの ‘/var/run/libvirt/libvirt-sock’ への接続に失敗しました: 許可がありません

 

2. 対応内容

[email protected]:~# vi /etc/libvirt/libvirtd.conf

[email protected]:/etc/libvirt# diff libvirt.conf.def libvirtd.conf
88c88
< unix_sock_ro_perms = “0770”

> unix_sock_ro_perms = “0777”
98c98
< unix_sock_rw_perms = “0770”

> unix_sock_rw_perms = “0777”
101c101
< #unix_sock_dir = “/var/run/libvirt”

> unix_sock_dir = “/var/run/libvirt”

[email protected]:~# service libvirt-bin stop
libvirt-bin stop/waiting
[email protected]:~#
[email protected]:~# service libvirt-bin start
libvirt-bin start/running, process 4368
[email protected]:~#

 

デフォルトではソケットファイルが作られないので、
ソケットファイルを生成しつつotherに権限を与えてあげれば良いかと。

ただ、otherに権限与えるのがあまり好ましくない環境ではおすすめしません。
よくよく考えるとlibvirtdグループに実行ユーザ加えてあげればいいような・・・

Ubuntu 12.04 LTS で zfs その1

自宅で使っているHP Proliant MicroServerが一台余ったので、(二台ある)
zfs使ってNASにすることにしました。

構成はこんな感じ。

  • Server : HP Proliant MicroServer (N36L)
  • OS : Ubuntu 12.04 LTS
  • System Disk (ext4) : CFD CSSD-SM64NJ2
  • Storage Disk (zfs)  : WesternDigital WD30EZRX *2

今回はrootからzfsにするnativeな構成ではなく、
OSを余り物のSSDに入れてハードディスクはストレージ用の
パーテーションとして別途分ける感じの構成にしてみた。

手順は至って簡単。ゆとり世代の私でも問題ない。

1. python-software-propertiesをインストール

[email protected]:~# apt-get install python-software-properties

2. リポジトリを追加

[email protected]:~# add-apt-repository ppa:zfs-native/stable

3. aptリストの更新

[email protected]:~# apt-get update

4. zfsのモジュールをインストール

apt-get install ubuntu-zfs

これで準備は完了。
以下のコマンドで応答があればインストールは終わっているはずだ。

[email protected]:~# zfs
[email protected]:~# zpool status

ほらね?僕達ゆとり世代にもやさしい。

続いて zpool にディスクを追加してみよう。

(その2へつづく)

resolvconfd と dnsmasq と libvirt と unbound と私

※忘れそうなのでメモです。

私が会社で使っている作業用サーバはUbuntuのKVM上で動いているFreeBSDです。(ホストのUbuntuも使ってるけど)
気が向いたときにホストのapt-get update/upgradeをするのですが、たまにKernelのアップデートがくると
再起動をしなくてはいけないので、仕方なく再起動をしています。

この時点で resolv.conf を手書きで書き換えていたりすると、楽しいことが起こったりします。

Ubuntu12.04では resolv.conf  の管理を resolvconfd で行っていて、デフォルトではローカルで起動している
リゾルバ(dnsmasq) を参照するように、起動のたびに 127.0.0.1 を参照するように resolv.conf を書き換えてくれるという仕様になっています。

とても親切ですね。

私が仕事で使っている環境は同ホストで unbound を起動してキャッシュリゾルバとしても使用しているので、
dnsmasq が起動されると bind しているアドレス・ポートがかぶって unbound が起動しなかったりで
一筋縄には行かないのです。(dnsmasqの存在を意識していなかった)

ということで、「dnsmasq が邪魔なら dnsmasq を起動しなければ良い!」 という安直な考えに至り、dnsmasq を stop

[email protected]:/# /etc/init.d/dnsmasq stop
* Stopping DNS forwarder and DHCP server dnsmasq
…done.
[email protected]:/#

これで、安心だろ。
と、おもって KVM の FreeBSD (ゲスト)にログインするとネットワークがつながらない・・・
libvirt で仮想マシンを管理しているので、dnsmasq を切ってしまうとどうやら外に出られなくなるみたいだ(詳しくは調べてません)

「そうしたら  dnsmasq と unbound を共存させればいいんだろ?」という安直な考えに至り、 conf を編集

[email protected]:/# vi /etc/unbound/unbound.conf

server:
interface: 192.168.10.70

(略)

 

[email protected]:/# vi /etc/dnsmasq.conf

listen-address=127.0.0.1
bind-interfaces

これでデーモンを再起動すれば dnsmasq/unbound が共存できます。

ちなみに、前置きが長くなりましたが、ここからが本編です。
resolvconfd の挙動が良く分からなかったので今回はじっくり観察してみました。

Googleなんかで “ubuntu 12.04 resolv.conf” などと検索すると、
大抵のBlog記事は /etc/resolvconf/resolv.conf.d/ 以下のファイルを編集しろと書かれています。

[email protected]:/etc/resolvconf/resolv.conf.d# ls
base  head  original

ここで引っかかりました。
いくら編集して、resolvconfd/networking/server再起動しても  resolv.conf が思ったように書き換わらないので、
Ubuntuのマニュアルをよく読んでみた。

http://manpages.ubuntu.com/manpages/precise/man8/resolvconf.8.html

/etc/network/interfaces を編集すればよいことが判明。(ちゃんと書いてあるじゃん)
オフィシャルなマニュアルをちゃんと読まないと遠回りしてしまうんですね。

ということで  /etc/network/interfaces を以下のようにしてみた

auto br0
iface br0 inet static
address 192.168.10.70
network 192.168.0.0
netmask 255.255.0.0
broadcast 192.168.255.255
gateway 192.168.0.1
dns-nameservers 192.168.10.70 192.168.0.20 8.8.8.8
dns-domain hoge.com
dns-search fuga.net foo.com
bridge_ports eth0
bridge_stp off

iface eth0 inet manual

どうやら “dns-*” な行を読み取って resolv.conf を読みよってくれるようなので、
これでネットワークをリスタートして resolv.conf を見てみましょう。

[email protected]:/# cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND — YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.0.1
search choge.com fuga.net foo.com
[email protected]:/#

nameserver が 127.0.0.1 になっていますが、心配ありません。
dnsmasq がロードしている conf を参照すると以下のようになっています。

[email protected]:/# cat /var/run/dnsmasq/resolv.conf
nameserver 192.168.10.70
nameserver 192.168.0.20
nameserver 8.8.8.8

コレに気づかず30分ぐらい時間を無駄にしました。

ちなみに、 dnsmasq や unbound などのデーモンが起動していない(起動しない)環境では /etc/resolv.conf の
nameserver  は 127.0.0.1 ではなく、 /etc/networl/interfaces に書かれている dns-nameservers の値が明示的に入るようです。

親切というか、なんと言うか、今までの掟的なものが頭から離れないとハマること間違いなしですね。

IPv6 環境で ufw を使ってみた

我が家の回線は KDDI の au ひかりなんですが、
auひかりといえばネイティブな IPv6 環境を提供してくれるナウい回線なわけで、いろいろ遊べるんですね。
それで、今日は我が家で運用しているサーバに載っているWordpress に対してロシアからアタックを食らっていたので、
そろそろファイウォールの導入でもしようかと考え、思い立ったら吉日でさっそく ufw を使ってみました。

ufw についての詳細は割愛しますが、Ubuntu に採用されている簡易的なファイアウォールで、
ベースは iptables なのですが、簡単に使えるようにした wrapper 的なプログラムといったところです。

以下のオプションで簡単に設定ができてしまいます。
ゆとり世代の私には大変ありがたい。

wktk# ufw –help

Usage: ufw COMMAND

Commands:
enable                          enables the firewall
disable                         disables the firewall
default ARG                     set default policy
logging LEVEL                   set logging to LEVEL
allow ARGS                      add allow rule
deny ARGS                       add deny rule
reject ARGS                     add reject rule
limit ARGS                      add limit rule
delete RULE|NUM                 delete RULE
insert NUM RULE                 insert RULE at NUM
reset                           reset firewall
status                          show firewall status
status numbered                 show firewall status as numbered list of RULES
status verbose                  show verbose firewall status
show ARG                        show firewall report
version                         display version information

Application profile commands:
app list                        list application profiles
app info PROFILE                show information on PROFILE
app update PROFILE              update PROFILE
app default ARG                 set default application policy

たとえば、192.167.79.29というロシアのIPからの接続をすべて拒否したいときは

wktk# ufw deny from 192.167.79.29

といった感じでルールを追加できます。
ここについても詳しく述べられているサイトがほかにありますので割愛します。

wktk# ufw status
Status: active

To                         Action      From
—                         ——      —-
Anywhere                   ALLOW       Anywhere
Anywhere                   DENY        192.167.79.29

で、ここからが本題です。

この ufw ですが、ルールを入れた後に enable したら、自宅ネットワーク内からサーバへの疎通が一切取れなくなってしまいました。
なぜかグーグル先生に聞いてみたところ、どうやら答えは /etc/default/ufw というファイルにあるようでした。

wktk# vi /etc/default/ufw

# /etc/default/ufw
#

# Set to yes to apply rules to support IPv6 (no means only IPv6 on loopback
# accepted). You will need to ‘disable’ and then ‘enable’ the firewall for
# the changes to take affect.
IPV6=no

ん?OS入れるとき v6 有効にしたままなのに、IPV6=no って・・・

IPV6=no を yes にしてあげたら無事に自宅内のLANからでも v6 でつなげるようになりましたとさ。

前置きが長かったですが、ご了承ください。

 

参考資料

Ubuntu Forums [ubuntu] ufw and ipv6  :http://ubuntuforums.org/showthread.php?t=1214543

 

Ubuntu でシリアルコンソール

初めての障害対応でシリアルコンソールを使う機会があったのですが、
実機につないで操作する環境が整っていなくてあたふたしてしまったのでメモ。

以下の環境を用意して練習してみました。

たぶんUpstart、GRUB2のUbuntu環境では共通だと思います。

0. 実験環境

Server
OS: Ubuntu Server 11.10
HW:HP ProLiant ML115 G5

Client
OS: Ubuntu Desktop 12.04 LTS Beta2
HW:Lenovo ThinkPad X220

1. サーバ側の準備

大体どのOSもデフォルトではシリアルコンソールの設定がされていないようです。
Ubuntu 11.10は結構簡単に設定ができます。

シリアルポートが /dev/ttyS0 であること、root で操作することを前提に書いていきます。

 

ttyS0.conf を編集(ファイルがないので新しく作る)

[email protected]:/# vi /etc/init/ttyS0.conf

ttyS0.conf にコピペする内容

# ttyS0 – getty
#
# This service maintains a getty on ttyS0 from the point the system is
# started until it is shut down again.

start on stopped rc or RUNLEVEL=[2345]
stop on runlevel [!2345]

respawn
exec /sbin/getty -L 9600 ttyS0 vt102

ttyS0を立ち上げる

[email protected]:/etc/init# sudo start ttyS0
ttyS0 start/running, process 1784

GRUBが起動時にシリアルコンソールに落ちるようにする。

[email protected]:/# vi /etc/default/grub

赤字が追記箇所

[email protected]:~# diff /etc/default/grub.20120427 /etc/default/grub
12c12
< GRUB_CMDLINE_LINUX=””

> GRUB_CMDLINE_LINUX=”console=tty1 console=ttyS0,9600n8″
20a21,22
> GRUB_TERMINAL=serial
> GRUB_SERIAL_COMMAND=”serial –speed=9600 –unit=0 –word=8 –parity=no –stop=1″

変更を適用する

[email protected]:/# update-grub
Generating grub.cfg …
Found linux image: /boot/vmlinuz-3.0.0-12-server
Found initrd image: /boot/initrd.img-3.0.0-12-server
Found memtest86+ image: /memtest86+.bin
done

再起動する

[email protected]:/# shutdown -r now

サーバ側はこれで完了。

2. クライアント側の準備

クライアント側は minicom というソフトウェアを使って接続してみましょう。

まずは minicom のインストール

[email protected]:~# apt-get install minicom

インストールが終わったら初回起動の設定を済ませておきましょう。

[email protected]:~# minicom -s

+—–[configuration]——+
| Filenames and paths      |
| File transfer protocols  |
| Serial port setup        |
| Modem and dialing        |
| Screen and keyboard      |
| Save setup as dfl        |
| Save setup as..          |
| Exit                     |
| Exit from Minicom        |
+————————–+

Serial port setup  を選択

+———————————————————————–+
| A –    Serial Device      : /dev/ttyUSB0                              |
| B – Lockfile Location     : /var/lock                                 |
| C –   Callin Program      :                                           |
| D –  Callout Program      :                                           |
| E –    Bps/Par/Bits       : 9600 8N1                                  |
| F – Hardware Flow Control : No                                        |
| G – Software Flow Control : No                                        |
|                                                                       |
|    Change which setting?                                              |
+———————————————————————–+

Serial Device や Bps/Par/Bits  あたりを自分の環境に合わせて設定しましょう。
編集が終わったらEnterで画面を抜けてトップメニューのでSave setup as dflを選択。

これでクライアント側の設定は終了です。
サーバとクライアントをシリアルケーブルで接続してテストしてみましょう。

[email protected]:~# minicom

Welcome to minicom 2.5

OPTIONS: I18n
Compiled on May  2 2011, 10:05:24.
Port /dev/ttyUSB0

Press CTRL-A Z for help on special keys

Ubuntu 11.10 ml115 ttyS0

ml115 login: AT S7=45 S0=0 L1 V1 X4 &c1 E1 Q0
Password:

CTRL-A Z for help |  9600 8N1 | NOR | Minicom 2.5    | VT102 | Online 00:00

とこんな感じでつながるはずです。

しかし、自分の場合は前提の知識がなかったために一筋縄にはいかず、ここまでくるのに結構苦労しました。
ここからがメモの本番。

4. シリアルコンソールにつながらない(補足1)

ググると大体上記の手順がかかれているのですが実はつながらないはずです。
sudo できる一般ユーザが操作する前提で補足をまとめておきます。

まず、デバイスがroot以外のユーザで使えるか確認。

[email protected]:~$ ls -al /dev/ttyUSB0
crw-rw—- 1 root dialout 188, 0  4月 22 18:37 /dev/ttyUSB0
yutaro[email protected]:~$

dialoutというグループに許可されているんですね。
操作するユーザをdialoutグループに加えます。

[email protected]:~$ sudo adduser yutaro dialout

これでminicomを起動すればつながるはずです。

しかし、私はこれだけでは終わらなかったのです。

5. シリアルコンソールにつながらない(補足2)

前提の知識がなかったのでここが一番時間がかかりました。

サーバとクライアントを接続(物理)するにに以下のような方法をとりました。

|サーバ|←[RS232C・RJ-45変換]→[UTPストレートケーブル]←[RS232C・RJ-45変換]→[RS232C・USBアダプタ]→|クライアント|

しかし、いくらいじってもつながらない・・・
何だろなとググっていたらナイスな記事を発見。

ヘタレな趣味人の呟き : Sun シリアル接続用 UTP クロスケーブル

そうなのか。UTPケーブルでシリアルコンソール繋ぐときはクロスケーブルを使うのか。
しまかもクロスケーブルといっても100BASE-TXとか1000BASE-TとかのEthernetの
クロスケーブルとは異なりほんとにピンアサインが逆転したケーブルを使うんですね・・・

シリアル接続用UTPクロスケーブルのピンアサイン

Pin 1 Pin 8
Pin 2 Pin 7
Pin 3 Pin 6
Pin 4 Pin 5
Pin 5 Pin 4
Pin 6 Pin 3
Pin 7 Pin 2
Pin 8 Pin 1

ようはEthernetのストレートケーブルの片方の頭を逆向きにつけたケーブルを作ればいいわけです。
そしてこんな時のために買っておいた秘密兵器。

これでケーブルを作ったらあっけなくシリアルコンソールに接続できました。

本番のクリティカルな障害じゃなくてよかったww
私はまだ一人じゃ何もできませんが、一つ大きな収穫を得ました!

参考文献・資料

Ubuntu UserDocumentation : SerialConsoleHowto

negi.ipv6labs.jp : Linuxシリアルコンソール

ヘタレな趣味人の呟き : Sun シリアル接続用 UTP クロスケーブル