2019年2月26日火曜日

MariaDB復活

前回のブログの内容だけど、
問題は、壊れたSDカードがDBサーバだった言う事

これは大問題で、今更一からデータを入れるかというと、、、
固まってしまう。

もう、、、ブルーブルーブルー
いや、暗黒、暗黒、暗黒

でも、普及で来たのでメモとして記録

最近忘れやすいんだなぁ

(1) 起動しなくなったRaspberry PiのSDカードから必要なデータを抜き出す

これは大事な作業で、結論から言うとVMware を使った。
VMwareの良さに気が付いたので、worksation proを購入した。

SDカードをVMwareのハードディスクとして認識させて中のデータを救助する。これは、MacでもFUSEで同じ事ができる。
ただし、Macはread onlyなので、fsckなど使って回復処置はできない。

VMwareでマウントしたディスクに対してfsckも実行したけど機動ディスクとしての再起動はできなかった。

救出した部分は、DBデータ、開発環境とWebサーバ環境
/var/lib/sql
/home/pi
/var/www

失敗しののは、/etc/mysqlを保存しなかった事。
ただ、開発用のマシンに、同じ環境が構築してあったのでそれを参照すれば大丈夫

(2) 素人は怖い

まぁ。私はmysqlに関しては素人なわけで、、、
新しいSDカードにOSや、mysql-server等々とインストール。
/var/lib/mysqlをリネームして、上記で救出した/var/lib/mysqlをコピー。

で、、、
で、、、

rootでログイン。前のSDカードのパスワードを入れる
お!login 出来た。



感動したなぁ。
他の機能も実行、webからの検索もOK
あ~、春の陽射しが気持ちい~

Peace!!

2019年2月23日土曜日

Raspberry Pi 3B+ SDカード 修復

Raspberry Piを2013年の7月から使っているけど
始めて、SDカードの問題でシステムが立ち上がらなくなった。

原因は、電源のブチ切れ

ただ、対象のマシンはMySQLを運用していたので、DBのデータを可能な限り復旧させたかった。

それで、いろいろ調べて結局VMwareを使って修復作業
MacでFUSE使ったけど、一部のファイルの救出はできたけど、read onlyの為にSDカードの復旧はできず。
DBのフォルダーは、Xが付いたままでした。その他にも試したけど ZVR Xも対応できなかった。
で、一番面倒くさそうなVMwareを使う事に。

昔のVMwareしか知らないので、抵抗感もあったけど、、、
ビックリVMware凄いじゃん

最初は無料版をインストールしたけど、Proのライセンスを購
これは、Raspberry Piが無くてもWindowsマシンで開発ができるメリットが大きいと判断した。

1.VMwareのインストール

これは、ダウンロードして、インストールして終わり
詳しい事は、他の方のブログを参照

2.VMwareに仮想OSインストールと設定

Raspberry Piとの関係を考えて、Debianをインストール
Debianのサイトから、isoイメージをダウンロードし、このイメージを使って仮想マシンのセットアップ

fsck -fn /dev/sdb2 実行中

3.修復

