Ubuntuでmoutn -t cifsとした時にpasswordが求められず、失敗する場合の対処

以下のように打つとパスワードを求められることを期待しているが、そのまま失敗することがある。
# mount -t cifs //192.168.1.1/foo /mnt/hoge
Ubuntu 15.10ではcifs-utilsパッケージをインストールすればよい。
# apt-get install cifs-utils

pulseaudioでHWのサンプリングレート変更を抑止する

pulseaudioは、ソースのサンプリングレートに合わせて、オーディオデバイスのサンプリングレートを変更する。私が使っているUSB-Audioは、サンプリングレートの変更が行われた時に動作不良になるので、この振る舞いを抑止した。

具体的なやりかたは、/etc/pulse/daemon.confのdefault-sample-rateとalternate-sample-rateを同じにする。
default-sample-rate = 44100
alternate-sample-rate = 44100
参考:daemon.confのマニュアル

LXCコンテナをUbuntu 15.04にアップグレードした際のトラブル対応

ホストマシンUbuntu 14.04、コンテナUbuntu 14.04の環境で、コンテナのOSを15.04にアップグレードしたら、起動中、以下のエラーで停止した。
/etc/mtab is not a symlink or not pointing to /proc/self/mounts.
対応方法は、メッセージの通り。mtabをリンクにする。

以下の例ではホストマシンで以下のmachine_nameという名前のコンテナの設定をする。
# cd /var/lib/lxc/machine_name/rootfs/etc
# rm mtab
# ln -s /proc/self/mounts mtab

起動時(lxc-start実行時)に次のエラーメッセージが出る場合
Failed to mount cgroup at /sys/fs/cgroup/systemd: Permission denied
/var/lib/lxc/machine_name/configに次の行を加える。
lxc.aa_profile = unconfined

systemd-journalのCPU負荷が100%になる。
  • コンテナを停止
  • lxc.kmsg = 0をconfigに追加
  • コンテナに/dev/kmsgがある場合、削除
参考: CentOS 7.0のlxcでゲストにCentOSを使う時の問題を改善する。

シンプルなapche用公開ディレクトリ設定例

Alias /cool-path /home/foo/real-path

<Directory /home/foo/real-path>
    Require all granted
</Directory>

avconvでHTML5 videoタグで再生可能な高画質動画に変換

$ avconv -i input.mov -vcodec h264 -profile:v high -level 41 -acodec mp3 -ar 44100 -b:a 320k output.mp4
参考: https://wiki.libav.org/Encoding/h264

avconvである時間帯の動画を切り出す

-ssオプションと-tオプションで実現可能。
例:開始から1分15秒から2分分切り出し。
$ avconvert -i input.mov -ss 00:15:10 -t 00:01:00 output.mp4

HP dv7-6000 Windows10で明るさが変更できない場合の解決方法

HP dv7-6000をWindows10にアップグレードしてしばらく使っていると、画面の明るさが変更できない状態になった。通常、F2とF3キーで明るさを変更できるが、それらを押して明るさが変化しない。

解決方法は、次のようにディスプレイアダプタのプロパティを開き、ドライバを以前のバージョンに戻す事。

  • デバイスマネージャー
    • ディスプレイアダプタ
      • 右クリックでプロパティ
        • ドライバ

後日、デバイスマネージャーで、UnPディスプレイ無効になっている時にもこの現象が発生した。右クリックで表示されるコンテキストメニューから有効にすると、明るさを変更できるようになった。

スマホを立てかける簡単な方法

スホマでテレビ、youtubeなどオンデマンドビデオを見る際、スタンドがほしい時があるのですが、身近にあるもので簡易的に実現できることがわかりました。

それはタオルです。写真のように丸めて背もたれ部をつくればOK。スマホの底面部もタオルの摩擦で滑らず止まります。





MacにiPhoneを接続した時、自動的にiTunesが起動するのを抑止する

  • iTunesの左側のメニューから「概要」を選択
  • 右側の設定項目の中の「このiPhoneを接続しているときに自動的に同期」のチェックを外す

Ubuntu 15.10のip routeコマンドではdefaultが省略できない

Ubuntu 15.04までは以下のような書き方ができた。
# ip route add via 192.168.5.1 table 100
15.10からは、defaultを明示しないと文法エラーになる。
# ip route add default via 192.168.5.1 table 100

Ubuntu 15.10でNetowrk Interface名が変更される

Ubunut 15.04までは、慣習的なeth0とかeth1というNIC名であったが、15.10にアップデートするとenp2s0など、新しい命名規則にデフォルトが変わっていた。これに合わせて、/etc/networking/interfacesに次の2つの修正を行った。

  1. eth0を新しい名前、例えばenp2s0に変更(例の青字部分)
  2. VLANを使っている場合、vlan-raw-device 行を追加(例の赤字部分)(※)

例(ここではVLAN ID=10)
auto enp2s0.10
iface enp2s0.10 inet static
  vlan-raw-device enp2s0
  address        192.168.1.250
  netmask        255.255.255.0
  network        192.168.1.0
  broadcast      192.168.1.255
※下記を参照すると、vlan-raw-deviceを記載しなくてもいいように思えるが、実際、これがないと動作しなかった。
 http://manpages.ubuntu.com/manpages/hardy/man5/vlan-interfaces.5.html

sedなどの置換でマッチ部分を利用する

&を使う。


$ echo "1245" | sed  "s/^12/0&3/"
012345
ちなみにVIMの置換でも利用可能。

curlでJSONデータをPOSTする例

curl http://localhost:8001/ -X POST -H "Content-type: application/jsonx" -i -d '{"a":5}'
-iレスポンスヘッダを表示するオプション。

MacBook (2015年モデル)で漢字変換が遅い時の対応

