2021年4月11日日曜日

MicroPython ESP32 Memo 〜Build MicroPython〜

 ■概要

MicroPythonのbinaryファイルダウンロードしてを書き込んだら動いた!
ので、今度はMicroPythonをビルドしたい!

ので、MicroPythonをgitから持ってきて、ビルドして、binaryファイル作って、ボードで動かすまで。

■環境

  • PC : Mac OS Catalina
  • Board : ESP32-WROOM-32D 開発ボード ESP32-DevKitC-32

■手順

基本的に、MicroPythonの公式の通り。

まず、Gitからソースコードを取得する。
Git Hubのアカウントを持ってなかったら、作成しておく必要あり。
PCにgitをインストールしておく必要あり。
  1. 公式のmicropythonリポジトリをforkする。
    1. Git Hubにログイン(ブラウザから)
    2. ログインしたら、Search or Jump to... で「micropython/micropython」を検索して、公式のMicroPythonリポジトリにアクセス。
    3. 「fork」ボタンを押して、自分のリポジトリに公式のMicroPythonリポジトリをforkする。
    4. 自分のアカウントにmicropythonリポジトリができていることを確認する。
      自分のmicropythonリポジトリURL :
      「https://github.com/<your-user-name>/micropython」
  2.  ローカルにプロジェクト(ソースコード etc.)をcloneする。
    1. terminalでmicropythonのソースコードを保存するところに移動する。
      「cd project」(projectフォルダに入れる場合)
    2. 自分のmicropythonリポジトリからプロジェクトをcloneする。
      「git clone https://github.com/<your-user-name>/micropython」
  3. 公式のmicropythonリポジトリを自分のmicropythonリポジトリの上流ブランチに設定する
    (公式のMicroPythonリポジトリで更新された内容を、自分のmicropythonリポジトリが追従できるようにする設定)
    (※ 上流ブランチと追跡ブランチの説明)
    1. terminalで、cloneしたmicropythonフォルダに移動
      「cd micropython」
    2. 公式のMicroPythonリポジトリを自分のmicropythonリポジトリの上流ブランチに設定する
      「git remote add upstream https://github.com/micropython/micropython」
      (※ 多分、upstream xxxx で、xxxxが上流ブランチであることを教えてる?)
      (※ この設定で、「git pull」により公式のMicroPythonリポジトリの変更を反映できるようになる?気がする。ちなみに、pullは、fetchしてmergeするのと同じことらしい(fetchとpullの違い)。)
    3. 上流ブランチを設定できたか確認。
      「git remote -v」
      以下のような表示が出るはず。
      「origin       https://github.com/<your-user-name>/micropython (fetch)
      origin       https://github.com/<your-user-name>/micropython (push)
      upstream     https://github.com/micropython/micropython (fetch)
      upstream     https://github.com/micropython/micropython (push)」
  4. 作業用branchを作成する。
    1. terminalで、cloneしたmicropythonフォルダに移動
    2. 作業用branchを作成して、作業用branchに切り替える。
      (develop-branch というbranchを作成して、master→develop-branch に切り替え)
      「git checkout -b develop-branch」
次に、クロスコンパイルに必要なソフトウェアパッケージをインストールする。
公式のMicro Python on MacOSを参考にした。
  1. Xcodeが入ってなければ入れる。(clang コンパイラを入れるため)
  2. 必要なソフトウェアパッケージをインストール。
    「brew install libffi」
    「brew install pkgconfig」
    Pythonをインストールしてなければ、Python3.3以上をインストール。
    Gitもインストールしてなければインストール。
次に、クロスコンパイラをビルドする。
  1. terminalで、cloneしたmicropythonフォルダに移動。
    (すでにいる気がするなぁ)
    「cd micropython」
  2. クロスコンパイラをビルドする。
    「export PKG_CONFIG_PATH=/usr/local/Cellar/libffi/3.2.1/lib/pkgconfig/」
    「make -C mpy-cross」
    (※ home brewでlibffiを入れたので、export PKG_CONFIG・・・が必要。)
  3. クロスコンパイラのビルドが成功したら、
    micropython/mpy-crossフォルダの中に、
    mpy-cross.map, build, mpy-cross ができてる。
