【Linux】バックアップしたLinuxディスクイメージをWindowsにマウント

Linuxのディスクを丸ごとバックアップするにはddコマンドがあるわけですが、例えば、ラズパイはSDカードで運用するため、WindowsでSDカードリーダでバックアップすることができます。

使うソフトはDD for Windowsです。

本ソフトはWindows10で利用できますが、使用する場合は管理者として実行しないとSDカードが見れないので注意です。

 

------------------------------------

 ※2018/12/17追記

以下、OSFMountでいったんマウントすることを記載していますが、後方で書いた追記によって手順的には不要になります。

 ※追記終わり

 

DD for Windowsでバックアップしたイメージはddiファイルと呼ばれるものになりますが、これをWindowsにてマウントすることで、中の情報を参照することができます。

まず必要になるのがOSFMountです。

これをインストールし、Image fileでDD for Windowsで吸い出したddiファイルを指定します。

正常にマウントできれば、ダイアログで「フォーマットしますか?」とできますが、これはキャンセル。

この状態ではエクスプローラからは中身を見ることはできません。

 

そのため、DiskInternals Linux Readerをインストールします。

インストール後に起動するとWindowsエクスプローラのようにハードディスクを選択できるため、該当のLinux仮想ディスクにアクセスできるようになります。

 

 

※2018/12/17追記

コメントいただいたので追記します。

OSFMountでマウント後、Linux Readerを実行するとマウントしたイメージがドライブとして見れていたのですが、最近のバージョンでは見えないようです。

ただし、Linux Reader自身でマウントができるようなったため(元からできてたかも?ちょっと覚えてませんが)、イメージファイルの中身を見ることができるようです。

 

メニューから「Drives」->「Mount Image」

f:id:engetu21:20181217212242j:plain

「Raw Disk Images」を選択してNext。

イメージファイルの選択ダイアログが表示されるため、マウントしたいイメージを選択します。

昔ddコマンドでとっておいたLIVAのバックアップイメージ(/配下)では以下のように表示されます。

f:id:engetu21:20181217212934j:plain

上記はLinux上でDDコマンドを作ったimgファイルですが、DD for Windowsで作成したファイルも基本的にRawDiskImageになるはず(拡張子が違うだけのはず)なので、イメージファイル選択時に「All Files」を指定してddiファイルを開けば、おそらくマウントできるはずです(未検証ですが)。

※追記終わり

【CentOS7.2】【ZABBIX3.2.0】zabbix-agentdが起動しない

さすがに更新さぼりすぎだろということで更新。

 

仕事でAzureを触る機会があり、かつZABBIX導入を検討しなければいけないということで弄っていたのですが、zabbix-agentdが起動しないという問題があったので、メモとして残しておきます。

しかしこれいいなぁ。自宅に構築しよう。

 

1.ZABBIXとは?

・・・を記載すると長くなるのでググってください。まぁ、Web‐UIでシステムリソースを監視できるOSSです。

 

2.で、何が起こったの?

ZABBIXというのは、管理サーバにインストールするzabbix-serverと管理(監視)される側にインストールするzabbix-agentdがあります。

管理サーバ自身も監視したいため、管理サーバには基本両方入れます。

↓こちらがとても分かりやすかったです!

今回インストールしたのは3.2.0ですが、上記ブログのバージョンを読みかえれば基本的にはOK。

さて、ここでおそらく躓きやすいのは、ZABBIXサーバは動いて、ブラウザでもアクセスできた、でもなぜか、「Zabbixサーバーの起動」の状態が「いいえ」になっている。という問題があります(これ自体は今回の主題ではない)。

対策法も上記ブログに記載してあるため、おそらくこれも問題ないかと思います。

要はSELinuxの設定をちゃんとしなければいけない。

 

問題はzabbix-agentdが起動しないということ。これもSELinuxが原因だった。

 

3.何故か情報が見つからない

zabbix-agentdを起動するようにするには以下のようにコマンド打ちます。が、エラーも出ました。

# sudo systemcrl service zabbix-agent.service

Job for zabbix-agent.service failed. See 'systemctl status zabbix-agent.service' and 'journalctl -xn' for details.

 ※Azure上のCentOSはroot権限のものはすべてsudoで動かす

 

/var/log/zabbix/zabbix_agentd.logを見ると、どうも権限がなくてPIDファイルが/var/run/zabbixディレクトリに作成できないというエラーでした。

これに関していろいろ調べましたが、分かったことは、SELinuxをPermissive(アクセス許可)にすると動き、Enforcing(アクセス拒否)と動かないということ。また、zabbix-serverに関しての対応は結構見つかるのに、zabbix-agentdについては何故か情報が見つからず(いくつか関連しそうなのはあるが、解決には結びつかず)。

 

