linux機にログインした際に表示されるメッセージをカスタマイズする
linuxマシンにログインすると、
Welcome to Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-64-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage 0 packages can be updated. 0 updates are security updates. Last login: Thu Feb 23 17:32:40 2017 from 198.51.100.100
のようにメッセージが表示されます。
このメッセージをカスタマイズする方法を紹介します。
/etc/update-motd.d
というディレクトリにはログイン時に表示されるメッセージを表示するスクリプトが入っています。このディレクトリに入っているスクリプトの数字が若い者から順に実行されます。
自分のほかにログインしているユーザー情報を表示するには /etc/update-motd.d
にスクリプトを追加します。
表示されて欲しい位置にメッセージが来るようにスクリプト名の先頭数字は調整してください。
以下に他のログインユーザー情報を表示するサンプルを載せておきます。
#! /bin/bash num=`who | wc -l` if [ $num -lt 1 ];then echo "There is no users logged other than you" exit fi num=`expr $num + 1` msg=""; for ((i=1; i<$num; i++)); do user=`who -u | sed -n $i'p'` msg=$msg`echo $user | awk '{print $1 " "}'` done echo $num" peoplelogged in ""[ you "$msg"]"
ただし、システム全体に適用される点には気をつけてください。
任意のディレクトリにtmpfs設定する
tmpfsとは
tmpfs設定すると、データが通常HDDに書き込まれるところをメモリー上に書き込まれるようになります。
なぜ必要か
一般的に記憶装置の書き込み回数には上限があります。特にフラッシュメモリーの上限は数千回と言われています。
機器の寿命を減らすとともに、メモリー上に書き込むため、高速に動作するtmpfsを特定のディレクトリに適用する方法を説明します。
/dev/shm
というディレクトリは、最初からtmpfsに設定されているため、どこでも良いという人はここを使うこともできます。
tmpfs設定
まず、 /etc/fstab
を編集します。
/home/admin/tmp
というディレクトリを、32Mbyteのサイズで設定する場合の例
tmpfs /home/admin/tmp tmpfs defaults,size=32m,noatime,mode=1777 0 0
上記の設定を /etc/fstab
に追記します。
次に、再起動します。
最後に、df -h
で確認します。
tmpfs 32M 0 32M 0% /home/admin/tmp
先ほどの設定例の場合、上記のような行が見えると成功です。
最後に
tmpfs設定したファイルは、リブートやシャットダウンで中身が消えてなくなることに注意してください。
/etc/rc.local
に書かれた内容は起動時に実行されるため、 tmpfs
と /etc/rc.local
をうまく使うと、機器に負担の少ないシステム構築が可能です。
rc.local
に書かれたスクリプトは起動時に管理者権限で実行されます。また、編集には管理者権限が必要です。
scpで複数のファイルをまとめて送信する
scpで複数ファイルをまとめてコピーする方法が意外と知られていないようなのでメモします。
scpとは
SCP (Secure Copy Protocol)は、SSHの仕組みを用いてファイルをコピーできるプロトコルです。
使いかたは通常の cp
コマンドと同じように使用できます。
scp [ファイルのコピー元] [コピー先]
ローカルホスト内(同じマシン内)でも利用できますが、基本的にはローカルホストとリモートホスト(別のマシン)のファイルやり取りでよく使われます。
ファイル送信や受信する際ファイルのパーミッション関連でエラーメッセージがでることがあります。
その際は一度/tmp
に置くとうまくいくと思います。
基本的な使いかた
ファイルを送り込む
scp [ユーザー名]@[ホスト名]:[リモートファイルパス] [ローカルファイルパス]
例)
リモートマシンのユーザー名が remoteusername リモートマシンのドメイン名が hostname.remote 送信元ファイルが ~locausername/src_file 送信先ファイルが /tmp/dest_file
の場合
scp ~localusername/src_file remoteusername@hostname.remote:/tmp/dest_file
ファイルを取り込む
scp [ローカルファイルパス] [ユーザー名]@[ホスト名]:[リモートファイルパス]
例)
リモートマシンのユーザー名が remoteusername リモートマシンのドメイン名が hostname.remote 受信元ファイルが /tmp/src_file 受信ファイルが ~localhostname/dest_file
の場合
scp remoteusername@hostname.remote:/tmp/src_file ~localusername/dest_file
複数のファイルをまとめて送信する
ファイルを送り込む
scp { [ローカルファイルパス] [ローカルファイルパス] ... [ローカルファイルパス] } [ユーザー名]@[ホスト名]:[リモートディレクトリ]
例)
リモートマシンのユーザー名が remoteusername リモートマシンのドメイン名が hostname.remote 送信元ファイルが /tmp/src_file1と/tmp/src_file2 送信先ディレクトリが ~remotename/dest_dir
の場合
scp /tmp/src_file1 /tmp/src_file2 remoteusername@hostname.remote:/tmp/dest_dir/
IoTに関わって感じたこと
IoTとは
Internet of Things とは、あらゆるものをインターネットにつなげることで面白いことが出来るのはないかという考えで、現在業界のトレンドと言われています。 あらゆるもののデータを集めることでこれまで見えてこなかった情報が得られるのではと期待されています。
実際にIoTに関わって
コンピュータは気温の変化や水に弱い
コンピュータは本来空調の効いた快適な部屋に設置され使われるものです。現代では、スマートフォンのほとんどが防水・防塵に対応している時代となり、この当たり前のことを忘れがちですがコンピュータは精密機器であり、水に近づけることは危険なことなのです。
コンピュータが動くためには電気が必要
コンピュータを動かすためには電気が必要です。最近のスマートフォンは大容量バッテリーを積んでおり3000mAhを超えることも普通のこととなってきています。そのため、1日心配せずに使えるようになりましたが、IoTは厳しい環境に設置されることもあり、その場合は電池で動かすのですが、充電電池のエネループの最も性能が高いモデルで2500mAhです。これらが意味する事は、スマホ1台の電池より少ない電気で半年から1年程度動かすということです。
何事も物理が大切
物理とは、ケーブルやコンピュータそのもののことを指します。トラブルが起こるほとんどが物理障害であるといわれています。 特にIoTでは、機器が屋外に置かれることもあり、機会にとって過酷な環境です。そのため、物理的なトラブルも起こりやすくなります。 通常のコンンピュータは屋内かつ空調の効いた部屋に置かれることが多いので、気温の変化はそれほど大きくありません。一方で、屋外に設置された場合1日の気温差が10℃以上あることも珍しくありません。夏の昼間と冬の夜明け前は、特に過酷な環境と言えると思います。
このような環境で、安定してシステムを動かすことはとても厳しいことであるように感じました。 一方で、このような困難を乗り越えて安定して動くシステムを構築するこの過程こそIoTの醍醐味なのかもしれないとも感じました。
言葉の一人歩き
ビッグデータ、クラウド、IoTこれらは、キーワードが注目されとりあえずやっておこうみたいな企業が多いように感じています。 目的を持ってやる事が大切だと思うのですが、方法が目的になっていて意味のわからないことになっているように感じています。
私は、この3つの言葉はとても密接な関係がある言葉であると思います。 IoTは、あらゆるものから情報を集めて面白いことをしようという考え方 ビッグデータは、多くの情報から傾向を見つけ出し、その傾向を利用してマーケティングを行ったり、将来の予測を行ったりしようという考え方 クラウドはネットワーク上のコンピュータに情報を置いておいてそこに情報を集めどこからでもアクセスすることができるようにしようという考え方 これらから言えることは、多くの情報を効率良く集め、利用しようということです。 これからは、多くの情報をどのように使うかということが課題となってくるのではないかと考えています。いずれAIがこれらの情報を処理するようになると思っていますが、そのAIプログラムが完成するまでは、人間がすることになるでしょう。
JavaScript [object Object]の中身を確認する
JavaScritptでコードを書いて、動かしてみると自分の意図しない結果だった場合、デバックが必要となります。この際に便利なのが、 console.log
です。
console.log("文字列");
で文字列を、 console.log(変数);
で変数の中身をブラウザの開発者モードのコンソールに表示することができ、動作がどこまで意図した動作をしていて、どこから意図しない動作になっているのかの切り分けに使うことができます。jsonを扱った際に [object Object]
で少し詰まったのでメモします。
変数(jsondata)のデータをコンソールに表示する
console.log
の引数として渡したい変数を一度 JSON.stringify()
に渡すことで表示できます。
使用例は下記の通りです。
console.log(JSON.stringify(jsondata));
jsonというデータ形式をJavaScriptで扱った際に、変数(jsondata)にjsonのデータがきちんと入っているのか確認しようと、console.log(jsondata);
を書き足し、ブラウザから確認すると、 [object Object]
と表示されてしまいます。
これでは、正しくデータが入っているのか入っていないのか確認することができません。
Let'sEncrypt証明書の自動更新を行う
Let's Encryptは、難しい手続きなく証明書を取得できる素晴らしいサービスですが、証明書の有効期限が90日と短いことが特長です。 今回は、この証明書の更新をcronで自動的に行いたいと思います。
cronとは
指定した時刻に処理を自動的に行ってくれる仕組みのことです。
更新方法
WEBサーバーの停止
apachectl stop
WEBサーバーが動いていると、更新することが出来ないので停止させます。
証明書の更新
admin@ubuntu:/home/admin/certbot$ ./letsencrypt-auto renew --force-renew
このコマンドを叩けば強制的に証明書が更新されます。ただし、特定の期間で更新できる上限が設けられているのでテストを行う際は--dry-run
オプションをつけると良いと思います。
WEBサーバーの再開
apachectl start
更新が終わったら、サービスを再開させます。
これらを自動化する
シェルスクリプトを用意する
#!/bin/bash #apacheの停止 apachectl stop cd /home/admin/certbot # --dry-runオプションをつければ、証明書は更新されずに動作のみ確認することができる ./letsencrypt-auto renew --force-renew #apache再開 apachectl start
このスクリプトを /root/update.sh
として保存します。
cronで定期的に実行する
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO="" HOME=/ 43 4 1 * * root /root/update.sh
/etc/cron.d/update-everymonth
として保存します。(パスがあっていれば名前はなんでも良いです。)
update-everymonth
は毎月1日の04:43に/root/update.sh
をroot権限で実行するという内容が書かれています。
Let's encrypt で証明書取得
Windowsマシンがpingに応答するようにする
pingとは
相手のコンピュータにつながっているのか確認するために使用されることが多く、障害が発生時には問題の切り分けを行うために使われます。 echo要求とecho応答からなり、echo要求を送られたコンピュータは通常echo応答を返す。しかし、Windowsの初期設定では、echo要求を受け付けません。
echo要求に応答するようにする
セキュリティが強化されたWindowsファイアウォール設定を開きます。
次に受信の規則をクリックします。
ファイルとプリンタの共有(エコー要求-ICMPv4受信)やファイルとプリンタの共有(エコー要求-ICMPv6受信)を右クリックから有効化します。 プロファイルのプライベートやパブリックというのは、初めてのネットワークにつないだ時に設定するパラメータです。 例では、すべて有効化していますが、必要に応じて有効化するネットワークを設定してください。
次に、先ほど有効化した項目をダブルクリックし、プロパティを開きます。 メニューの中からスコープを選択します。 リモートIPアドレスのラジオボタンを任意のIPアドレスに切り替えてください。 これにより、任意の相手からのecho要求を返すようになります。
有効化した項目すべてで切り替え作業が必要になります。
任意の相手からのecho要求に応答したくない場合は、これらのIPアドレスを選択し、適切な設定を行ってください。