そしてついに、micropythonをビルドする!
が、まずは手始めに、unix用をビルドする。
Mac上で動かすことが可能なmicropythonが出来上がるはず。
  1. 「cd micropython/ports/unix」
  2. 「make axtls」
    (※ axtlsは、少量のメモリフットプリントの高度な設定インターフェイスで組み込みデバイス向けに設計されたTLSv1 SSLライブラリ。)
    結構時間かかる。
  3. micropython (unix用)をビルドする
    「make」
    結構時間かかる。
  4. ビルドが完了すると、micropython/ports/unix 以下に、build-standard, micropython フォルダなどが追加されている。
  5. micropython (unix用)を動かす。
    「./micropython」
    実行すると、以下のように、>>> が表示されて、おなじみのpythonっぽい表示が!

    「unix % ./micropython 

     MicroPython v1.14-152-g6f06dcaee on 2021-04-12; darwin version

     Use Ctrl-D to exit, Ctrl-E for paste mode

     >>>        」


ほんとについに!micropython ESP32用をビルドする。
が、今までのはunix用の環境設定+ビルド方法だったみたい。
ESP32用をビルドするためには、ESP32に合わせた環境設定からはじめないといけない。
公式のmicropython ESP32のREADMEにしたがって進める。

というわけで、micropython ESP32用の環境設定を行う。
まずは、esp32の開発環境のEspressif IDF version 4 をインストールする。
Espressif IDFを略して ESP-IDF と言ってるっぽい?
ESP-IDF のプログラミングガイドに、MacOSの場合のインストールの方法が書いてあったので、これ参考にする。micropython ESP32のREADMEよりも詳しく書かれてるし。
(pip, python, homebrew はインストールずみとする。)
  1. 事前準備として必要なパッケージをインストール
    「brew install cmake ninja dfu-util」
    「brew install ccache」
  2. ESP-IDFをclone
    (※ micropythonをcloneしたディレクトリと同じ階層にclone)
    (※ 2021/04/14現在、安定版の最新がv4.2)
    「git clone -b v4.2 --recursive htps://github.com/espressif/esp-idf.git」
  3. ESP-IDFをインストール
    「cd esp-idf」
    「./install.sh」
    → エラーが出た。。。Python2.7がカレントバージョンになってるのがダメらしい。
     Python3をカレントバージョンにして実行するとよい。(参考 : macOS Catalina zsh環境でpyenvを使ってPython 3.9.0をインストール)
    「source export.sh」
    (※ idf.py が使えるようになったよ!と表示されるが、よくわからん)
  4. micropythonをビルド
    1. cloneしたmicropythonフォルダに移動
      「cd ../micropython」
    2. クロスコンパイラをビルド
      「make -C mpy-cross」
    3. ESP32のソースコードが置いてあるところに移動
      「cd ports/esp32」
    4. サブモジュールをビルド
      (サブモジュールをアップデートしているだけ?)
      「make submodules」
    5. ESP32 micropythonをビルド
      「make」
    6. ESP32 micropythonがビルドてきたかどうかを確認する
      「ls」で、「build-GENERIC」フォルダができていることを確認。
      「ls build-GENERIC」で、firmware.bin ができていることを確認。
      できてればOK !!!
バイナリファイル ができたので、動作確認をする。
MicroPython ESP32 Memo 〜FW書き込み〜 に書いた方法で、作成したfirmware.bin を書き込むことができる。
MicroPythonの公式(MicroPython Internals Getting Started)には、idf.pyを使った書き込み方法が書かれているので、こちらの方法を試してみる。
(ただ、idf.pyは、中でesptool.pyを使って書き込んでいるだけなので、やっていることは同じはず?)
  1. cloneしたmicropythonフォルダのports/esp32に移動
    (上から続けてれば何も操作はいらないはず?)
  2. ESP32ボードをUSBでPCと繋ぎ、接続されたポートを調べる。
    「ls -l /dev/tty.usb*」
    (/dev/tty.usbserial-xxxx につながっていたと仮定する)
  3. ESP32ボードのflashをクリアする。
    「make erase PORT=/dev/tty.usbserial-xxxx」
    (※ 引数にPORT=xxxxをつけることで、ターゲットのポートを設定できる。
       デフォルトは/dev/ttyUSB0 となっているため、ちゃんとポート指定しないとエラーになる。)
  4. EPS32ボードにファームウェアを書き込む
    「make deploy PORT=/dev/tty.usbserial-xxxx」
    (※ make と実行すると、idf.pyが実行されるようになっている。
       idf.pyを直接使い方法もMicroPythonの公式HPに書かれている)