rootでログイン
対象のSDカードをPC(Let's note)のUSBにBuffaloのアダプター経由で接続。MCR-A27/U2という大昔のモノですが、これで接続する事によりDebianが自動的に認識をしてくれた。




df で、マウント先とデバイスを確認
/dev/sdb2でした。ちなみに/dev/sdb1は、/boot

fsck -fn /dev/sdb2
エラーのオンパレード。too many なんてメッセージ出てくるし (泣)

意を決して、、、
fsck -fy /dev/sdb2

あれ?
エラー....fsckは、e2fsckを呼びだしているから

e2fsck -p /dev/sdb2
マウントされているからダメ!

umount /dev/sdb2

e2fsck -p /dev/sdb2
なんか、すぐ終わり、不安になり

fsck -fn /dev/sdb2
出るわ出るわエラー

fscl -fy /dev/sdb2
54GBもあるから、、、時間がかかる。でも進んでいる。

もう一度、-fnオプションで、、、だいぶ減ったけどエラー
で-、-fyオプションで、、、

(4)結果

ダメでした。
成果は、VMwareがとっても便利な事が解った事(笑)

Peace!!



2019年2月18日月曜日

Raspberry Pi と CAN接続

僕は、複数のRaspberry Piを使ってロボットを開発している。

問題になるのは、Raspberry Piの同期で、、、

今までは、GPIOを使って同期をとっていたけど

これからは、CAN接続で同期をとる

そんな事をしなくても、Wifiでやればいいじゃんと思う人もいると思うけど

でも、、、その質問には答えない

こんな感じで

Peace!!



2019年2月10日日曜日

lighttpd 最新版をbuild , 環境設定する時の手順

lighttpd は、ロボットのHTTP通信で使っている
なんといっても軽量で早い

これはでは、一度 aptでインストールしてから、上書きしていたけど、
最初から、最新版のインストールしちゃう手順。

まぁ、シェル化すればいいんだけど、それは今度



手順は、下に記述しました。

Peace!!

#-----------------------------------------------------------
#step1 install
#-----------------------------------------------------------
mkdir tmp
cd tmp
wget https://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.53.tar.gz
tar xvf lighttpd-1.4.53.tar.gz
cd  lighttpd-1.4.53
sudo apt-get -y install libpcre3-dev bzip2 libbz2-dev
./configure
make
sudo make install
sudo ldconfig

#-----------------------------------------------------------
# step2 systemd
#-----------------------------------------------------------
which lighttpd
sudo cp doc/systemd/lighttpd.service /lib/systemd/system
sudo vi /lib/systemd/system/lighttpd.service
# change /usr/sbin/lighttpd -> /usr/local/sbin/lighttpd

sudo systemctl enable lighttpd.service

#-----------------------------------------------------------
# step3 /etc/lighttpd
#-----------------------------------------------------------
sudo mkdir /etc/lighttpd
sudo cp doc/config/lighttpd.conf /etc/lighttpd
sudo cp doc/config/modules.conf /etc/lighttpd
sudo cp -r doc/config/conf.d /etc/lighttpd

cd /etc/lighttpd
sudo vi lighttpd.conf
var.server_root = "/var/www"
#server.use-ipv6 = "enable"
server.username  = "www-data"
server.groupname = "www-data"
#server.document-root = server_root + "/htdocs"
server.document-root = server_root

sudo vi modules.conf
 "mod_alias"
 include "conf.d/cgi.conf"

sudo vi conf.d/cgi.conf
#######################################################################
##
##  CGI modules
## ---------------
##
## See https://redmine.lighttpd.net/projects/lighttpd/wiki/docs_modcgi
##
server.modules += ( "mod_cgi" )

##
## Plain old CGI handling
##
## For PHP don't forget to set cgi.fix_pathinfo = 1 in the php.ini.
##
#cgi.assign                 = ( ".pl"  => "/usr/bin/perl",
#                               ".cgi" => "/usr/bin/perl",
#                               ".rb"  => "/usr/bin/ruby",
#                               ".erb" => "/usr/bin/eruby",
#                               ".py"  => "/usr/bin/python" )
#
##
## to get the old cgi-bin behavior of apache
##
## Note: make sure that mod_alias is loaded if you uncomment the
##       next line. (see modules.conf)
##
#alias.url += ( "/cgi-bin" => server_root + "/cgi-bin" )
alias.url += ( "/api" => server_root + "/api" )
$HTTP["url"] =~ "^/api" {
   cgi.assign = ( "" => "" )
}

##
#######################################################################

#-----------------------------------------------------------
# step4 /var/www /var/log/lighttpd /var/run/lighttpd.pid
#-----------------------------------------------------------
sudo mkdir /var/www
sudo mkdir /var/www/api
cd /var/www
sudo vi index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>lighttpd alive</title>
</head>
<body>
<p>lighttpd server success/p>
</body>
</html>

sudo chown -R www-data:www-data /var/www

sudo mkdir /var/log/lighttpd
sudo chown -R www-data:www-data /var/log/lighttpd

sudo touch /var/run/lighttpd.pid
sudo chown www-data:www-data /var/run/lighttpd.pid

sudo systemctl start lighttpd

#-----------------------------------------------------------
# step5 cgi
#-----------------------------------------------------------
cd /var/www/api
sudo vi test.c

#include <stdio.h>

void main(){
        printf("Content-type: text/plain\n\n");
        printf("Hello, World!");
        return;
}

sudo gcc test.c -o test


//EOF