コンテナ内の/etc/hostsに定義を追加したかったので、extra_hostsを定義して
docker-compose restart
や
docker-compose stop
docker-compose start
としてもうまくいかない。
切り分けするために別のコンテナ定義を作成して
docker-compose build
としても
(コンテナ名) uses an image, skipping
となってイメージをpullしてくれない。
原因は、
docker-compose up -d
としていなかったから。
docker-compose `up` とか `build` とか `start` とかの違いを理解できていなかったのでまとめてみた。 で紹介されているようにstartオプションではイメージの更新が行われない。
buildオプションはイメージがなければpullしてくれそうな気がするが、もう少し調べてみることにしたい。
依存ライブラリをインストールする方法
yumでインストールする場合には依存関係を解決してくれるが、rpmでインストールしなければならないパッケージの場合には、依存関係によるエラーに見舞われる場合がある。
その場合に対象のライブラリを探すのはかなり一苦労だが、
yum search **/(ライブラリ名)
でライブラリを含んでいるパッケージを特定することが出来る。
RPM依存ライブラリ不足の問題はYUMに聞こう!によれば、yum whatprovidesを利用することもできるようだ。
Windows10でファイルサーバにアクセスできない
Windows VistaがプレインストールされていたDELL Vostro 1200にて、OSのサポート切れの問題を解決すべく、Windows10のライセンスキーを入手した。
Yahooショッピングでライセンスキーのみを入手できるルートがあり、どのような仕組みで安く販売できるのかがよくわからないが、アクティベートできたので結果オーライとしたい。
VistaからWindows10にはアップグレードできないため、再インストールになるのだがパーティションは初期化されない(MBRは初期化される)ので、データを別のパーティションやディスクに移行しないでもそのままインストールできる。
ただ、インストールした後はファイルサーバ(NAS/BUFFALO リンクステーション ネットワーク対応HDD 2TB)にアクセスできなくなって困った。
原因は、ファイルサーバ側でSMB2が無効になっていた(デフォルトでは無効になっているよう
だ)ことと、OS側でSMB1.0のファイル共有サポートが無効になっているためだった。
ファイルサーバでSMB2を有効にする方法は下記を参考にしてください。
WindowsUpdate後、NAS(LinkStation、TeraStation)や無線LAN親機に接続した簡易NASの共有フォルダーにアクセスできません 対策1:NASの設定変更(利用している商品のプルダウンを選択してください)
OS側でSMB1.0をサポートする方法は下記を参考にして下さい。
共有フォルダにアクセス出来ない場合の対処方法 ② Windowsの機能のSMB設定を確認する
IE11でダウンロードが無応答になる
ダウンロードの表示(Ctrl+J)→左下のオプション→ダウンロードオプションにて既定のダウンロードフォルダーの設定を実在するフォルダに変更する必要がある。
(実在しないフォルダに変更することはできないが、フォルダを選択した後にフォルダの書き込み権限が削除された場合などに発生しうる)
Internet Explorerのダウンロードの仕組みはどうやら下記のようである。
Content-Typeがtext/html等ブラウザで解釈できる値ではない場合
↓
SmartScreenに問合せ
↓
ダイアログを表示し、保存、名前を付けて保存が選択された場合
↓
既定のダウンロードフォルダー にダウンロード
(このフォルダが実在しない場合には、このタイミングで無応答になる)
↓
リアルタイムスキャンを実行
↓
名前を付けて保存が選択されている場合には保存先ダイアログを表示
Raspberry PiでChromeが起動しない
apt-get upgrade コマンドでパッケージを最新にした後か、Scratch2をインストールしたためかはわからないが、
Chromeをダブルクリックで起動しようとしても起動しない。コンソールから
chromium-browser
を実行したところ
/usr/lib/chromium-browser/chromium-browser: symbol lookup error: /usr/lib/chromium-browser/chromium-browser: undefined symbol: mmal_vc_init_fd
のエラーメッセージが表示されて起動しない。
RASPBERRY PI のファームウェアのアップデートに記載がある方法で、rpi-updateを実行して、再起動したら実行できるようになった。
ただ、今度はScratch2が削除されてしまったので、あらためて apt-get install scratch2 でScratch2をインストールしたところ、Scratch2もChromeも起動するようになった。
参考)
Chromium on Raspberry Pi(英語サイトです)
Microsoft Visual C++ 2005 Redistributableでエラー
Windows 10におんどとりease for Windowsをインストールすると発生する。
インストール先に英数文字以外の 2 バイト文字が含まれていると発生するらしい。(ASCIIコードのみになっている必要があるようだ)
Microsoft Visual C++ 2005 Redistributable
Command line option syntax error. Type Command /? for Help
参考 KB556085
Windows環境下でのマルチプロセスにてファイル書き込みを排他処理する
Adobe Creative Suite2が無償で使用できるようになっていることに気づいた話
Adobe Creative Suite2は無償で利用できるようになっていたことに今更気づいた。
サポートもないし、新しいOSでの動作保証もされていないが、Adobe IDの登録さえすれば、PDF加工ソフト Acrobat Pro、デザインソフト Photoshop、illustratorやDTPソフト InDesign、動画編集ソフト Premiere等が利用できるのは素晴らしい。
ダウンロードURL
Rasberry Pi 2で定期的に温湿度センサーの情報を送信する
/etc/crontabと/etc/cron.d設定ファイルの書き方を参考にプログラムの実行をスケジュール化する。
/etc/cron.d/send_temp
と登録し、下記を保存する。
#8~17時を除いた6~23時に毎時0時に送信する
0 6-7,18-23 * * * pi /home/pi/iot_source/send_temp.py 12> /home/pi/debug.txt
#土日は8~17時も毎時0時に送信する
0 8-17 * * 0,6 pi /home/pi/iot_source/send_temp.py 12> /home/pi/debug.txt
#5分ごとにセンサデータを収集する
*/5 * * * * pi /home/pi/iot_source/get_temp.py 12> /dev/null
Rasberry Pi 2で温湿度センサーの情報をZabbixサーバに送信する
Rasberry Pi 2で収集した情報をZabbixサーバに送信するためには大きくは2つの方法がある。
・Zabbixエージェントをインストールしてデータを送信(サーバから見ると収集)する方法(パッシブチェックとアクティブチェックというデータの収集のトリガーが異なる2つの方式がある。詳しくはこちら)
・zabbix_senderコマンドを利用してデータをサーバに送信する方法
前者の方式は、エージェントを利用するので、サービスを常に起動しておかなければならないということと、ポートを待ち受けしないといけないことから、IoTディバイスとして節電して長く使いたい要求と、セキュリティを担保したい(エージェントの脆弱性によって問題が起こり得るか、DoS攻撃の対象になりうる)ことから後者を採用することにした。
ただ、zabbix_senderはRasberry Pi2を動かしているRaspianOSではちょっと導入が面倒。
Zabbix Server側の設定はこちらを参考にしてみるとよい。
これから始めるZabbix Sender(2) Raspberry Pi の温度データを送るには?
作成したソースはこんな感じ
配列に一度格納してまとめて1回のコマンドで実行することで通信回数を減らしてみた。
#!/usr/bin/env python
import RPi.GPIO as GPIO
import dht11
import time
import subprocess
from datetime import datetime
now=time.time()
Zabbix_Server="(ZabbixサーバのIPアドレス)"
Host_Name="(Zabbixサーバに登録したホスト名)"
#Zabbixサーバに下記アイテムを2つ登録している必要がある
Temp_KeyName="sender_temperature"
Humi_KeyName="sender_humidity"
#define GPIO 14 as DHT11 data pin
Temp_sensor=14
try:
GPIO.setmode(GPIO.BCM)
instance = dht11.DHT11(pin = Temp_sensor)
while not 'result' in locals() or result.humidity==0:
result = instance.read()
if result.is_valid():
print("Tem:"+str(result.temperature)+" C Hum:"+str(result.humidity)+"%")
send_data = []
send_data.append(Host_Name + " " + Temp_KeyName + " " + str(int(now)) + " " + str(result.temperature))
send_data.append(Host_Name + " " + Humi_KeyName + " " + str(int(now)) + " " + str(result.humidity))
check = subprocess.check_call('echo "' + "\n".join(send_data) + '" |
zabbix_sender -z ' + Zabbix_Server + " -T -i -", shell=True)
except KeyboardInterrupt:
pass
finally:
print check