(※ [補足]
idf.pyで書き込む時、書き込まれるバイナリファイルは、build-GENERICフォルダ内の、partition_table/partition-table.bin(WriteAddress:0x8000〜)、bootloader/bootloader.bin(WriteAddress:0x1000〜)、micropython.bin(WriteAddress:0x10000〜)の3つ。
firmware.binはこの3つを合わせたバイナリファイルとなっている。 )

書き込んだら、「screen <USBport> 115200」で接続し、Pythonおなじみの
>>> 
が表示されることを確認した。

やった!できたよ!

2021年4月9日金曜日

MicroPython ESP32 Memo 〜FW書き込み〜

■概要

MicroPython を始める時の覚書。
ボードに出来上がりのMicroPythonを書き込んで動作確認するまで。

■環境

  • PC : Mac OS Catalina
  • Board : ESP32-WROOM-32D 開発ボード ESP32-DevKitC-32

■手順

基本的に、MicroPythonの公式ページの通り
公式はpipだが、brewでもできた気がする
  1. MicroPythonのFWをダウンロード
    (Firmware with ESP-IDF v3.x のSPIRAMじゃないほうの最新を使った)
    (URL : Firmware for Generic ESP32 module)
  2. PCとボードをUSBで接続する
  3. terminalを開き、FWを保存したディレクトリにcd コマンドで移動
  4. epstoolをインストールする
    「pip3 install esptool」
  5. 接続されたポートをチェックする
    「ls -l /dev/tty.usb*」
    /dev/tty.usbserial-xxxx (xは数字?)が接続ポート。
  6. フラッシュを消去する
    「esptool.py --port /dev/tty.usbserial-xxxx erase_flash」
  7. フラッシュにFWを書き込み
    「esptool.py --chip esp32 --port /dev/tty.usbserial-xxxx write_flash -z 0x1000 esp32-idf3-20210202-v1.14.bin」
    (esp32-idf3-20210202-v1.14.bin が最新でした @2021/04/09 )
  8. 終わり!

動作確認する。
デフォルトでは、シリアル通信でREPLを利用できる。
  1. PCとボードをUSBで接続する
  2. terminal を開く。
  3. 接続されたポートをチェックする
    「ls -l /dev/tty.usb*」
    /dev/tty.usbserial-xxxx (xは数字?)が接続ポート。
  4. 「screen /dev/tty.usbserial-xxxx 115200」( ※ 115200bps )
    適当にEnterを押すと、「>>>」が表示され、Pythonのインタプリタが使える。はず。

■参考

2018年11月25日日曜日

Raspberry Pi3 Redmine導入 エラーからの復活 まとめ

[背景]
https://chuchulabo.blogspot.com/2018/11/raspberry-pi3-redmine.html
でRedmine入れて,他のPCからRedmineのページが見れることを確認した。
浮かれた気分でRaspberry Pi3 を「sudo reboot」で再起動!

もう一度,Redmineのページが見れるかどうかを確認。
・・・見れなくなってた・・・
これが出るようになった。

We're sorry, but something went wrong.

We've been notified about this issue and we'll take a look at it shortly.
なーんーでーやー!

[目的]
Redmineのページを見れるように修復

[内容]
----- 現象 -----
いろいろいじってると,postgresqlにログインできないなくなっていることに気が付いた。
pi@raspberrypi:/ $ psql
psql: サーバに接続できませんでした: そのようなファイルやディレクトリはありません
ローカルにサーバが稼動していますか?
Unixドメインソケット"/var/run/postgresql/.s.PGSQL.5432"で通信を受け付けていますか?
----- 修正方法 -----
postgresqlを再インストールすれば直った。
再インストールの方法
  1. postgresqlを削除 「sudo apt-get --purge remove postgresql」
  2. postgresqlが削除できているか確認 「dpkg -l | grep postgres」
  3. 何も出てこなければOK。
    そうでなければ,
    「sudo apt-get --purge remove postgresql postgresql-doc postgresql-common」
    といった形で,出てきたものを一つずつスペースで区切って削除する。
  4. 「dpkg -l | grep postgres」で,何も表示されなくなるまで繰り返し。
  5. 再起動 「sudo reboot」 (別にいらないかも)