記載によっては # setenforce 0でPermissiveにすればよいと書いてあったり、SELinuxのコンフィグファイルを変更して止めればいいとか書いてあったりでいやそれはさすがに(セキュリティ的に)ダメだろ・・・と。

 

4.で、どうなった

で、対策見つかりました。

まぁ、最初に取り上げた方のブログなんですが。

SELinuxの設定」のところに記載されている内容がまさしくドンピシャで、同じ方法をzabbix-agentdでも行えばよい。

 

# sudo grep zabbix_agent /var/log/audit/audit.log | audit2allow
#=============zabbix_agent_t==============
allow zabbix_agent_t self:process setrlimit;
#

という感じで、grepに引っかかるはずなので、これをこう。

# sudo grep zabbix_agent /var/log/audit/audit.log | audit2allow -M zabbix-limit
******************** IMPORTANT ***********************
To make this policy package active, execute:semodule -i zabbix-limit.pp

zabbix-limit.ppファイルが実行したディレクトリに作成されているはずなので、メッセージの通りに実行する。

# sudo semodule -i zabbix-limit.pp

SELinuxのポリシーに追加されたはずなので、zabbbix-agentdを実行するだけ!

# sudo systemcrl service zabbix-agent.service 

 ※実行成功の時は特に何も出ない。# sudo systemcrl status zabbix-agent.serviceで確認!

【Ubuntu】【16.04】他のUbuntuサーバ(Sambaディレクトリ)のマウント

概要

このブログで検索したら書いてなかったので、備忘録的な感じで。

 

1.同一ネットワーク内のSambaディレクトリをマウントする

事前にマウント用のディレクトリを作ります。

$ sudo mkdir /mnt/hdd

 hddのところは何でもいい。

 

また、cifs-utilsをインストールします。これが無いとネットワーク越しのマウントが動かない

$ sudo apt-get install cifs-utils

 

以下のコマンドでマウントする。ローカルIPを設定していると思いますが、宛先にはそれを指定。

 $ sudo mount.cifs //192.168.11.XX/share /mnt/hdd/ -o username=XXXXX

 パスワードを求められるので、指定したusernameに紐付いているパスワードを設定。


アンマウントは以下のように。

$ sudo umount /mnt/hdd/

2.Linux起動時に自動マウント

いちいちマウントするのは面倒なので、自動マウントするようにします。 /etc/fstabに以下の内容を追加。

$ sudo vi /etc/fstab

//192.168.11.xxx/share /mnt/hdd/ cifs username=XXXX,password=YYYYY,uid=1000,gid=1000 0 0

なお、/etc/fstabに登録後であれば、sudo mount -aのコマンドでfstabの設定を読み込んでマウントができます。

【ESP-WROOM-02】【電子工作】WiFi経由の遠隔操作でサーボモータを動かす

連休中に挑戦してみてやっと出来ました。

1.準備するもの

  • ↓に書いてあるもの

2.ESP-WROOM-02で動かすWebサーバソース

Webサーバを動かすと同時に、http://ローカルIP/servoにアクセスされた時にサーボモータを動かすようにします。

gist9d2a9b6057097b4d0ce0

 3.電圧の調整

配線は「1.準備するもの」で記載した過去記事のものがベースですが、今回は電池駆動をさせます。単3電池4本で大体5.3Vですが、ESP-WROOM-02の電源電圧は3.0-3.6Vなので、5.3Vは過剰になってしまいます。

で、登場するのが三端子レギュレーターです。これで5.3V→3.3Vに降圧することで、必要な電圧を確保することができます。

サーボモータは4.8Vで動くようですが、5.3Vでも問題なさそうなので電圧調整はなし。

そんなわけで配線は以下の様な感じ。(暇があれば配線図作ります・・・)

f:id:engetu21:20151123173601j:plain

 

f:id:engetu21:20151123173616j:plain

4.実際にWiFi経由でHTTPリクエストをしてみる

ローカルLANにつながっているPCのブラウザからHTTPアクセスします。

1アクセスで90度まで可動→戻るといった感じ。

f:id:engetu21:20151123182622j:plain

 

 

【Raspberry Pi】【電子工作】PIRモーションセンサで照明の点灯/消灯を制御

ラズパイとPIRモーションセンサを使って、照明の点灯/消灯を制御します。

概要図は以下の様な感じ。

f:id:engetu21:20151122184514j:plain

サーボモータによる角度変更については、以下にまとめました。

engetu21.hatenablog.com

1.必要なもの

人感センサに関しては、こちらを参照。

また、赤外線モジュールは以下の記事で取り上げたirMagicianを使います。

2.ラズパイで動かす人感センサとHTTP送信を組み合わせたソース

人感センサでの検知をトリガにしてHTTPを実現するためには、以下の様な形でのソースコードにしました。

基本的には30秒間誰もいなければ消灯、5秒間のうち誰か居れば点灯をします。

PIR_mothion_sensor_and_HTTP.py

 

 