MacBook(レビューはこちらを参照)を使っていると、漢字変換が遅くなるときがある。再起動すると、問題なくなるので、ソフトウェアのバグのようにも思われるが、次の設定をした後は発生していない。

  • メニューバーの林檎マークからシステム環境設定を選択
  • キーボードのアイコンをクリック
  • キーボードのダイアログで「英字入力中にスペルを自動変換」のチェックを外す
  • 「スペルチェック:」の値を「U.S. English」にする




sshで強制的に端末を割り当てる

スクリプトでsshを使って、標準入力からコマンドを与えようとすると以下のエラーがでる場合がある。
Pseudo-terminal will not be allocated because stdin is not a terminal.
このような場合、ssh -t -t ...と-tを2つ指定すると解決する。

なお、入力側が端末をもっている場合(端末で手動で入力するような状況)は、-tを1つ指定するだけでよい。

MacBook (12inch 2015)レビュー

2015年4月に発売されたMacBook。6月に購入し、おおよそ4ヶ月使用してのレビューです。これだけで全ての作業を行うことは難しいと思いますが、出先などで使用するサブマシンとしては非常に良いです。
 
私はプログラマで、このマシンでも開発を行います。ただし、開発環境は他のデスクトップマシンやクラウドにあって、sshでログインして、テキストベースで作業を行います。ログイン先のマシンではGNU screenを起動しているので、いつでもアタッチして作業を再開できます。こういうクラウド端末的な位置付けでは、高い携行性とOS Xを搭載しており、標準でコマンドラインが使用できることの優位性が最大限に発揮されます。

なお、私は以前からMacBook Proを所有しており、現在もMacBookと併用しています。なので無意識にそれと比較をしていると思われるので、両方のスペックを参考に掲載します。
MackBook参考:MacBook Pro (2013 late)
Display12インチ 2,304x1,440 (226 ppi) 15.4インチ 2,880x1,800 (220 ppi)
CPUCore M 1.1GHz (TB: 2.4GHz) Core i7 2.6GHz (TB: 3.8GHz)
Memory8 GB (1600MHz, LPDDR3)16 GB (1600MHz, DDR3L)
Storage256 GB (PCIe)1 TB (PCIe)
重量0.92 kg2.02 kg

良いところ

  • とにかく小さく、軽く、薄い
    • 持ち歩くときの負担が少ない
    • カフェなどで机が小さくてもほぼ困らない
  • かっこいい
    • 会社でこのモデルを使っているのは私だけです。他の人はLet's noteやThink Pad。一人で勝手に優越感に浸ってます。

タブレットと比較して

軽量という点では、タブレット端末+小型キーボードでも代替になるかもしれませんが、次の点で、やはり汎用OS (OS X)を搭載しているMacBookはいいです。
  • 従来型のノートPCであり、キーボードが標準で装備されていて、キーボード込みの携行性が高い
  • マルチタスク
    • iOSやAndroidのように、他のアプリに切り替えても、バックグラウンドアプリが勝手に終了することがない
  • ターミナル上で、bash, vim, ssh, python, gitなどメジャーなOSSが使用可能
    • MacBookや他の小型軽量マシンにLinuxインストールすればいいと思うかもしれません。確かにそうですが、私はデスクトップがLinuxなので、違う文化に触れたいという思いもあり、ノートPCにはMacを使っています。

気になるところ

  • MacBook Proと比べると、ブラウザのレンダリングや新規タブのオープンなどの動作が遅く感じる
    • 実用上、問題ないレベルで動作しますが、MacBook Proを使った直後などは、もたついているように感じることがあります
  • El Capitanでの漢字変換が遅い(こちらの方法で改善できるかも)
    • ライブ変換をオフにしても、思考と入力に追いつかないことがあります。ただ、ある程度、長い日本語を入力する場合、大抵Google Documentを使うので、それとの相性もあるかもしれません。
  • 2〜3時間使うときでもACアダプタを使ってしまう。
    • バッテリが減ると不安になる私の性格、かつ、主な使用場所にAC電源があるというのが主要因なのですが。。。
    • ブラウザで調べ物をしつつ、sshで他のマシンにログインしてプログラミングをする使い方(MacBookではビルドしない)では、1時間あたり10〜20%ぐらいのバッテリ消費。6時間ぐらいは使えると思う。
    • 一晩充電しとけば、次の日ずっと使えるということはないです。そもそも、そんなノートPCは未だに存在しませんが、将来的に、MacBookシリーズの目指すべき使われ方は、それだと思うので言及しておきます。
  • ディスプレイが本当に薄いので、少しの応力や衝撃で壊れないか不安
    • 実際、壊したことはないので、どの程度の力で壊れるかは不明ですが
  • 膝の上にのせての作業がしにくい
    • 軽すぎて、少しの体の動きでMacBook本体も揺れて不安定
    • 各部が薄く、落としたり、ぶつけると壊れるという不安から、膝上での使用を躊躇する


yumレポジトリ用のapache confのシンプルな例

これをCentOSなら、/etc/httpd/conf.d以下に配置する。
&ltVirtualHost *:80>
  Options Indexes FollowSymLinks
  Alias /my-repos /work/repos
  &ltDirectory /work/repos>
    Require all granted
  &lt/Directory>
&lt/VirtualHost>

これを参照するrepoファイルの例は、こんな感じ。青字の部分を必要に応じて修正。
[repo-name]
name=Example repository
baseurl=http://192.168.5.10/my-repos
enabled=1
gpgcheck=0

DHCPでDNSの自動設定を抑止する

/etc/dhcp/dhclient.confの中のrequire domain-name-serversを削除する
interface "eth0" {
    #prepend domain-name-servers 127.0.0.1;
    request subnet-mask, broadcast-address, time-offset, routers,
            host-name;
    #        domain-name, domain-name-servers, host-name;
    #require subnet-mask, domain-name-servers;
    require subnet-mask;
}