たとえば,「dpkg -l | grep postgres」で,つぎのように表示された場合,
pi@raspberrypi:/ $ dpkg -l | grep postgres
ii  postgresql-client-9.6                 9.6.10-0+deb9u1                   armhf        front-end programs for PostgreSQL 9.6
ii  postgresql-client-common              181+deb9u2                        all          manager for multiple PostgreSQL client versions
「sudo apt-get --purge remove postgresql postgresql-client-9.6 postgresql-client-common」
を実行して削除する。
最終的に,「dpkg -l | grep postgres」を実行して,何も表示されなくなればOK。
参考 : https://askubuntu.com/questions/32730/how-to-remove-postgres-from-my-installation

次に,postgresqlのインストールと初期設定を行う。 Redmineの公式の通りにしただけでは,おそらく同じようにRaspiを再起動したら使えなくなると思ったため。
  1. postgresqlをインストール 「sudo apt install postgresql」
  2. postgresqlサーバをインストール 「sudo apt install postgresql-server-dev-9.6」
  3. postgresqlユーザで,postgresqlのターミナルに入る。 「sudo -u postgres psql postgres」 ("postgres=#" が表示される。)     
    • 「CREATE ROLE redmine LOGIN ENCRYPTED PASSWORD 'your_password' NOINHERIT VALID UNTIL 'infinity'; CREATE ROLE」
    • 「CREATE DATABASE redmine WITH ENCODING='UTF8' OWNER=redmine;」
    • 「\q」(postgresqlからquit)
  4. postgresユーザのパスワード変更 「sudo passwd postgres」
  5. postgresユーザでログイン 「su - postgres」
    piユーザから,posgtresユーザに切り替わる。(postgres@raspberrypi:~$ が表示される。)
    • postgresqlのターミナルに入る。 「psql」
      • データベースロールの確認 「\du」
      • 「\q」(postgresqlからquit)
    • postgresユーザからログアウト 「exit」
  6. ディレクトリ移動 「cd /etc/postgresql/9.6/main/」
  7. pg_hba.confを編集 「sudo nano pg_hba.conf」
    ・・・(省略)・・・
    # Database administrative login by Unix domain socket
    # local   all             postgres                                peer
    local   all             postgres                                trust 
    
    # TYPE  DATABASE        USER            ADDRESS                 METHOD
    
    # "local" is for Unix domain socket connections only
    # local   all             all                                     peer
    local   all             all                                     trust
    ・・・(省略)・・・
    
  8. postgresqlを再起動 「sudo service postgresql reload」
  9. ここから先は,公式の操作の6.からを再度トレースする https://www.redmine.org/projects/redmine/wiki/HowTo_Install_Redmine_on_Debian_9
調べながらの作業では,実際に,上述の手順では行なっていないが,見直すと,こんな感じになっていた。

[結論]
大体の流れとして,psqlを再インストールして,postgresユーザの設定をして,公式の通りに操作すればOK。

[参考URL]

2018年11月20日火曜日

Raspberry Pi3 Redmine導入 仕切り直し


Raspberry Pi3 Redmine導入 仕切直し

[背景]
Redmineの導入に前失敗したし,
このままやと負けた気がするし,
とにかくRedmine入れたい!
いじりたい!

[目的]
Rasperry Pi3 Raspbian stretch にRedmineを入れる

[内容]
まず,前回で,設定がぐちゃぐちゃになっていたので,クリーンインストール。
NOOBで,Raspbianを入れて,クリーンな状態に。

  1. Raspbianの初期設定。
    https://chuchulabo.blogspot.com/2018/09/raspberry-pi-3.html
  2. Redmineのインストール。
    前回日本語で調べてたら出てこなかったけど,「redmine howto install」で調べたら,Redmineの公式のマニュアルが出てきた。
    RaspbianはDebian系なので,Debian Stretchへのインストール方法をそのまま実行。
    http://www.redmine.org/projects/redmine/wiki/HowTo_Install_Redmine_on_Debian_9
  3. 終わり!
「redmine howto install」でトップに出てくるリンク先は,上に貼ったリンクとは違う。
が出てくる。
このページに,
Redmine should run on most Unix, Linux, macOS, macOS Server and Windows systems as long as Ruby is available on this platform. See specific installation HowTos here.
と書いてある。
OS毎のインストール方法を見たい場合は,"here"のリンク先を参照してね。とのこと。
このリンク先から,Debian Stretchへのインストール方法のページに移動する。
ちなみに,"here"のリンク先は,以下。
http://www.redmine.org/projects/redmine/wiki/HowTos

