カテゴリー別アーカイブ: Linux

AWS EC2 での bash プロンプトに、設定したEC2 Instance Nameを表示する

「ログインしたEC2 instance のプロンプトには Private IP address ベースのホスト名が表示されているだけで、どのマシンにログインしたのかパット見では分からない。なんとかならない?」という相談を受けたので、いろいろと考えてみた。

結論からすれば、EC2 Instance を立ち上げる時にホスト名をつけたり、Tagをつけたりするので、それを bash のプロンプトに表示させてしまえばOKだろう。
ということで、

  • EC2 Instance のIAMロールで、AmazonEC2ReadOnlyAccess を割り当てる。
  • /etc/profile.d/instance_name.sh に、下記のようなものを置いてみた。
#!/bin/bash

# get availability zone name
z="$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone | sed -e 's/.$//g')"

# get instance-id myself
instance_id="$(curl -s http://169.254.169.254/latest/meta-data/instance-id/)"

# get Name from tags
aws_tag_name="$(aws --region $z ec2 describe-instances --instance-ids $instance_id --output text --query 'Reservations[].Instances[].Tags[?Key==`Name`].[Value]')"

PS1="[\u@\h ${aws_tag_name} \W]\n\$ "

元ネタ: EC2インスタンスにtagで付けた名前をサーバー内から取得する

Intel Edison Kit for Arduino

Intel Edison Kit for Arduino

だいぶ前に Intel Edison Kit for Arduino を貰ったので試しに入れてみたのだが、中のソフトウェアを更新するために opkg upgrade をしただけで disk full になった。開発環境として使わせるためにコンパイラなどが入っているのだが、構築済みシステムで update すらできないって、どういうことでしょうかね。。(汗)

Ubuntu 16 + nginx で HTTP2

このBlogを置いてある masaru.org のWebサーバを HTTP2 に対応させようと頑張っており、昨日対応完了したのでメモっておきます。

必要なものはこのとおりでした。

  • Ubuntu 16 Server
  • nginx-1.10
  • openssl-1.0.2g

各所のドキュメントを読んでいたところ nginx-1.9.5 以降ならばHTTP2に対応しているとのことで、 nginxの本家にある nginx-1.10 の deb パッケージをインストールしてみたところ、Safari や iOSの Google Chrome では HTTP2 で通信するものの、MacやWindowsのGoogle ChromeではHTTP/1.1 のままで、困っておりました。
昨日見た記事では、Google ChromeでHTTP2 対応させるには、Webサーバ側でopenssl-1.0.2 以降を利用する必要があるとのことだったので、サーバで使っている Ubuntu を 16 にアップグレードすることを決意。

下記のようなパッケージ構成にしたところ、無事に Google Chrome でも HTTP2が利用できるようになりました。