El capitanでgitがエラーになる場合の対処

$ git
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
gitを使うと上記のようなエラーが出る場合、次のコマンドを実行する。
xcode-select --install

MacOSで写真アプリが自動で起動するのを抑止する

El capitanにアップデートした後、カメラをMacに接続すると自動的に「写真」が起動した。この振る舞いをを止めるには、「イメージキャプチャ」を起動し、左下の選択ボックスで「割り当てなし」に設定する。




Experia Z3の防水性

Experia Z3は、仕様上、防水である。購入後すぐに水洗いしたこともあった。もちろん、正常に動作した。しかし、購入から約半年経過したある日、水洗して使っていると、画面が消える・明るさが変化するなどの症状が現れた。そして、本体裏側を見ると、写真のように、カメラレンズ部が内部から結露していた。水が内部に侵入したのだろう。

一旦電源を切り、一晩たった後、電源を入れると今のところ、正常に動作している。今後は、防水性を過信するのはやめようと思った。



gitで内部的に呼ばれるsshを別のユーザーとして実行する

この例では、ユーザーfooとしてsshを実行します。
1. ラッパースクリプトを作成。ここではssh-as-fooとしてます。
#!/bin/sh
ssh -lfoo -i/home/foo/.ssh/id_dsa "$@"
2. GIT_SSH環境変数に、上記のスクリプトを指定。
$ GIT_SSH=ssh-as-foo git pull

直接、通信できないホストからポートフォワーディングでsshログインする。

次のような環境を想定します。ホスト2からログインする方法を紹介します。

通信可能: host1 -> host2
通信付加: host1 x<- host2

1. ホスト1でhost2にポートフォワードします。
(host1)$ ssh host2 -R 8022:localhost:22
上記コマンドは、host2の8022番ポートを、host1(localhost)の22番ポートにフォーワードします。


2. ホスト2で、ポートを指定してログイン
(host2)$ ssh -p 8022 localhost

FirefoxからSafariにブックマークをインポート

メニューの「ファイル」→「読み込む」で「Firefox」を選べばよい。


いままでは、Xmarksとか使っていんだけど、ゴミが入ったり、Firefox syncと競合するのか、内容が壊れたりすることがしばしばあった。私は、それほど頻繁にブックマークの更新をしないので、必要がある度にこうやって手動でインポートすれば、問題ない。

GNU screenで実現するどこでも開発環境

GNU Screenをクラウド上の仮想マシンや、遠隔地に配置してあるマシンで実行させた時の便利さはこの上ない。接続が切れても、つなぎ直せば、それまで使用していた環境が一瞬で復元される。CUI版のリモートデスクトップあるいはVDIといったところ。

最近は、MacBook (2015年春モデル)を、しばしば利用する。そのコンパクトさと軽量さゆえ、外に持ち出すにはもってこいだ。CPUパワーに関しては、非力とまでは言わないが、このマシンでバリバリ開発するのは、Core i7を搭載した高性能なサーバーやデスクトップ機と比べて相対的に効率が悪い。

このマシンとの外出時、ネットワークで遠隔の開発マシンにsshでログインし、screenにアタッチすると、どこでも開発が行える。カフェなどでWIFIが使えれば最高だが、そうでない場合、IIJmioのSIMを入れたiPhoneでテザリングしてもリモートマシンへのpingが100ms前後は出る。少しレスポンスに遅さを感じることもあるが、実用にはなる。それよりも、ちょっとした時間や、アイデアが思いついたとき、迅速に作業できることが、なによりも大きな価値だ。

私がいつも、ログインに使用するコマンドは以下のようなものだ。

$ ssh remote-machine -t "screen -dr pts-1"

iPhone6 (Plus)でカーソルを表示

画面を横にする!

これだけなんですが、普段、縦メインで使っているので気づきませんでした。

縦表示時にカーソル記号はない

カーソル記号:<と>が表示されている



iOS9 on iPhone6s with IIJmio SIM

掲題の組み合わせでも問題なく動作。テザリングもバッチリ。

GitHubのコメントで、記号<をそのままHTMLで表示する

preタグとcodeタグを使う。

<pre><code>
#include <stdio.h>
</code></pre>

Macのターミナルで灰色(DarkGray)の文字が表示されない場合の対応

env | grep TERMとして、-256colorの付かない単なるxtermやscreenの場合、掲題の現象が発生することがある。
export TERM=xterm-256color
または
export TERM=screen-256color
とすればいい。

screen起動時に、自動的にこの環境変数を設定するには以下のいずれかを行う。
1. screenのコマンドラインオプションで-T screen-256colorをつける。
2. .screenに以下を記載する。
term screen-256color

yumですべてのバージョンを表示する例

yum --show-duplicates list package-name

rsyncの転送元の指定方法の注意点

srcに/をつけない場合、そのディレクトリがコピーされ、dest/srcが出来る。
rsync -av src dest
srcに/がある場合、src以下のファイルやディレクトリが、dest以下にコピーされる。
rsync -av src/ dest
なお、destの後ろに/をつけても、つけなくても結果は同じ。

makemkvconの使用例

makemkvを/usr/local/makemkvcon以下にインストールしている場合。
 
LD_LIBRARY_PATH=/usr/local/makemkv/lib /usr/local/makemkv/bin/makemkvcon --decrypt backup disc:/dev/sr0 title
/usr以下にインストールした場合はより簡単
makemkvcon --decrypt backup disc:/dev/sr0 title

LinuxでUSBデバイスをunbind/bindする

# cd /sys/bus/usb/drivers/usb
# echo -n '2-1.6' > unbind; echo -n '2-1.6' > bind
上記の2-1.6はバス番号。環境により適宜変更する。以下のようにバス番号に対応するデバイスを知ることができる。
# cat 2-1.6/manufacturer
RATOC Systems,Inc.
# cat 2-1.6/product
RAL-2496UT1 USB-Transport