[注意事項]
Redmineのインストールで,bundleをインストールするところがある。
"bundle install"コマンドを実行する前に,
"cd /opt/redmine/redmine-3.4.6/"コマンドで,ディレクトリを移動しておくこと。
理由としては,"bundle install"コマンドは,Gemfileがあるところでやらないと失敗するから。
できなくても,出てきたエラーでググったら簡単にどうすればいいかがわかる。
確か,GemFileがあるところをfindで探して,・・・的なHPがあるので,見たらわかる。

また,Redmineのインストールのマニュアルにある,
your_ip_addressとか,your_password とかは,適宜自分のraspberry piの設定に合わせる。

[まとめ]
公式あるなら,初めから見てればよかった・・・。
気づかなかった・・・そりゃ公式あるよね・・・。



2018年10月18日木曜日

Raspberry Pi3 Redmine導入(諦めました)

Raspberry Pi3 Raspbian Stretch redmineインストール覚書
(まだできてません)

[背景]
Raspberry Piをサーバー化してみたい
なんとなくredmineを使いたい

[目的]
Raspberry Pi でRedmineの設定を行う

[内容]
以下のコマンドを順番に実行する。

■ソフトウェアアップデート
  • sudo apt-get update
  • sudo apt-get upgrade 


■Apache, Imagemagick, Ruby, Gitをインストール
  • sudo apt-get install apache2 libapache2-mod-passenger
  • sudo apt-get install imagemagick libmagick++-dev
  • sudo apt-get install ruby-dev bundler
  • sudo apt-get install git subversion

■MySQLをインストール
  • sudo apt-get install mysql-server default-libmysqlclient-dev 



■MySQLのパスワード設定
SSHでインストールとかしてると,rootパスワード設定しろとか言ってくれないから,コマンドを叩いて設定する。

MySQLにログイン。

  • sudo mysql -u root

rootでログインしたら,「MariaDB [(none)]> 」みたいのが表示される。
その状態で,以下のコマンドを実行してrootのパスワードを変更する。
  • update mysql.user set password=password('XXXXXXXX') where user = 'root';
  • (XXXXXXXXは,パスワード。)
つぎに,パスワードの変更を適用して,MySQLのrootからログアウト。
  • flush privileges;
  • exit;
最後に,パスワードが反映されているかどうかをチェックする。
  • sudo mysql -u root -p
  • (この後,パスワードの入力が求められるので,XXXXXXXX(自分が設定したパスワード)を入力する)
多分,rootだけでなく,piについても,同様に設定するのが良いのだと思う。


■MySQLにRedmine用のデータベースを作成

MySQLにログイン。

  • sudo mysql -u root -p

MySQLにログイン後,以下のコマンドを実行。
  • create database redmine default character set utf8;
  • (redmineという名前のデータベースを作成)
  • grant all on redmine.* to redmine@localhost identified by 'redmine';
    (ユーザ名 : redmine, Pass : redmine のユーザを作成)
  • flush privileges;
    (適用!)
redmine用のデータベースが作成されるので,ログアウト。

  • exit;


■Redmineのインストール
  • sudo mkdir -p /var/www/redmine
  • sudo chown www-data /var/www/redmine
  • sudo -u www-data svn co http://svn.redmine.org/redmine/branches/3.3-stable /var/www/redmine
  • (Enter押した記憶ないけど,突然のチェックアウト開始だった)
チェックアウト成功の確認は,以下のコマンドで,なんか色々入ってたらOKだと思う。
  • ls /var/www/redmine

■RedmineとMySQLのRedmine用データベースの紐付け
ファイルを作成。
  • sudo nano /var/www/redmine/config/database.yml
nanoで,以下を入力して,保存。


production:
  adapter: mysql2
  host: localhost
# Redmine用のMySQLデータベース名
  databese: redmine
# Redmine用のMySQLユーザ名
  username: redmine
# Redmine用のMySQLパスワード
  password: redmine
  encoding: utf8


設定ファイルを作成(コピー)。
  • sudo cp /var/www/redmine/config/configuration.yml.example /var/www/redmine/config/configuration.yml


■gemパッケージインストール
  • cd /var/www/redmine
  • sudo -u www-data bundle install --without development test --path vendor/bundle