3.サーバで動かすWebサーバ設定とソース

サーバ側でHTTPリクエストを受信できるようにWebサーバを動かす必要があるのですが、Apacheを入れるのも何だな・・・と思い、検索で見つけた「Bottle」(http://bottlepy.org/docs/dev/index.html)を使うことにしました。これはPythonで作られたもので、1ファイルで動作するという超お手軽なWebサーバフレームワークです。

Bottleの使い方はこちらを参照。

HTTP受信用に以下のソースをbottle.pyと同じディレクトリ配下に用意して実行します(実行は裏で動けるようにscreenコマンドなどを使う)。

$ screen

$ python  HttpReceive_Syoumei.py

 

ソースが正常に動けば、照明の自動点灯/消灯が実現できます。

【Raspberry Pi】IPアドレスの設定方法(OS新バージョン)

Raspbianの旧バージョンでは、/etc/network/interfacesを弄ることで固定IPアドレス設定をできたのですが、新バージョンではやり方が異なるのでメモ書き。

 

1.固定IPアドレスの設定

新バージョンでは固定IPアドレスは/etc/dhcpcd.confを変更することで実現します。

$ sudo vi /etc/dhcpcd.conf

 

interface eth0
static ip_address=192.168.XXX.XXX/24
static routers=192.168.XXX.XXX
static domain_name_servers=XXX.XXX.XXX.XXX

指定するインタフェースはifconfigコマンドで予め調べておくこと(有線は基本的にeth0と思いますが)。

書き換えを完了したら、dhcpcdの設定を更新します。

$ sudo service dhcpcd reload

 

2.設定反映の確認

ifconfigコマンドで設定が反映されているか確認します。

$ ifconfig

eth0 Link encap:イーサネット ハードウェアアドレス b8:27:eb:61:cf:69
inetアドレス:192.168.XXX.XXX ブロードキャスト:192.168.XXX.XXX マスク:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 メトリック:1
RXパケット:14519 エラー:0 損失:6 オーバラン:0 フレーム:0
TXパケット:5851 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:1000
RXバイト:2051370 (1.9 MiB) TXバイト:426619 (416.6 KiB)

inetアドレス、ブロードキャスト、マスクに設定した内容が反映されていればOK。

【ESP-WROOM-02】【電子工作】Webサーバとして動作させる

ESP-WROOM-02をWebサーバとして動作させます。

 1.準備するもの

以下と一緒。

2.HTTPサーバとしての設定(ソース変更)

HTTPサーバとして動作させる場合は、ArduinoIDEでスケッチ例を利用するのが一番手っ取り早い。

以下のサイトのとおりに準備しておけば、スケッチ例にWebServerのソース例が出てくる。

技適済み格安高性能Wi-FiモジュールESP8266をArduinoIDEを使ってIoT開発する為の環境準備を10分でやる方法 - Qiita

ファイル->スケッチの例->ESP8266WebServer->AdvancedWebServer

f:id:engetu21:20151121225258j:plain

 

SSID、PASSWORDは各環境に合わせて変更。

また、固定ローカルIPを使いたいので、以下の設定を追加する。

#include <ESP8266WiFi.h>

(略)

const char *ssid = "**********";
const char *password = "**********";

//////////////// ip-address ////////////////
IPAddress ip(192, 168, XXX, XXX);

IPAddress gateway(192, 168, XXX, XXX);

IPAddress subnet(255, 255, 255, 0);
//////////////////////////////////////////

(略)

void setup ( void ) {

 WiFi.config( ip, gateway, subnet );

IPアドレスの設定はWiFi.configを使う。

注意すべきは、ArduinoWiFiシールドを使った場合と設定方法が少し違うということ。

WiFiシールドを使った場合、#include <WiFi.h>ですが、ESP-WROOM-02では#include <ESP8266WiFi.h>となる。

 

WiFi.hのソースコード例はArduino - WiFiConfigの通りで、Syntaxの記載箇所の通り、

WiFi.config(ip, dns, gateway, subnet);

とすることでIPアドレスの設定は可能。

しかし、ESP8266WiFi.hの場合は、esp8266-Arduino/ESP8266WiFi.h at master · sandeepmistry/esp8266-Arduino · GitHubで記載されている通り、

config(IPAddress local_ip, IPAddress gateway, IPAddress subnet);

の形で設定してあげないといけない。

※引数に注意。

 

3.HTTPサーバとして動作させる

そんなわけで、固定ローカルIPも設定したうえでコンパイルをし、書き込みモード(UART Download Mode)でスケッチ書き込みをする。

その後、実行モード(Flash Boot Mode)に変更してアクセスしてみる。サーバとして正常に動作していればシリアルモニタには以下のように表示される。

f:id:engetu21:20151121233108j:plain

 

ブラウザで表示すると以下の様に表示される。

f:id:engetu21:20151121235420j:plain