カーネルパラメータで使用するCPU数を制限する

"maxcpus=数字"をkernelパラメータに追加する。

CentOS7では、/etc/default/grubのGRUB_CMDLINE_LINUX=行に上記パラメータを追加し、次のように更新を反映。
# grub2-mkconfig -o /boot/grub2/grub.cfg

Cloud (OpenStack)用のCentOSイメージ

OpenStackのページ や そこからの CentOSのダウンロードページから、取得可能。

ログインユーザ: centos
で、起動時に登録した公開キーでsshログインできる。

awkで正規表現にマッチする箇所のみを取り出して利用する例

match()を使うと、マッチした部分文字列のインデックスと長さが、RSTARTとRLENGTHに入る。それをsubstrで切り出す。
ls | awk '{ match($0, "#[0-9]+"); if (RSTART > 0) printf("cp \"%s\" file-%03d.dat\n", $0, substr($0, RSTART+1, RLENGTH)) }' 

How to create a network packet capture file by tcpdump, which can be available for Wireshark

Example: File name (blue characters) should be changed properly.
# tcpdump -n -s 0 -i eth0 -w dump.dat
-n: Shows the raw IP address (doesn't resolve the name with DNS).
-s 0: Makes the maximum packet size unlimited.
-i: Network device used for the capture.
-w: File name captured packets will be stored in.


Japanese version is here

sshfsでリモートマシンのディレクトリをマウント

リモートマシンremoteの/homeを/mnt/dir1にマウントする例。
sshfs remote:/home /mnt/dir1
リモートマシンremoteのホームディレクトリを、相対パスmntにマウントする例。
sshfs remote: mnt
アマウントの例
fusermount -u mnt

LinuxでDVDのバックアップ例

$ dvdbackup -i /dev/sr0 -M
libdvdread4が必要な場合、/usr/share/doc/libdvdread4/install-css.shを実行する。

-i で入力デバイスを指定。
-M でコピー(Mirror)を実行する。

lxcのインスタンスにカーネルログを記録させない

ゲストOSでrsyslogが動作している場合、次のように設定ファイルにkern.noneを/var/log/syslogの行に追加する。 また、kern.log行そのものをコメントアウトします。
*.*;auth,authpriv.none,kern.none -/var/log/syslog
#kern.*                          -/var/log/kern.log
Ubuntu 14.04の場合、/etc/rsyslog.d/50-default.confが設定ファイルです。

sshで直接リモートホストのscreenを使用する。


$ ssh host -t "screen -r"
ポイントは-tオプション。これが無いと端末が確保されないので、screenなど端末を使用するプログラムを起動できない。

rabbitmqctlでvirtual hostに対するパーミッションの設定

$ sudo rabbitmqctl set_permissions -p vhost user ".*" ".*" ".*"
最後の3つの引数は、それぞれ設定、書き込み、読み込みを許可するキュー名。

CentOSでzabbix server2.2がcrashする不具合の解決方法

# rpm -Uvh https://kojipkgs.fedoraproject.org/packages/trousers/0.3.11.2/3.fc20/x86_64/trousers-0.3.11.2-3.fc20.x86_64.rpm

fluentdにメッセージを送る例

$ echo '{"json":"message"}' | fluent-cat a.tag
なお、これを受け取るfluentd.confの最小な一例
<source>
  type forward
</source>

lxc-createでバージョンを指定してubunutをインストールする。

例:14.04 LTS (trusty)をインストール
# lxc-create -n name -t ubuntu -- -r trusty

ansibleをローカルで実行する。

-c localオプションを指定する。

# ansible-playbook -c local -i hosts playbook.yaml

rootで一般ユーザーのsshキーペアを使ってgit cloneする

例:青字の部分を適宜変更。
# SSH_AUTH_SOCK=/run/user/1000/keyring/ssh git clone ssh://user@host/hoge/foo foo

Ubuntuであとからユーザーのホームディレクトリを暗号化する

このページを参考に作業。要点は次のとおり
  • 対象のユーザーをログオフ
  • rootでログイン
  • # /usr/bin/ecryptfs-migrate-home -u <user name>
  • ユーザーでログインしてみる
    • OKなら、ecrypt-unwrap-passphraseと実行し、手動で復元する場合のパスフレーズを得る。
  • リブートする

Ubuntu 14.04のmediatombで日本語タグを扱う

多くのブログなどのでは、/etc/mediatomb/config.xmlの metadata-charsetをCP932にする記事が多く見られる。そのように設定すると、wmaのタグが正しく読み込まれなかった。 Ubuntu14.04で、次のようにfilesystem-chrsetとmetadata-charsetともUTF-8にすると、うまく動作した。
<filesystem-charset>UTF-8</filesystem-charset>
<metadata-charset>UTF-8</metadata-charset>
なお、私は、タグの文字列に次のような文字コードを使用している。
種類文字コード
WMAWMPのデフォルト(UTF-16?)
mp3UTF-8
flacUTF-8

Ubuntuでja_JP.UTF-8が使用できない場合の解決方法

以下のようなエラーが出た場合、
setlocale: LC_ALL: cannot change locale (ja_JP.UTF-8)
次のパッケージをインスールする
# sudo apt-get install language-pack-ja

Ubuntu 15.04のpptpdに接続できない現象の解決方法

Ubuntu 15.04にアップデートした後、pptpdでVPN接続できなくなった。syslogを調べると以下の行を発見。
 pppd[8104]: Plugin /usr/lib/pptpd/pptpd-logwtmp.so is for pppd version 2.4.5, this is 2.4.6
/etc/pptpd.confのlogwtmp行を以下のようにコメントアウトして、pptpdを再起動すると、接続できるようになった。
#logwtmp

Adobe Lightroom CC 2015が起動しない問題の解決方法

Adobe Lightroom CC 2015をインストールし、アイコンをクリックしたのに、一瞬バナーが表示された終了する現象に遭遇しました。 以下のページに解決方法がありましたが、簡単に書くと次のとおりです。

  • Adobe Creative Cloudアプリを起動
  • 右上の歯車のアイコンをクリック
  • 環境設定を開き、一度サインアウトする。
  • 再度、サインインしてLightroom CC 2015を起動する

 http://finder-world.com/2015/04/22-lrcc2015/

branch is currently checked outと表示されてgit pushが失敗した時の対応

git pushで以下のようなエラーになる場合があります。
 ! [remote rejected] master -> master (branch is currently checked out)
リモートで、次のように設定することで解決できます。
$ git config --bool core.bare true

Linuxでプロセスの環境変数を表示する

$ cat /proc/20043/environ  | tr "\000" "\n"
sedを使ってもOK
$cat /proc/20043/environ | sed "s/\x0/\n/g"

sshでgit repositoryをcloneする例

remote.hostでsshが8080ポートで待ち受け。MyProjectというレポジトリをfooというuserでログインしてクローンする。
$ git clone ssh://foo@remote.host:8080/home/foo/repos/MyProject

iptablesでルール番号を表示

--line-numberを指定する。
# iptables -L -nv --line-number

Ubuntu 15.10でサービスのデフォルト起動を抑止する。

例: rpcbindの起動を抑止する。
# update-rc.d -f rpcbind remove  
青字部に指定できるサービスは、/etc/init.dの中のスクリプト。

lsofで特定のポートを使っているプロセスを調べる

例:22番ポートを使用しているプロセスを調べる
# lsof -i:22

MySQLで文字コードを指定してテーブルを作成する

character setオプションを指定。

mysql> create table t1 (c1 varchar(4)) character set utf8;

コマンドラインでのUbuntuのメジャーバージョンアップ

# apt-get install update-manager-core
# do-release-upgrade
ちなみに、LTSのみにするか、定期バージョンアップも含めるかは、/etc/update-manager/release-upgradesのPromt行を値で設定する。ltsまたはnormalを指定する。
Prompt=lts

CentOS7でUbuntuのLXCコンテナを作成する

debootstrapをインストール
# yum install debootstrap
qemu-debootstrapというコマンドが必要だが、以下のようにして作成。
# cp /usr/sbin/debootstrap /usr/local/sbin/qemu-debootstrap
qemu-debootstrapのDEF_HTTPS_MIRROR行を次のように変更
DEF_HTTPS_MIRROR="https://mirrors.kernel.org/ubuntu"
あとは、lxc-createコマンドを実行すればOK
# lxc-create -t ubuntu -n name

MacOSで.DS_Storeをリモートディスク上に作成させない方法

下記のコマンド実行後、ログアウト・ログインまたは再起動。
defaults write com.apple.desktopservices DSDontWriteNetworkStores true
参考 https://support.apple.com/ja-jp/HT1629

LXCのCentOS7でhttpdがインストールできない問題の対処

httpdをyumでインストールしようとしたところ、以下のエラーが表示され、失敗した。
error: unpacking of archive failed on file /usr/sbin/suexec: cpio: cap_set_file
ホストマシンの/usr/share/lxc/config/centos.common.confでsetfcapをドロップから除外したところ、解決された。
#lxc.cap.drop = mac_admin mac_override setfcap
lxc.cap.drop = mac_admin mac_override
参考 CentOS 7.0のlxcでゲストにCentOSを使う時の問題を改善する。

rpmbuild実行時に展開されるマクロのデフォルトの定義ファイル

/usr/lib/rpm/macros
/etc/rpm/macros.*

LXCでrootfsの作成場所を指定する。

--dirオプションを使う。

# lxc-create -n foo -t ubuntu --dir /work/lxc/foo

TunnelBlickの設定ファイルのパス

/Library/Application Support/Tunnelblick/Users/[UserName]/[ServerName]/

Ansibleでのリモート側のシェルのエスケープシーケンスにるエラー

ansibleを使っていて、ハマった。リモート側の.bashrcには、screenのために次のような設定がある。
function printdir() {
  echo -en "\033k[$SCREEN_HOST$(pwd | awk '{ print $(NF) }' FS='/')]\033\\"
}

if [ x$TERM = xscreen ]; then
  PROMPT_COMMAND='printdir'
fi
そのため、ansibleで次のような一見不可解なエラーが発生した。
GATHERING FACTS *************************************************************** 
failed: [remote] => {"failed": true, "parsed": false}
invalid output was: SUDO-SUCCESS-dxwtmneadzzelqvobbmnbtbhweqmixhr
/usr/bin/python: can't open file '
単純な回避方法は、次のように実行時にTERMを適当なもの(xterm)に変更すること。
$ TERM=xterm ansible-playbook -i hosts playbook.yaml

HHKBで右◇を右Ctrlに設定する。

~/.Xmodmapに以下を記述する。
keycode 100 = Control_R
add control = Control_R
次いで、以下のコマンドで有効化する。
$ xmodmap ~/.Xmodmap
参考:HHKBで右ALTを使用可能にする。

LXCでホストのディレクトリをゲストがマウントする。

/var/lib/lxc/$CONTAINER/configに以下のような行を記載する。
lxc.mount.entry = /home mnt/host.home none bind,create=dir 0 0

HDDのActive/Standbyの確認および、Standbyタイマの設定方法

確認: -Cオプション。
# hdparm -C /dev/sdb

/dev/sdb:
 drive state is:  standby
設定: -Sオプション。タイムアウトパラメータは特殊なルールに従うので、man等を参照
# hdparm -S 120 /dev/sdb

/dev/sdb:
 setting standby to 120 (10 minutes)

OpenVPNの再ネゴシエーション時間を変更する。

サーバーのconfにreneg-secを秒単位で追加。以下は、24時間の例。
reneg-sec 86400
クライアントのconfには、reneg-sec 0を追加する。
reneg-sec 0

CentOS 7.0のlxcでゲストにCentOSを使う時の問題を改善する。

デフォルトだと起動がすごく遅い。

こののサイトを参考に以下のファイルから、setpcapを削除するとうまくいった。
  • /usr/share/lxc/config/centos.common.conf
    •  lxc.cap.drop =行

systemd-journalのCPU負荷が100%になる。

ここを参考に以下のように改善。なお、この現象はsystemdを使用するUbuntu15.04でも発生する。
  •  /var/lib/lxc/{container}/configに以下を追加
    • lxc.autodev = 1
    • lxc.kmsg = 0
  •  /var/lib/lxc/{container}/rootfs/lib/systemd/system/getty@.serviceの次の行をコメントアウト
    •  ConditionPathExists=/dev/tty0

WIFIテザリングでスピードのロスがどれくらいあるか実測。

【親機】Experia Z3 (SO-01G)、LTE回線
【子機】iPhone6Plus

親機で直接測定。下り、おおよそ12.5Mbps。



 WIFIで親機(Z3)に接続している子機(iPhone6Plus)で測定。約11Mbps。少し低下しているものの、実用上問題はなさそう。

Ubuntuで自動接続するOpenVPNのサーバを制限する。

デフォルトでは、/etc/openvpn以下にあるすべての.confファイルに対応するサーバに接続を行います。
これを特定のサーバだけと接続するには/etc/default/openvpnのAUTOSTARTに、それらのサーバを列挙します。
AUTOSTART="sv1 sv2"

CentOS 7でOpenVPNサーバの起動後にスクリプトを実行する。

confファイルに以下のように記述すると、OpenVPNサーバの起動後にそのスクリプトを実行できるが、デフォルトではそれが抑止されている。
up "/etc/openvpn/up.sh"
以下のように設定ファイルのExecStart行に--script-security 2を追加する。
# cat /etc/systemd/system/multi-user.target.wants/openvpn@.service
(省略)
ExecStart=/usr/sbin/openvpn --daemon --writepid /var/run/openvpn/%i.pid --cd /etc/openvpn/ --config %i.conf --script-security 2
最後に、systemdに設定ファイルを再読み込みさせる。
# systemctl daemon-reload

OpenVPNでクライアントに固定IPを設定する。

サーバのconfファイルにclient-config-dirを設定する。 例えば
client-config-dir client-config
上記のの場合、/etc/client-configというディレクトリを作成し、その中にクライアント名のファイルを配置する。

TUNの場合

クライアントclient01に192.168.10.25をアサインしたい場合、それをifconfig-pushの 第1引数にしてする。2引数には、サーバー側の仮想アドレスを指定。 それらに指定できる第4オクテットのペアは決まっている。このページの"Each pair of ifconfig-push addresses represent"で始まる節を参照。
$ cat /etc/client-config/client01
ifconfig-push 192.168.10.25 192.168.10.26

TAPの場合

2番目の引数には、ネットマスクを指定。
$ cat /etc/client-config/client01
ifconfig-push 192.168.10.25 255.255.255.0

シェルスクリプトで現在時刻を読みやすい文字列に変換する。

$ date +%Y-%m%d-%H%M.%S
2015-0326-1359.52
フォーマット文字列の詳細については、man dateで。

cupsがない場合のsmbdのエラーメッセージ出力を抑止する。

CUPSがないと、smbdが次のようなメッセージを出力する。
Mar 26 08:44:22 ren smbd[4874]: [2015/03/26 08:44:22.103445,  0] ../source3/smbd/server.c:1278(main)
これを抑止するには、/etc/samba/smb.confのprinting項目をbsdに変更し、再起動する。
;    printing = cups
    printing = bsd
CentOS7.0なら、再起動は次のとおり。
# systemctl restart smb

CentOS7でクラッシュカーネルをロードせずに空きメモリを増やす

Crashカーネルが常駐しているかは、/proc/iomemにCrash kernel行があるか否かで判別できます。
$ cat /proc/iomem  | grep Crash
  2c000000-360fffff : Crash kernel
Crashカーネルを取り除くには、/etc/deafult/grubからcrashkernel=autoを削除します。
 GRUB_DEFAULT=saved
 GRUB_DISABLE_SUBMENU=true
 GRUB_TERMINAL_OUTPUT="console"
-GRUB_CMDLINE_LINUX="vconsole.keymap=us crashkernel=auto  vconsole.font=latarcyrheb-sun16 rhgb quiet"
+GRUB_CMDLINE_LINUX="vconsole.keymap=us vconsole.font=latarcyrheb-sun16 rhgb quiet"
 GRUB_DISABLE_RECOVERY="true"
その後、以下のようにして/etc/grub2.cfgを更新し、再起動すればOK。これで、100数十MBの空きメモリが増えるはず。
# grub2-mkconfig > /etc/grub2.cfg

Linuxで、Windowsファイル共有(SMB)フォルダをマウントする例

接続先には、IPアドレスを指定しなければならない。ホストネームでは失敗する。
# mount -t cifs -o user=abc,passwd=yyy //192.168.1.100/folder /mnt/point

LinuxでNTPを使って時刻を一回だけ合わせる

# ntpdate ntp.nict.go.jp
なお、ntpdが実行されている場合、失敗する。ntpdを一旦停止して、ntpdateを実行すればよい。

CentOS7 Memo

Network Interfaceの一覧出力

$ ip addr

サービスの一覧を表示

# systemctl -t service

sshdの再起動

# systemctl restart sshd.service

NTPサーバのインストール

# yum install -y chrony
# systemctl start chronyd.service

brctlのインストール

# yum install -y bridge-utils

パスワードなしでsudoする

/etc/sudoersに以下を記載。usernameを適宜変更。
username         ALL=(ALL)       NOPASSWD: ALL

Windowsファイル共有(SMB, CIFS)フォルダのマウントに必要なパッケージのインストール

# yum install -y cifs-utils

Firewallを削除する

# systemctl stop firewalld
# systemctl disable firewalld

EPELレポジトリをyumで使用可能にする

# yum install -y epel-release

LXCのインストール

EPELレポジトリを追加して、以下を実行
# yum install -y lxc lxc-templates

HP Micro Server N54Lメモ

構成

  • 本体
    • HP ProLiant MicroServer Turion II NEO N5
  • SSD
    • キングストン BE325-JP SSDNow V300 Series 120GB
    • CRIN2535 [裸族のインナー変換アダプタ]で3.5インチに変換して標準のマウンタで全面のベイに設置。
    • ブートドライブとして、CentOS 7をインストール
  • HDD
    • WESTERN DIGITAL WD40EZRX
    • 2台でRAID1を構成。Linuxのmdadmを使用。 
  • Memory
    • 合計16GB (DDR3-1333 8GB) x 2
    • あきばお〜で最廉価のバルク品を購入
  • UPS
    • APS BE325-JP SurgeArrest 雷ガードタップ+電源バックアップ

ノウハウ

  • ディスクマウンタのネジとレンチ
    • 蓋の裏側に装備されている。ネジもレンチも黒いの一見わかりにくい
  •  BIOS画面への入り方
    • F10
  • RAIDの設定
    • BIOS画面で、Advanced -> IDE Configuration -> RAID、再起動後、Ctrl-F
      (結局、Linuxドライバがないので使用していない)
  • マザーボードを取り出す際のmini SATAケーブルの外し方
    • 最初めちゃくちゃ硬くてびくともしなかった。このページを参考に小さめのマイナスドライバを上の写真のようにコネクタの間にねじ込むようにして抜くと、うまくいった。

 

ベンチマーク

ブートドライブ(SSD)

# hdparm -t /dev/sda

/dev/sda:
 Timing buffered disk reads: 710 MB in  3.00 seconds = 236.52 MB/sec

ソフトウェアRAIDドライブ(HDDx2)

hdparm -t /dev/md0

/dev/md0:
 Timing buffered disk reads: 462 MB in  3.00 seconds = 153.83 MB/sec

iPhoneでスクリーンショットを撮る

電源ボタン+ホームボタンを同時に押す。

iOS8.2+キャリアファイル:18.2+IIJmioでテザリングOK

iPhone5sをiOS8.2にアップグレードし、キャリアファイルをドコモ18.2にしても、IIJmioのSIMでテザリングがそのまま出来ました。



参考:iOS8.1+キャリアファイル:ドコモ18.1および18.2+IIJmioでテザリングOK

ハイフンから始まるファイルの削除

--をファイル名の前に挿入します。
rm -- -abc.dat

bashのコマンドラインでundo

Ctrl-x, Ctrl-u

HHKBで右ALTを使用可能にする。

HHKBのAltキーがXubuntu 14.10では動作しなかった。 以下のようにすることで、右Altとして使用可能。
xmodmap -e "keycode 108 = Meta_R Alt_R"
マシンの起動時に有効するには、~/.Xmodmapに以下を記述する。
keycode 108 = Meta_R Alt_R
参考:HHKBで右◇を右Ctrlに設定する。

Vimでタブを閉じる

フォアグランドのタブを閉じる
:tabc
バックグランドのタブをすべて閉じる
:tabo

Vimで現在のバッファを新しいタブで開く

: tab sp
また、空の新しいタブを開く場合は、以下のようにする
: tab new
なお、タブの移動は、コマンドモードで gtもしくはgT

Vimで新しいバッファを開く


操作コマンド
横分割new
縦分割vnew
分割なしenew

XTermでMETAキーを有効にする

~/.Xdefaultsに以下を追記する。なお、METAキーは、bashで、M-f/bで単語単位で移動するのに使用している。
XTerm*eightBitInput:   false
XTerm*eightBitOutput:  true
有効にするには、次のコマンドを入力。
$ xrdb ~/.Xdefaults
参考: 9.13 Why doesn't my key work in an xterm window?

avconvで、音声ストリームだけを取り出す

-acodec copyと-vn (ビデオを使用しない)を指定すればよい。

avconv -i input.mp4 -acodec copy -vn output.mp4

GNU screenでFlow controlを無効にする

.screenrcに次の2行を追加。単にXonとデフォルトflowのショートカットを無効にする。
bind s # prevent xon
bind f # prevent changing defflow
参考: screenで入力がCtrl-sが効かなくなったときの対応

Wireless LAN interfaceをブリッジ可能にする

wlan0などの無線LAN I/Fをbridgeに追加しようとすると以下のようなエラーで失敗することがある。
Operation not supported
その場合、次のコマンドを実行することで、追加可能になる。(wlan0の部分は適宜変更)
# iw dev wlan0 set 4addr on

HHKB (Happy Hacking Keyboard)でHome, End, PgUp, PgDown

HHKB無印では普段使わないキーを忘れがちなのでメモ。 以下すべて、◇キーを押しながらの操作
Homek (ホームポジション)
Endk (下段)
PgUpl (ホームポジション)
PgDownl (下段)

詳しくはメーカーの配列ページ参照

Ubuntu 14.04/14.10/16.04でBluetoothヘッドホンを接続する。

デフォルトだと、A2DPに接続しようとすると"Stream Setup Failed"とメッセージが表示され失敗する。
以下のようにして、pulse-audioにbluetoothのためのモジュールをインストールする。
$ sudo apt-get install pulseaudio-module-bluetooth
$ pactl  load-module module-bluetooth-discover
なお、オーディオの出力を制御するにはpavucontrolを使う。

追記: 2016/06/20
Ubuntu 16.04でもこの方法で再生できること確認しました。

SmartNewsで通知を無効にする。

スマホアプリのSmartNews。デザインいいし、軽いし、いいアプリだと思うけど、一日に何度も通知されるとちょっとうざい。次の方法でそれを無効にする。

1.トップ画面で画面を下にスワイプし、画面右上に設定アイコン(歯車)を表示させる。
2.アイコンをクリックして、設定画面で「配信時刻を変更する」をタップ。
3.下部にある「通知」をタップ。
4.「無効」を選択。

moshでロケール関連のエラーが出てログインできない時の対処方

$  mosh hostname
mosh-server needs a UTF-8 native locale to run.
 
Unfortunately, the local environment (LC_ALL=C) specifies
the character set "US-ASCII",
 
The client-supplied environment (LC_ALL=C) specifies
the character set "US-ASCII".
 
LANG=en.UTF-8
LANGUAGE=en.UTF-8
<略>
LC_ALL=C
Connection to hostname closed.
/usr/bin/mosh: Did not find mosh server startup message.
上記のようなエラーがでる場合、つぎのようにロケールLC_ALLを指定してみる。
$ LC_ALL=en_US.UTF-8 mosh hostname
公式ページの"Q: I'm getting "mosh requires a UTF-8 locale." How can I fix this?"という項目に詳細が記載さている。

Linuxでターミナルの幅と高さ(文字単位)を取得する

$ tput lines
82
$ tput cols   
274

MacOSでメニューを操作するショートカット

Ctrl-F2

フルスクリーンアプリを使っている時に、キーボードだけで時計やステータスを見るのにも使える。

ちなみにCtrl-F3で、Dockへのショットーカットになる。

scalaで10進数と16進数を変換

10進→16進
scala> 817.toHexString
res6: String = 331
16進→10進
scala> 0x123
res7: Int = 291
大きい数の場合。BitIntの2つ目の引数は、基数。
scala> val a = BigInt("fedcba9876543210", 16)
res1: scala.math.BigInt = 18364758544493064720
BigInt型のオブジェクトが保持する数を16進文字列で表示
scal> a.toString(16)
res2: String = fedcba9876543210

GDBでシグナルをハンドルする

例えば、SIGWINCHで停止するには以下。
(gdb) handle SIGWINCH stop
停止しないようにするには以下のいずれかをstopの代わりにpassを指定する。
なお、シグナルの現在の補足状態を取得するには次のコマンド。
(gdb) info signal

MacOS yosemiteでウィンドウを最大化する方法

yosemiteでは、緑のボタンでフルスクリーンになる。次のいずれかで最大化することができる。
  • alt(option)を押して、緑ボタンをクリック
  • 次の設定をして、タイトルバーをダブルクリック
    システム環境設定→Dock→ウィンドウのタイトルバーをダブルクリックしてウィンドウをしまう

apt-cacheでパッケージのバージョンを表示する

apt-cache policyを使う。
$ apt-cache policy cinnamon
cinnamon:
  Installed: (none)
  Candidate: 2.2.16-3
  Version table:
     2.2.16-3 0
        500 http://archive.ubuntu.com/ubuntu/ utopic/universe amd64 Packages

topでメモリ使用量の単位をMiBやGiBにする。

Ubuntu 14.10のtopでは、デフォルトのメモリ使用量(VIRTやRSS)の単位はKiBです。最近のアプリはたくさんのメモリを使うので桁が多く見にくいときがあります。その場合、以下のキーを押下することで、単位が変更されます。
  • E (大文字):上部の総合的なメモリ使用量の単位を変更
  • e (小文字):各アプリのメモリ使用量の単位を変更
以下のスクリーンショットでは、'>'を押して、メモリの使用量の降順にソートしています。

デフォルトの状態
Eを2回、eを1回押した状態

日本語入力にfcitxを使う

これまで、Ubuntuの標準のiBusを使ってきたが、入力が急に不能になるなどの不具合に一日数度遭遇していた。なので、入力をfcitxに変更した。今のところ、快適に動作している。入力メソッドにMozcを使う場合は、以下のようにしてインストールする。mozcにも対応しているようだ。
$ sudo apt-get install fcitx-mozc
Anthyを使う場合、次ように入力する。
$ sudo apt-get install fcitx-anthy
そのあと、システムのインプットシステムをfcitxに設定する。Xfce (Xubuntu)なら、設定マネージャー -> 言語サポート -> キーボード入力に使うIMシステムを設定する。
 次いで、ログアウト -> ログインするか、再起動すると、fcitxが起動する。システムトレイに次のようなキーボードアイコンが表示されるはず。
真ん中のキボードがfcitxのアイコン

GDBで長い出力を省略させない

表示制限を500文字に設定する例
(gdb) set print elements 500
なお、現在の設定値は次のように確認できる。
(gdb) show print elements
Limit on string chars or array elements to print is 500.

VimでScalaコードをハイライトする

vim7.4では、残念ながら、ScalaのSyntaxハイライト(キーワードの色付け表示)ができない。以下の手順で、表示可能になる。
  • https://github.com/scala/scala-tool-supportを任意の場所にclone
  • tool-support/vim以下を~/.vimにコピー
なお、Vundleを使って、derekwyatt/vim-scalaをインストールという方法もネットを検索するとありそうだが、普段からVundleを使っていないので、若干大変そう。で、上記の方法を選んだ。

avconvを使ってmp3をwavに変換する

avconv (旧ffmpeg)でmp3をwavに変換する例。
$ avconv -i sample.mp3 sample.wav