■gemパッケージの初期設定?
  • sudo -u www-data bundle exec rake generate_secret_token
  • sudo -u www-data RAILS_ENV=production bundle exec rake db:migrate
  • sudo -u www-data RAILS_ENV=production REDMINE_LANG=ja bundle exec rake redmine:load_default_data

■Apacheの設定
  • cd /etc/apache2/sites-enabled
  • sudo nano 000-default.conf
nanoで,以下のように変更して,保存。

DocumentRoot /var/www/html
↓
# DocumentRoot /var/www/html
DocumentRoot /var/www/redmine/public


■Raspberry Piの再起動

  • sudo reboot


■Redmineへアクセス

ブラウザから,Raspberry PiのIPアドレスを叩いて,アクセスしてみた。

We're sorry, but something went wrong.

We've been notified about this issue and we'll take a look at it shortly.

とか出てログインはおろか,ページすら表示されないぞ!

■Redmineへアクセスできない問題の調査

●MySQLへログインができなくなってる!
色々調べてみたら,Rubuy on RAILS の問題とか,MySQLとRedmineのリンクができてないとか書いてた。
RubyやMySQLの再インストールをやったりしてるうちに,
MySQLにログインできなくなってることに気付いた。

pi@raspberrypi:/ $ sudo mysql -u root -p

mysql: error while loading shared libraries: /lib/arm-linux-gnueabihf/libreadline.so.5: invalid ELF header

このエラーは,対象のファイルがリンクされてないのが原因らしい。
再インストールしたら治るとか書いてあったが,治らなかった。
そこで,とりあえず,MySQLを再起動しようとしても,失敗する。

pi@raspberrypi:/var/log/mysql $ sudo service mysqld restart
Job for mariadb.service failed because the control process exited with error code.

See "systemctl status mariadb.service" and "journalctl -xe" for details.

で,ステータスをみてみると,


pi@raspberrypi:/var/log/mysql $ systemctl status mariadb.service
・・・(略)・・・
10月 22 00:01:17 raspberrypi systemd[1]: Starting MariaDB database server...
10月 22 00:01:18 raspberrypi systemd[1]: mariadb.service: Main process exited, code=exited, status=127/n/a
10月 22 00:01:18 raspberrypi systemd[1]: Failed to start MariaDB database server.
10月 22 00:01:18 raspberrypi systemd[1]: mariadb.service: Unit entered failed state.

10月 22 00:01:18 raspberrypi systemd[1]: mariadb.service: Failed with result 'exit-code'.

そもそもスタートしてないっぽい。
そこで,とりあえず,スタートさせようとしても,できない。

pi@raspberrypi:/var/log/mysql $ sudo service mysqld start
Job for mariadb.service failed because the control process exited with error code.

See "systemctl status mariadb.service" and "journalctl -xe" for details.

そこで,エラーの詳細を表示する。

pi@raspberrypi:/var/log/mysql $ journalctl -xe
10月 22 00:01:17 raspberrypi sudo[1249]: pam_unix(sudo:session): session opened for user root by pi(uid=0)
10月 22 00:01:17 raspberrypi systemd[1]: Starting MariaDB database server...
-- Subject: Unit mariadb.service has begun start-up
-- Defined-By: systemd
-- Support: https://www.debian.org/support
-- 
-- Unit mariadb.service has begun starting up.
10月 22 00:01:18 raspberrypi mysqld[1356]: /usr/sbin/mysqld: error while loading shared libraries: /lib/arm-linux-gnueabihf/libaio.so.1: invalid ELF head
10月 22 00:01:18 raspberrypi systemd[1]: mariadb.service: Main process exited, code=exited, status=127/n/a
10月 22 00:01:18 raspberrypi systemd[1]: Failed to start MariaDB database server.
-- Subject: Unit mariadb.service has failed
-- Defined-By: systemd
-- Support: https://www.debian.org/support
-- 
-- Unit mariadb.service has failed.
-- 
-- The result is failed.

ここでも,リンクに失敗しているらしい。
「/usr/sbin/mysqld: error while loading shared libraries: /lib/arm-linux-gnueabihf/libaio.so.1: invalid ELF head」が,リンク失敗のところ。

解決法は,リンクを教えてやればいいとのこと。
以下のコマンドを実行し,.cfgファイルを編集する。

  • sudo vi /etc/ld.so.conf