$ dpkg -l 'libssl*' 'nginx*'
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name           Version      Architecture Description
+++-==============-============-============-=================================
un  libssl                       (no description available)
ii  libssl0.9.8:i3 0.9.8o-7ubun i386         SSL shared libraries
un  libssl096-dev                (no description available)
ii  libssl1.0.0:i3 1.0.2g-1ubun i386         Secure Sockets Layer toolkit - sh
rc  nginx          1.10.1-1~tru i386         high performance web server
ii  nginx-common   1.10.0-0ubun all          small, powerful, scalable web/pro
un  nginx-core                   (no description available)
un  nginx-doc                    (no description available)
un  nginx-extras                 (no description available)
ii  nginx-full     1.10.0-0ubun i386         nginx web/proxy server (standard
un  nginx-light                  (no description available)

Vyatta/Vyos のコマンドインターフェース

久しぶりにLinuxのネタでも書いてみようかと。

Linux Box を Router として使うのに便利な Vyos (旧 vyatta) で、ちょいと自分たちが調べたい統計を取ろうと思い、いろいろと調べていました。

Vyos の場合、Console や SSH などでログインをすると、LinuxのBashの代わりに /bin/vbash というBashっぽいものが動き、ネットワーク機器に有りがちなコマンドインターフェースが提供されています。 このコマンドインターフェースではルータとしての機能設定や現在の状況を表示することができ、例えばshow dhcp server statistics といったコマンドを実行すれば、DHCPサーバのIPアドレス貸出数 (number of leased) が表示されます。

ちょうど監視項目として、vbash 経由で取得できる情報を使って、IPアドレス貸出数を zabbix 経由で取得したかったので、調べてみたのです。

まず show コマンドの実装がどうなっているのか調べてみたところ、こんな感じでした。

 $ type show
show is aliased to `_vyatta_op_run show'

$ type _vyatta_op_run | head -5
_vyatta_op_run is a function
_vyatta_op_run ()
{
    local -i estat;
    local tpath=$vyatta_op_templates;

show コマンドはBashのマクロっぽいもので実装されていますね。

次に show dhcp server statistics がどうなっているのか調べるために、Bashの実行オプションを set -x と変更して、評価されるコマンドを表示して調べてみました。

vyatta@vyatta:~$ set -x
+ return 0
++ history -a
vyatta@vyatta:~$ show dhcp server statistics
.... 中略 ....

+ eval shopt -s 'extglob;shopt' -u 'nullglob;'
++ shopt -s extglob
++ shopt -u nullglob
+ [[ -t 1 ]]
+ eval '${vyatta_bindir}/sudo-users/vyatta-show-dhcp-server.pl --show-stats'
++ /opt/vyatta/bin/sudo-users/vyatta-show-dhcp-server.pl --show-stats
+ return 0

pool                                    pool size   # leased    # avail
----                                    ---------   --------    -------
hogehage                                200         4           196

++ history -a

この部分からわかったのが、 show dhcp server statisticsというコマンドを実行すると

/opt/vyatta/bin/sudo-users/vyatta-show-dhcp-server.pl --show-stats

が最後に実行されるということでした。

こんな感じにして、Vyatta/Vyos のコマンドから取得できる値をBashスクリプトにして、Zabbix agent から読み出すようにしてみます。

!/bin/bash
target="$1"
column="$2"

case "$column" in
"poolsize"|1)	col=2;;
"leased"|2)	col=3;;
"avail"|3)	col=4;;
*)
	echo "$0  (poolsize|1|leased|2|avail|3)"
	exit 255
	;;
esac

/opt/vyatta/bin/sudo-users/vyatta-show-dhcp-server.pl --show-stat pool="$target"|grep "^$target" | awk "{print \$${col} }"

あとは /etc/zabbix/zabbix_agentd.d/userparameter_dhcpd.conf とかいうファイルに、下記内容を書いて sudo service zabbix-agent restart すればOKです。

UserParameter=service.dhcpd.leased[*],/etc/zabbix/dhcp_server_stat.sh $1 leased

引数を取るようになっているので、Zabbix のアイテム設定時のKeyのパラメータに pool名を引数として設定します。

service.dhcpd.leased[hagehoge]

あとはグラフも設定して完了っと。

pwgen – Password の自動生成

いつも新しいパスワードを作成するときにコマンド名を忘れてしまうPassword生成器。 ほぼ個人的備忘録として書いておきます。

コマンド名は pwgen です。 http://pwgen.sourceforge.net/

Debian, Unbuntu では

sudo apt-get install pwgen

Mac OS X の brew では

brew install pwgen

でインストールできます。

実行例

# 8文字のパスワードを4つ表示
$ pwgen 8 4
eiCohch3 QuuVoh4o choH2goo Phohxaa5

# 記号(symbol)入り 10文字のパスワードを2つ表示
$ pwgen -y 10 2
se7Arobe#i shie4uo`Wu

使って思ったけど、JavaScript で出来た Web browser 版が有るとイイかも。
っと思って調べてみたら、 http://fm4dd.com/security/pwgen.htm というものがありました。