以下の文を追記する。


/lib/arm-linux-gnueabihf


ld.so.confには,「include /etc/ld.so.conf.d/*.conf」が書かれている。
includeされるファイルの中に,同じ文が書かれているので,リンクされそうなものだが,されていないっぽい。

この後に,以下のコマンドを実行して,MySqlを実行する。

  • service mysql start
すると,問題なく,MySqlを開始することができた。
できなかった。エラーが出た。
そこで,Raspberry Pi自体を再起動したところ,
自動でmysqlがスタートされたらしく,
MySQLにrootでログインできた。

  • sudo reboot
    (再起動)
  • mysql -u root -p
    (rootでログイン)




[参考URL]







2018年10月1日月曜日

Raspberry Pi 3 SSH接続

Raspberry Pi3 Raspbian Stretch でSSH接続 覚書

[前提]
  • PC : Mac OS High Sierra
  • Raspberry Pi : Raspbian Stretch

[手順]
Raspberry Pi側の設定
  1. Raspberry PiのSSH接続を有効にする。(デフォは「無効」)
    1. スタート->設定->Raspberry Piの設定
    2. インターフェイスタブを選んで,SSHを「有効」にする
  2. Raspberry Piを再起動(いらんかも)
  3. ターミナルを立ち上げて,「ifconfig」を入力して,IPアドレスをチェック
Mac側の設定
  1. ターミナルを起動
  2. 「ssh pi@xxx.xxx.xxx.xxx」を入力
  3. パスワードが聞かれるので,Raspberry Piのpiユーザのパスワードを入力

[注意]
MacからSSH接続しようとしたら,ずっと

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
・・・
が表示されて接続拒否されてた。

これは,Mac側の問題らしい。
SSHのキーが古いよってことらしい。

  • ssh-keygen -R xxx.xxx.xxx.xxx
とコマンドをうって,再度ssh接続を試みたらつながった。
(xxx.xxx.xxx.xxxは,Raspberry Piに割り当てられてるIPアドレス)

参考URL : https://www.niandc.co.jp/sol/tech/date20150729_507.php


Raspberry Pi 3 デバイスドライバ作成 Part1

[前提]
  • HW : Raspberry pi 3
  • OS : Raspbian Stretch with Desktop

[やったこと]
gccでコンパイルとかできないといけない。
Linuxのデバイスドライバ開発では,Linuxのソースコードとヘッダが必要らしい。

メインで参考にしたURLは以下。

まずは,以下のコマンドを実行したい。
  1. sudo apt-get install build-essential
  2. sudo apt-get install git
  3. cd /usr/src
  4. sudo apt-get install linux-image-rpi-rpfv
  5. sudo apt-get install linux-headers-rpi-rpfv
しかし,4で失敗する。
エラー内容は,以下の通り。
  • ・・・へのハードリンクの作成に失敗しました : 許可されていない操作です
  • dpkg: パッケージ initramfs-tools の処理中にエラーが発生しました (--configure)
  • サブプロセス インストール済みの post-installation スクリプト はエラー終了ステータス 1 を返しました
  • etc.
調べたところ,BOOT領域が足りないのが原因っぽい。
以下のコマンドを実行した。
  1. sudo apt-get remove linux-image-4.9.0-6-rpi
    (4.9.0-6は,OSのバージョン。適宜変更のこと)
  2. sudo apt-get autoremove
  3. sudo apt-get dist-upgrade
その後,失敗していたコマンドを実行する。
  1. sudo apt-get install linux-image-rpi-rpfv
  2. sudo apt-get install linux-headers-rpi-rpfv
エラーを吐くことなく,正常に終了。

このエラーで参考にしたURLは以下。


つぎに,インストールした,linuxイメージをboot時に読み出すために,
/boot/config.txt に追加編集する。
  1. sudo vi /boot/config.txt
追加するのは,以下の文。
# Add chuchulabo : Parameters to boot on raspbian kernel(linux-image-rpi-rpfv package)
kernel=vmlinuz-4.9.0-6-rpi
initramfs initrd.img-4.9.0-6-rpi followkernel

そして,再起動。
  1. sudo reboot

そして・・・
SSHでRaspberry piに繋がらなくなりました!
うおーい!!!
間違いなく,config.txtをいじったのが悪いんやけど・・・


/********** 続く **********/