ラベル Linux の投稿を表示しています。 すべての投稿を表示
ラベル Linux の投稿を表示しています。 すべての投稿を表示

2020年9月19日土曜日

ラズパイが「timeout waiting for hardware interrupt」で起動しなくなる

家のラズパイが起動しなくなりました。
起動するといかのようなメッセージが出て、その状態で固まっています。
試しにSDカードを他のラズパイに入れて起動確認すると同じ結果だったので、SDカードが壊れているような気がします。
大したデータはなかったので、SDカードにOSを書き直したら使えるようになりました。


 [  13.286840] mmc0: timeout waiting for hardware interrupt
  [  23.526838] mmc0: timeout waiting for hardware interrupt

2020年8月19日水曜日

ラズパイで写真を撮ってGoogleDriveに転送する


概要

ラズパイで写真を撮影して、/var/local/PhotoData/New_Photo.jpgに保存し、撮影した写真をGoogleDriveに転送します。
gdriveコマンドを使うためにGoogleDrive側の設定など必要になります。

ソースコード(PhotoShot.py)

ファイルのサイズを小さくしたかったので品質は10%で。デバイスの都合で90度傾けて撮影しています。
XXXXXXXXXXXXXXXXXXXXXXXXXXXのところには転送先のフォルダのIDを記載してください。

 #!/usr/bin/python
 # coding: utf-8

 import os

 com = 'raspistill -q 10 -rot 90 -o ' + '/var/local/PhotoData/New_Photo.jpg'
 os.system(com)

 com2 = '/bin/gdrive upload --parent "XXXXXXXXXXXXXXXXXXXXXXXXXXX" /var/local/PhotoData/New_Photo.jpg'

 os.system(com2)


使用例


 $ sudo python PhotoShot.py
 Uploading /var/local/PhotoData/New_Photo.jpg
 Uploaded 1uxAnYqEtUQ91nsGt61G7ofwrwVQQbNUh at 17.3 KB/s, total 152.9 KB

この処理をcrontabに書いておけば、時間を決めて写真撮影をしてそのままGoogleDriveに転送することができるようになるので便利です!

2020年8月16日日曜日

無通信が続いた時に再起動する方法

経緯

先日の投稿でSORACOMの無通信タイムアウトを回避するためにpingを定期送信する処理を記載しましたが、この処理を入れても再起動すると「ping: pong.soracom.io: 名前解決に一時的に失敗しました」というのが継続的に発生してネットワークにつながらなくなる事象が2回に1回くらいの割合で発生するようになりました。

※関連しているかもしれない記事
特定地域向け IoT SIM (旧日本向け Air SIM) SORACOM Air for セルラー トラブルシューティングガイド【接続できなくなった場合】

できれば原因を究明したいところでしたが、軽くググってってもわからなかったし再起動で直る(また繋がるようになる)ことがわかっていたので、つながらない状態が10分続くと再起動するように処理を改造しました。


60秒周期にsoracomにpingを飛ばして、10回失敗したら再起動する処理

この処理を、/usr/local/bin/PingSend.pyに保存します。参考にしてみてください。

 #!/usr/bin/python
 # coding: UTF-8

 import time
 import os

 count=0

 while True:
     time.sleep(60)
     ret = os.system('ping -c 3  pong.soracom.io')
 
     if ret==0:
         count=0

     else:
         count=count+1

     if count>=10:
         os.system('shutdown -r now')

2020年8月9日日曜日

ラズパイでLEDを点灯する pigpioの使い方

概要

ラズパイでLEDを制御する際、GPIOを操作する方法の一つとして、Pythonのpigpioライブラリを使うのが便利そうなので使い方を学びます。


使い方

  1. pigpioのサービスを起動しておく
  2. pigpioを使う際にはあらかじめ「pigpiod」という常駐プログラムを起動しておく必要があります。
    pigpiodを制御するユニットがあらかじめ用意されているので、systemctlコマンドで常駐プログラムを起動します。
    
     pi@raspberrypi:~ $ sudo systemctl start pigpiod
     pi@raspberrypi:~ $ sudo systemctl status pigpiod
     ● pigpiod.service - Daemon required to control GPIO pins via pigpio
        Loaded: loaded (/lib/systemd/system/pigpiod.service; disabled; vendor preset: enabled)
        Active: active (running) since Sun 2020-08-09 13:40:24 JST; 2s ago
       Process: 17319 ExecStart=/usr/bin/pigpiod -l (code=exited, status=0/SUCCESS)
      Main PID: 17321 (pigpiod)
         Tasks: 4 (limit: 2200)
        Memory: 532.0K
        CGroup: /system.slice/pigpiod.service
                mq17321 /usr/bin/pigpiod -l
    
      8月 09 13:40:24 raspberrypi systemd[1]: Starting Daemon required to control GPIO pins via pigpio...
      8月 09 13:40:24 raspberrypi systemd[1]: Started Daemon required to control GPIO pins via pigpio.
    
    

    サービスファイルの中身はこのようになっています。
    
     pi@raspberrypi:~ $ cat /lib/systemd/system/pigpiod.service
     [Unit]
     Description=Daemon required to control GPIO pins via pigpio
     [Service]
     ExecStart=/usr/bin/pigpiod -l
     ExecStop=/bin/systemctl kill pigpiod
     Type=forking
     [Install]
     WantedBy=multi-user.target
    
    

    再起動後した時に自動起動する場合には、ユニットをenableにしておきます。
    
     pi@raspberrypi:~ $ sudo systemctl enable pigpiod
     Created symlink /etc/systemd/system/multi-user.target.wants/pigpiod.service → /lib/systemd/system/pigpiod.service.
    
    

  3. pigpioを使ってLEDを点灯するプログラムを作成する
  4. LEDはこのように接続しました。GPIO14をGRDのピンを使用しています。
    抵抗は200Ωのものを使っています。(図に書かれている抵抗の色とは違うものです)


    以下がプログラムです。pigpioをインポートして、出力設定した後にHighに設定しています。
    
     pi@raspberrypi:~/test $ cat led_on.py
     import pigpio
    
     LED_PIN = 14
    
     pi= pigpio.pi()
     pi.set_mode( LED_PIN, pigpio.OUTPUT )
     pi.write( LED_PIN, pigpio.HIGH)
    
    
  5. プログラムを実行する
  6. 以下のようにpythonのプログラムを実行します。
    
     pi@raspberrypi:~/test $ python led_on.py
    
    
    無事に点灯しました。

ここではpigpioを使ってLEDを点灯させてみましたが、これができればループ処理を組み合わせて点滅させたり、明るさを変えてみたりすることができそうです。
IoTでラズパイを使う際にディスプレイはつながないで使う事が多いと思うので、LEDを使って簡単に出力できるのは便利そうです。


2020年7月7日火曜日

SORSCOMの無通信タイムアウトを回避する

概要

SORACOMのSIMを使って3G回線に接続するガジェットを作ったのですが、
無通信状態が1時間程度続くとセッションが切れてしまいます。

※参考ページ
無通信の状態が続くと通信が切れるのはなぜですか?

そこで、定期的にpingを飛ばす処理pythonで書いて、systemdで自動起動するようにしました。


60秒周期でsoracomにpingを飛ばす処理

この処理を、/usr/local/bin/PingSend.pyに保存します。

 #!/usr/bin/python
 # coding: UTF-8
 
 import time
 import os

 while True:
     time.sleep(60)
     os.system('ping -c 3 pong.soracom.io')
    


pingを飛ばす処理を自動起動するユニットの作成

この処理を、/etc/systemd/system/Pi-ping.serviceに保存します。

 [Unit]
 Description=Ping Service
 
 [Service]
 Type=simple
 ExecStart=/usr/bin/python /usr/local/bin/PingSend.py
 Restart=always
 User=root

 [Install]
 WantedBy=multi-user.target


ユニットの起動方法と自動起動の有効化


 $ sudo systemctl start Pi-ping.service ★ユニットの起動
 $
 $ sudo systemctl status Pi-ping.service ★ユニットの状態を確認
● Pi-ping.service - Ping Service
   Loaded: loaded (/etc/systemd/system/Pi-ping.service; disabled; vendor preset: enabled)
   Active: active (running) since Tue 2020-07-07 21:33:27 JST; 6s ago
 Main PID: 2862 (python)
    Tasks: 1 (limit: 2077)
   Memory: 1.7M
   CGroup: /system.slice/Pi-ping.service
           mq2862 /usr/bin/python /usr/local/bin/PingSend.py

 7月 07 21:33:27 raspberrypi systemd[1]: Started Ping Service.
 $
 $ sudo systemctl enable Pi-ping.service ★ユニットの自動起動設定
Created symlink /etc/systemd/system/multi-user.target.wants/Pi-ping.service → /etc/systemd/system/Pi-ping.service.
 $

2020年6月28日日曜日

raspistillコマンドの使い方 ラズパイで写真を撮る

概要

ラズパイで写真を撮る「raspistill」コマンドにつての情報をまとめます

書式
raspistill [options]

オプション 説明
-q 画像のクオリティを指定します。設定範囲は0~100です
-hf 水平反転を設定します
-vf 垂直方向の反転をします
-o 画像ファイルのファイル名を指定します

使用例

画像のクオリティを10%(サイズ小さ目)で水平反転と垂直反転を行って写真撮影。ファイル名はtmp1.jpgで保存する。

 # raspistill -q 10 -hf -vf -o tmp1.jpg

2019年11月18日月曜日

lsコマンドの使い方

概要

ディレクトリの内容を表示するlsコマンドについて情報を整理します。
基本的なコマンドなので、オプションを変えながら何個か表示します。

オプション 説明
-a 隠しファイル(.から始まる名前のファイル)も含めて表示する
-A -aと同じだが、「.」「..」は表示しない
-F ファイルの種類も表示する
-i iノード番号も表示する
-l ファイルの詳細な情報を表示する
-t ファイルを最終更新日時順に表示する
-h -lとセットで使う。ファイルのサイズを単位付きで表示する

表示例

  • 普段見やすくてよく使うのは「-lA」オプション
  • 
    pi@raspberrypi:~ $ ls -lA
    合計 100
    -rw------- 1 pi pi   56 11月 17 10:17 .Xauthority
    -rw------- 1 pi pi 7327 11月 18 17:22 .bash_history
    -rw-r--r-- 1 pi pi  220  9月 26 09:09 .bash_logout
    -rw-r--r-- 1 pi pi 3523  9月 26 09:09 .bashrc
    drwxr-xr-x 7 pi pi 4096 10月 27 13:35 .cache
    drwx------ 5 pi pi 4096 10月 27 13:35 .config
    drwx------ 3 pi pi 4096  9月 26 09:46 .gnupg
    drwxr-xr-x 3 pi pi 4096  9月 26 09:18 .local
    drwx------ 3 pi pi 4096 10月 27 13:35 .pki
    -rw-r--r-- 1 pi pi  807  9月 26 09:09 .profile
    drwx------ 3 pi pi 4096 10月 27 14:52 .vnc
    -rw------- 1 pi pi 2436 11月 17 10:17 .xsession-errors
    -rw------- 1 pi pi 2436 11月 16 23:26 .xsession-errors.old
    drwxr-xr-x 2 pi pi 4096 10月 27 14:21 Desktop
    drwxr-xr-x 2 pi pi 4096  9月 26 09:46 Documents
    drwxr-xr-x 2 pi pi 4096  9月 26 09:46 Downloads
    drwxr-xr-x 2 pi pi 4096  9月 26 09:18 MagPi
    drwxr-xr-x 2 pi pi 4096  9月 26 09:46 Music
    drwxr-xr-x 2 pi pi 4096  9月 26 09:46 Pictures
    drwxr-xr-x 2 pi pi 4096  9月 26 09:46 Public
    drwxr-xr-x 2 pi pi 4096  9月 26 09:46 Templates
    drwxr-xr-x 2 pi pi 4096  9月 26 09:46 Videos
    drwxr-xr-x 2 pi pi 4096 11月  2 14:48 local
    drwxr-xr-x 4 pi pi 4096 11月 16 15:05 osoyo
    
    

  • ファイルサイズを聞かれたときに見やすいのは「-lAh」オプション
  • 
    pi@raspberrypi:~ $ ls -lAh
    合計 100K
    -rw------- 1 pi pi   56 11月 17 10:17 .Xauthority
    -rw------- 1 pi pi 7.2K 11月 18 17:22 .bash_history
    -rw-r--r-- 1 pi pi  220  9月 26 09:09 .bash_logout
    -rw-r--r-- 1 pi pi 3.5K  9月 26 09:09 .bashrc
    drwxr-xr-x 7 pi pi 4.0K 10月 27 13:35 .cache
    drwx------ 5 pi pi 4.0K 10月 27 13:35 .config
    drwx------ 3 pi pi 4.0K  9月 26 09:46 .gnupg
    drwxr-xr-x 3 pi pi 4.0K  9月 26 09:18 .local
    drwx------ 3 pi pi 4.0K 10月 27 13:35 .pki
    -rw-r--r-- 1 pi pi  807  9月 26 09:09 .profile
    drwx------ 3 pi pi 4.0K 10月 27 14:52 .vnc
    -rw------- 1 pi pi 2.4K 11月 17 10:17 .xsession-errors
    -rw------- 1 pi pi 2.4K 11月 16 23:26 .xsession-errors.old
    drwxr-xr-x 2 pi pi 4.0K 10月 27 14:21 Desktop
    drwxr-xr-x 2 pi pi 4.0K  9月 26 09:46 Documents
    drwxr-xr-x 2 pi pi 4.0K  9月 26 09:46 Downloads
    drwxr-xr-x 2 pi pi 4.0K  9月 26 09:18 MagPi
    drwxr-xr-x 2 pi pi 4.0K  9月 26 09:46 Music
    drwxr-xr-x 2 pi pi 4.0K  9月 26 09:46 Pictures
    drwxr-xr-x 2 pi pi 4.0K  9月 26 09:46 Public
    drwxr-xr-x 2 pi pi 4.0K  9月 26 09:46 Templates
    drwxr-xr-x 2 pi pi 4.0K  9月 26 09:46 Videos
    drwxr-xr-x 2 pi pi 4.0K 11月  2 14:48 local
    drwxr-xr-x 4 pi pi 4.0K 11月 16 15:05 osoyo
    
    

  • 最近更新されたファイルを探したいときは「-lAt」オプション
  • 
    pi@raspberrypi:~ $ ls -lAt
    合計 100
    -rw------- 1 pi pi 7327 11月 18 17:22 .bash_history
    -rw------- 1 pi pi 2436 11月 17 10:17 .xsession-errors
    -rw------- 1 pi pi   56 11月 17 10:17 .Xauthority
    -rw------- 1 pi pi 2436 11月 16 23:26 .xsession-errors.old
    drwxr-xr-x 4 pi pi 4096 11月 16 15:05 osoyo
    drwxr-xr-x 2 pi pi 4096 11月  2 14:48 local
    drwx------ 3 pi pi 4096 10月 27 14:52 .vnc
    drwxr-xr-x 2 pi pi 4096 10月 27 14:21 Desktop
    drwx------ 3 pi pi 4096 10月 27 13:35 .pki
    drwxr-xr-x 7 pi pi 4096 10月 27 13:35 .cache
    drwx------ 5 pi pi 4096 10月 27 13:35 .config
    drwxr-xr-x 2 pi pi 4096  9月 26 09:46 Documents
    drwxr-xr-x 2 pi pi 4096  9月 26 09:46 Downloads
    drwxr-xr-x 2 pi pi 4096  9月 26 09:46 Music
    drwxr-xr-x 2 pi pi 4096  9月 26 09:46 Pictures
    drwxr-xr-x 2 pi pi 4096  9月 26 09:46 Public
    drwxr-xr-x 2 pi pi 4096  9月 26 09:46 Templates
    drwxr-xr-x 2 pi pi 4096  9月 26 09:46 Videos
    drwx------ 3 pi pi 4096  9月 26 09:46 .gnupg
    drwxr-xr-x 2 pi pi 4096  9月 26 09:18 MagPi
    drwxr-xr-x 3 pi pi 4096  9月 26 09:18 .local
    -rw-r--r-- 1 pi pi  220  9月 26 09:09 .bash_logout
    -rw-r--r-- 1 pi pi 3523  9月 26 09:09 .bashrc
    -rw-r--r-- 1 pi pi  807  9月 26 09:09 .profile
    
    

環境変数の設定方法


概要

Linux上で操作をする際に使用する変数に、シェル変数と環境変数があります。
シェル変数は設定をしたプロセスでのみ有効な変数であるのに対して環境変数は別のプロセスにも引き継がれます。
環境変数の設定方法と、表示方法について整理します。
また、よく使うPATHの環境変数についても整理します。

要点

  • 環境変数の表示方法
  • 環境変数を表示するにはprintenvコマンドを使います。
    
     $ printenv
     SHELL=/bin/bash
     LANGUAGE=ja_JP.UTF-8
     NO_AT_BRIDGE=1
     PWD=/home/pi
     LOGNAME=pi
     XDG_SESSION_TYPE=tty
     HOME=/home/pi
    
     【省略】
    
     LC_ALL=ja_JP.UTF-8
     PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games
     DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
     MAIL=/var/mail/pi
     SSH_TTY=/dev/pts/0
     TEXTDOMAIN=Linux-PAM
     _=/usr/bin/printenv
    
    

    個別に表示する場合は「echoコマンド $変数名」を使って表示することもできます。
    
     $ echo $LANG
     ja_JP.UTF-8
    
    

  • 環境変数の設定方法
  • 環境変数を設定する際には「変数名=値」とします。以下の例はLANGの変数を「en_US.UTF-8」に設定しています。
    
     $ echo $LANG
     ja_JP.UTF-8
     $
     $ LANG=en_US.UTF-8
     $
     $ echo $LANG
     en_US.UTF-8
    
    
  • 環境変数の設定方法
  • 環境変数を引き継ぐ場合にはexportコマンドが必要です。
    以下は環境変数を設定したけど、exportしてないから子プロセスに引き継がれなくて、exportしたら環境変数が引き継がれた様子です。

    
     $ NAME=aaa
     $ echo $NAME
     aaa
     $ bash ★子プロセスへ移動
     $ echo $NAME ★表示されない
     $ exit
     $
     $ echo $NAME
     aaa
     $ export NAME
     $ bash ★子プロセスへ移動
     $ echo $NAME ★表示されてる
     aaa 
    
    
  • 主な環境変数

  • 変数名 説明
    PWD カレントディレクトリの絶対パス
    PATH 参照しているコマンドのパス
    HOME ユーザのホームディレクトリ
    PS1 プロンプトを定義
    PS2 2次プロンプトを定義
    HISTFILE コマンド履歴を格納するファイルを定義
    LANG 言語情報
    HOSTNAME ホスト名
    USER 現在のユーザ名
    HISTSIZE コマンド履歴の最大値
    LAGNAME ログインシェルのユーザ名

  • 環境変数PATHについて
  • PATHの環境変数を表示すると以下のようになっていました。
    
     $ echo $PATH
     /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games
    
    
    これは、このユーザが以下のフォルダにあるコマンドを相対パスで実行できることを示しています。
    • /usr/local/sbin
    • /usr/local/bin
    • /usr/sbin
    • /usr/bin
    • /sbin
    • /bin
    • /usr/local/games
    • /usr/games

    なので、例えば実行できるコマンドを追加してパスを通す必要が出てきたときは、この環境変数PATHにコマンドのパスを追加します。

2019年11月14日木曜日

aptitudeコマンド remove とpurgeの違いの実験

概要

パッケージのインストールと確認ができるaptitudeコマンドについての情報をまとめます。
アンインストールする際のremoveオプションとpurgeオプションの違いもためしてみました。

要点

  • aptitudeコマンドについて
  • aptitudeコマンドはapt-getコマンドとapt-chaheコマンドと同等の事ができるコマンドです。
    試しに使ってみようと思ったらaptitudeがインストールされていませんでした。
    なので、まずはapt-getでインストールします
    
     #apt-get install aptitude
    
    

    サブコマンド 説明
    update データベースを更新する
    show パッケージ名 パッケージ情報を表示する
    search パターン パッケージを検索する
    install パッケージ名 パッケージをインストールする
    remove パッケージ名 設定ファイルを残してパッケージをアンインストールする
    purge パッケージ名 設定ファイルも含めてパッケージをアンインストールする
    full-upgrade すべてのパッケージファイルをアップグレードする
    safe-upgrade ほかのパッケージを削除しないようにすべてのパッケージファイルをアップグレードする

  • aptitude updateコマンド
  • 「apt-get update」と同様にパッケージデータベースの更新を行います。試しにどっちも試してみたところ、発見とヒットの違いがありました。

    
     # apt-get update
     ヒット:1 http://archive.raspberrypi.org/debian buster InRelease
     ヒット:2 http://raspbian.raspberrypi.org/raspbian buster InRelease
     パッケージリストを読み込んでいます... 完了
     #
     # aptitude update
     発見 http://raspbian.raspberrypi.org/raspbian buster InRelease
     発見 http://archive.raspberrypi.org/debian buster InRelease
    
    
  • aptitude removeコマンドとaptitude purge コマンド
  • 設定ファイルを残してパッケージを削除するコマンドです。
    設定ファイルを残す場合がremoveで、場合と残さない場合がpurgeなので、本当に設定ファイルが消えるのか実験してみました。

    1. まずはremoveでsnmpをアンインストール。
    2. 
       # ls snmp
       snmp.conf  【★設定ファイルがある】
       #
       # aptitude remove snmp
       以下のパッケージが削除されます:
         libmariadb3{u} libsnmp-base{u} libsnmp30{u} mariadb-common{u} mysql-common{u} snmp
       更新: 0 個、新規インストール: 0 個、削除: 6 個、保留: 6 個。
       アーカイブの 0 B を取得する必要があります。展開後に 7,747 kB のディスク領域が解放されます。
       先に進みますか? [Y/n/?] Y
       (データベースを読み込んでいます ... 現在 156656 個のファイルとディレクトリがインストールされています。)
       snmp (5.7.3+dfsg-5+b1) を削除しています ...
       libsnmp30:armhf (5.7.3+dfsg-5+b1) を削除しています ...
       libmariadb3:armhf (1:10.3.17-0+deb10u1) を削除しています ...
       libsnmp-base (5.7.3+dfsg-5) を削除しています ...
       mariadb-common (1:10.3.17-0+deb10u1) を削除しています ...
       update-alternatives: /etc/mysql/my.cnf (my.cnf) を提供するために自動モードで /etc/mysql/my.cnf.fallback を使います
       mysql-common (5.8+1.0.5) を削除しています ...
       man-db (2.8.5-2) のトリガを処理しています ...
       libc-bin (2.28-10+rpi1) のトリガを処理しています ...
      
       #
       # ls snmp
       snmp.conf 【★アンインストールしても設定ファイルが残っている 想定通り】
      
      
    3. 再度snmpをインストールして、今度はpurgeのサブコマンドを使ってアンインストール。
    4. 
       # ls snmp
       snmp.conf【★設定ファイルがある】
       # aptitude purge snmp
       以下のパッケージが削除されます:
         libmariadb3{u} libsnmp-base{u} libsnmp30{u} mariadb-common{u} mysql-common{u} snmp{p}
       更新: 0 個、新規インストール: 0 個、削除: 6 個、保留: 6 個。
       アーカイブの 0 B を取得する必要があります。展開後に 7,747 kB のディスク領域が解放されます。
       先に進みますか? [Y/n/?] Y
       (データベースを読み込んでいます ... 現在 156656 個のファイルとディレクトリがインストールされています。)
       snmp (5.7.3+dfsg-5+b1) を削除しています ...
       libsnmp30:armhf (5.7.3+dfsg-5+b1) を削除しています ...
       libmariadb3:armhf (1:10.3.17-0+deb10u1) を削除しています ...
       libsnmp-base (5.7.3+dfsg-5) を削除しています ...
       mariadb-common (1:10.3.17-0+deb10u1) を削除しています ...
       update-alternatives: /etc/mysql/my.cnf (my.cnf) を提供するために自動モードで /etc/mysql/my.cnf.fallback を使います
       mysql-common (5.8+1.0.5) を削除しています ...
       man-db (2.8.5-2) のトリガを処理しています ...
       libc-bin (2.28-10+rpi1) のトリガを処理しています ...
       
       #
       # ls snmp
       snmp.conf 【★アンインストールしたのに設定ファイルが残っている! 想定外】
      
      
    5. snmp.confファイルが関連するパッケージを確認すると、snmpではなくlibsnmp-baseが紐づいているようでした。
    6. 
       # dpkg -S snmp.conf
       libsnmp-base: /etc/snmp/snmp.conf   【★関連しているパッケージは libsnmp-baseだった!】
       libsnmp-base: /usr/share/man/man5/snmp.conf.5.gz
      
      
    7. ということで、再度snmpをインストールして、今度はlibsnmp-baseをpurgeでアンインストール。
    8. 
       # ls snmp
       snmp.conf 【★設定ファイルがある】
       #
       # aptitude purge libsnmp-base
       以下のパッケージが削除されます:
         libsnmp-base{p}
       更新: 0 個、新規インストール: 0 個、削除: 1 個、保留: 6 個。
       アーカイブの 0 B を取得する必要があります。展開後に 2,176 kB のディスク領域が解放されます。
       以下のパッケージには満たされていない依存関係があります:
        snmp : 依存: libsnmp-base (>= 5.7.3+dfsg-5) インストールされません
        libsnmp30 : 依存: libsnmp-base インストールされません
       以下のアクションでこれらの依存関係の問題は解決されます:
      
           以下のパッケージを削除する:
       1)     libsnmp30 [5.7.3+dfsg-5+b1 (now, stable)]
       2)     snmp [5.7.3+dfsg-5+b1 (now, stable)]
      
       この解決方法を受け入れますか? [Y/n/q/?]Y
       以下のパッケージが削除されます:
         libmariadb3{u} libsnmp-base{p} libsnmp30{a} mariadb-common{u} mysql-common{u} snmp{a}
       更新: 0 個、新規インストール: 0 個、削除: 6 個、保留: 6 個。
       アーカイブの 0 B を取得する必要があります。展開後に 7,747 kB のディスク領域が解放されます。
       先に進みますか? [Y/n/?] Y
       (データベースを読み込んでいます ... 現在 156656 個のファイルとディレクトリがインストールされています。)
       snmp (5.7.3+dfsg-5+b1) を削除しています ...
       libsnmp30:armhf (5.7.3+dfsg-5+b1) を削除しています ...
       libmariadb3:armhf (1:10.3.17-0+deb10u1) を削除しています ...
       libsnmp-base (5.7.3+dfsg-5) を削除しています ...
       mariadb-common (1:10.3.17-0+deb10u1) を削除しています ...
       update-alternatives: /etc/mysql/my.cnf (my.cnf) を提供するために自動モードで /etc/mysql/my.cnf.fallback を使います
       mysql-common (5.8+1.0.5) を削除しています ...
       man-db (2.8.5-2) のトリガを処理しています ...
       libc-bin (2.28-10+rpi1) のトリガを処理しています ...
       (データベースを読み込んでいます ... 現在 156439 個のファイルとディレクトリがインストールされています。)
       libsnmp-base (5.7.3+dfsg-5) の設定ファイルを削除しています ...
      
       # ls snmp 【★設定ファイルが消えてる! 想定通り】
       ls: 'snmp' にアクセスできません: そのようなファイルやディレクトリはありません 
      
      
    snmpをpurgeでアンインストールするときも、libsnmp-baseが関連するから一緒にアンインストールしてるように見えますが、どうやらその時は設定ファイルは消さないようです。
    表示内容をよく見ると、「libsnmp-base{u}」と表示されてる時と「libsnmp-base{p}」と書かれている時があり、{u}は設定残してアンインストール、{p}は設定含めてアンインストールしているように見えました。

2019年11月11日月曜日

apt-getコマンド


概要

パッケージをインストールする際に、ファイル転送も含めて一度にやってくれる便利なapt-getコマンドについて情報をまとめます。

要点

  • apt-getコマンドについて
  • apt-getコマンドはパッケージ管理をしてくれるコマンドで、インストールする際に必要なファイルを転送してくれて、ほかのパッケージとの依存関係があれば、解決しながらインストールをしてくれるとても便利なコマンドです。
    コマンドを実行する際には、任意のオプションと必須のサブコマンドをつけて実行します。

    オプション 説明
    -d ファイルのダウンロードだけする
    -s システムを変更せず動作をシミュレートする

    サブコマンド 説明
    install パッケージをインストールする
    remove パッケージをアンインストールする
    update パッケージリストのデータベースを更新する
    upgrade インストール済みのパッケージの内容を最新の状態にアップグレードする

  • apt-getコマンドに関連する設定ファイル
  • apt-getコマンドはパッケージファイルをネットワークの先から持ってくる必要があるので、設定ファイルに必要なサーバの情報を記載する必要があります。私のラズパイの設定を見ると以下のように書かれていました。
    
     $ cat /etc/apt/sources.list
      deb http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
      # Uncomment line below then 'apt-get update' to enable 'apt-get source'
      #deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
    
    
    URLにアクセスすると以下のページにアクセスできます。
    apt-getコマンドを使うとここからパッケージファイルをダウンロードすることになります。



  • apt-getコマンドを使ったパッケージ情報の更新
  • 
     # apt-get update
     取得:1 http://archive.raspberrypi.org/debian buster InRelease [25.2 kB]
     取得:2 http://raspbian.raspberrypi.org/raspbian buster InRelease [15.0 kB]
     取得:3 http://archive.raspberrypi.org/debian buster/main armhf Packages [259 kB]
     取得:4 http://raspbian.raspberrypi.org/raspbian buster/main armhf Packages [13.0 MB]
     13.3 MB を 45秒 で取得しました (295 kB/s)
     パッケージリストを読み込んでいます... 完了
    
    

  • apt-getコマンドを使ったパッケージのインストール
  • 試しにapt-getを使ってsnmpというパッケージをインストールしてみます。
    apt-getを使うと依存関係のあるパッケージも一緒にインストールしてくれます。

    
     # apt-get install snmp
     パッケージリストを読み込んでいます... 完了
     依存関係ツリーを作成しています
     状態情報を読み取っています... 完了
     以下の追加パッケージがインストールされます:
       libmariadb3 libsnmp-base libsnmp30 mariadb-common mysql-common
    【以下略】
    
    

  • apt-getコマンドを使ったパッケージのアンインストール
  • 
    #apt-get remove 【準備中】
    
    
  • apt-getコマンドを使ったインストール済みパッケージのアップグレード
  • apt-get upgrade コマンドを実行すると、インストール済みのパッケージの内容をアップグレードしてくれます。
    途中で追加のデータが必要な場合には「続行しますか?」と聞いてくるので、大文字の「Y」を打てば続行してくれます。
    
     # apt-get upgrade
      パッケージリストを読み込んでいます... 完了
      依存関係ツリーを作成しています
      状態情報を読み取っています... 完了
      アップグレードパッケージを検出しています... 完了
      以下のパッケージは保留されます:
        libjavascriptcoregtk-4.0-18 libwebkit2gtk-4.0-37
      以下のパッケージはアップグレードされます:
        dhcpcd5 firmware-atheros firmware-brcm80211 firmware-libertas firmware-misc-nonfree firmware-realtek gldriver-test libarchive13 libfribidi0 pi-bluetooth
        piwiz python-piglow python3-piglow raspberrypi-sys-mods rpi-eeprom rpi-eeprom-images
      アップグレード: 16 個、新規インストール: 0 個、削除: 0 個、保留: 2 個。
      16.1 MB のアーカイブを取得する必要があります。
      この操作後に 17.4 kB のディスク容量が解放されます。
      続行しますか? [Y/n] Y
      取得:2 http://archive.raspberrypi.org/debian buster/main armhf dhcpcd5 armhf 1:8.1.1+really7.0.8-0.1+rpt2 [142 kB]
      取得:1 http://ftp.jaist.ac.jp/pub/Linux/raspbian-archive/raspbian buster/main armhf libarchive13 armhf 3.3.3-4+deb10u1 [271 kB]
      【以下略】
    
    

dpkgコマンドについて

概要

Debian系のLinuxのパッケージ管理を行う際に使用するdpkgコマンドについての情報をまとめます。


要点

  • dpkgコマンドについて
  • dpkgコマンドを使う際には、任意のオプションと必須のアクションを指定する必要があります。


    オプション 説明
    -E 同じバージョンがインストールされている場合はインストールしない
    -G 新バージョンがインストールされている場合はインストールしない
    -R 再帰的に処理する


    アクション 説明
    -i パッケージをインストールする
    -r 設定ファイルを残してアンインストールする
    -P 設定ファイルも含めてアンインストールする
    -l インストール済みパッケージを表示する
    -L 指定パッケージからインストールされたファイルを一覧表示する
    -s パッケージの情報を表示する
    --configure 展開されたパッケージを構成する
    --unpack パッケージをインストールせず展開する(解凍する)
    -P

  • deb形式のパッケージファイルについて
  • deb形式のファイルは拡張子が.debとなっているファイルで、ファイル名には「パッケージ名称」、「バージョン情報」、「アーキテクチャ(i386など)」が書かれています。
    必要なパッケージとバージョンを、アーキテクチャ32bit版、64bit版などの情報に注意してファイルを選択します。
    取得したファイルは、USBなどの媒体に入れて運ぶか、SCPやなどのファイル転送のツールを使ってインストールしたい装置にファイルを移動します。

  • パッケージのインストール
  • おそらくdpkgのなかで一番使うアクションだと思います。
    間違ってバージョンを下げないように-Gをつけてい置くと安全なのかもしれません。
    ルート権限で行う必要があります。
    
     # dpkg -G -i debファイル 【準備中】
    
    
  • 設定ファイルも含めたパッケージのアンインストール
  • 設定ファイルだけ残してアンインストールしてもしょうがないと思うので、使うならpurgeアクションで使うと思います。
    ルート権限でおこなう必要があります。
    
     # dpkg -p debファイル 【準備中】
    
    
  • インストール済みパッケージの確認(一覧)
  • 装置にインストールされているファイルの一覧を表示します。
    例えば、zip関連のパッケージを確認する場合は以下のように確認することができるので便利です。
    
     $ dpkg -l | grep zip
     ii  bzip2                                 1.0.6-9.2~deb10u1                   armhf        high-quality block- 
     sorting file compressor - utilities
     ii  gzip                                  1.9-3                               armhf        GNU compression 
     utilities
     ii  unzip                                 6.0-23+deb10u1                      armhf        De-archiver for .zip 
     files
     ii  zip                                   3.0-11                              armhf        Archiver for .zip 
     files
    
    
  • インストール済みパッケージの確認(詳細)
  • このコマンドはパッケージの詳細を見るときに使うようです。
    試しにunzipのパッケージに使ってみたら以下のような情報が見れました。
    
     $ dpkg -s unzip
     Package: unzip
     Status: install ok installed
     Priority: optional
     Section: utils
     Installed-Size: 466
     Maintainer: Santiago Vila 
     Architecture: armhf
     Multi-Arch: foreign
     Version: 6.0-23+deb10u1
     Depends: libbz2-1.0, libc6 (>= 2.4)
     Suggests: zip
     Description: De-archiver for .zip files
      InfoZIP's unzip program. With the exception of multi-volume archives
      (ie, .ZIP files that are split across several disks using PKZIP's /& option),
      this can handle any file produced either by PKZIP, or the corresponding
      InfoZIP zip program.
      .
      This version supports encryption.
     Homepage: http://www.info-zip.org/UnZip.html
    
    

2019年11月9日土曜日

ブートローダ(GRUB系)について

概要

ハードディスからOSを読み込んで起動するプログラムをブートローダといいます。
代表的なブートローダがGRUBであり、GRUBには「GRUB Legacy」と「GRUB2」があります。
ここではGRUB2の設定方法についての情報を記載します。

要点

  • GRUB2の設定
  • GRUB2の設定は/etc/default/grubファイルに設定パラメータを記載してから、
    grub-mkconfigコマンドを実行することで、/boot/grub/grub.cfgに設定が反映されます。

    ※/etc/default/grubの設定例
    
     # cat /etc/default/grubの結果 【準備中】
    
    

    パラメータ名 意味
    GRUB_TIMEOUT 起動メニューがタイムアウトするまでの秒数

  • grub-mkconfigコマンド
  • /etc/default/grubの設定を反映するには、grub-mkconfigコマンドを使います。
    設定ファイルに反映させる場合には、「-o」のオプションをつけて、「/boot/grub/grub.cfg」
    を引数として記載する必要があります。

    
     # grub-mkconfig -o /boot/grub/grub.cfg 【準備中】
    
    

Linuxのパーティションについて

概要

Linuxをインストールする際に設定するパーティションに関しての情報をまとめます。

要点

Linuxをインストールする際には以下のディレクトリを、それぞれ別のパーティションに分割して利用するのが 一般的なようです。
  • /home
  • 一般ユーザのデータが格納されます。/home/アカウント名/というような形でフォルダが作成されるので、
    大人数が使用するシステムだとサイズを大きくする必要があります。

  • /var
  • ログファイルなどが格納されるフォルダです。ここのサイズを大きくするとそれだけ多くのログを残せます。
    ここのパーティションを分けないと、例えばログのサイズが膨大なものになった場合に、ほかのディレクトリへ
    影響を与えてしまう可能性があります。

  • /usr
  • プログラムやライブラリなどが格納されるディレクトリなので運用中にサイズが大きくなることが少ないです。

  • /boot
  • カーネルなどが格納されているディレクトリです。

  • スワップ領域
  • 仮想メモリとして利用される領域で搭載している物理メモリの1,2倍のサイズを割り当てることが多いようです。

  • /(ルート)
  • 上位以外のパーティションを設定していないディレクトリが/(ルート)配下に割り当てられます。

  • パーティションの確認方法
  • 実際にどのような割合でパーティションが割り当てられているかを確認するにはfdiskコマンドを使用します。 以下はラズパイで見た様子なので2つにしか分かれていないように見えます。
    
     # fdisk -l
     Disk /dev/ram0: 4 MiB, 4194304 bytes, 8192 sectors
     Units: sectors of 1 * 512 = 512 bytes
     Sector size (logical/physical): 512 bytes / 4096 bytes
     I/O size (minimum/optimal): 4096 bytes / 4096 bytes
     (省略)
     Device         Boot  Start      End  Sectors  Size Id Type
     /dev/mmcblk0p1        8192   532479   524288  256M  c W95 FAT32 (LBA)
     /dev/mmcblk0p2      532480 15196159 14663680    7G 83 Linux
    
    

2019年11月8日金曜日

systemdについて

概要

Linuxのプロセス起動に使われているsystemdについての情報をまとめます。


要点

  • systemd関連のプロセス
  • systemdはLinux上のサービスを管理する仕組みで、以下のデーモンプロセスによって構成されています。

    デーモンプロセス 説明
    systemd systemdのメインプロセス
    systemd-timesyncd 時刻同期関連のプロセス
    ystemd-logind ログイン関連のプロセス
    systemd-udevd デバイス検知関連のプロセス
    systemd-journald ジャーナル(systemd関連のログ)管理をするプロセス

  • systemdで扱うUnit
  • SystemdはUnitと呼ばれる単位でサービスを管理しています。 Unitはファイルの拡張子で分類することができ、通常のプロセスであればserviceファイルを使いますが、
    ほかにも以下の種類があります。

    ファイルの拡張子 説明
    service プロセスを起動する
    device デバイスを表す
    mount ファイルシステムをマウントする
    swap スワップ領域を有効にする
    target Unitファイルをグループ化する

  • systemctlコマンドによるUnitの管理
  • systemdを使ったUnitの管理にはsystemctlコマンドを使用します。

    主なサブコマンド 説明
    status Unitの稼働状況を確認する
    start Unitを起動する
    stop Unitを停止する
    enable Unitの自動起動を有効にする
    disable Unitの自動起動を無効にする
    list-unit-files Unitの一覧を表示する

    
     $ systemctl status ssh
     ● ssh.service - OpenBSD Secure Shell server
        Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
        Active: active (running) since Fri 2019-11-08 20:24:52 JST; 17h ago
          Docs: man:sshd(8)
                man:sshd_config(5)
       Process: 408 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
      Main PID: 423 (sshd)
         Tasks: 1 (limit: 2200)
        Memory: 4.0M
        CGroup: /system.slice/ssh.service
                mq423 /usr/sbin/sshd -D
    
     11月 08 20:24:52 raspberrypi systemd[1]: Starting OpenBSD Secure Shell server...
     11月 08 20:24:52 raspberrypi sshd[423]: Server listening on 0.0.0.0 port 22.
     11月 08 20:24:52 raspberrypi sshd[423]: Server listening on :: port 22.
    
    

起動とshutdownコマンド

概要

Linuxの起動時処理の見方と、シャットダウンコマンドの使い方についての情報をまとめます。

要点

  • 起動時のカーネルの処理
  • Linux起動時のカーネルの処理内容はdmesgコマンドで確認することができます。
    
    $dmesg
    
    
    dmesgの内容は/var/log/dmesgにも保存されます。

  • システムのシャットダウン
  • システムを停止する際には、電源ケーブルを抜いたり電源ボタンを押したりするのではなく、shutdownコマンドを使用することで安全に停止することができます。
    オプション 説明
    -h シャットダウンする
    -r 再起動する
    -k シャットダウンは行わず、
    警告メッセージをログインしている人全員に通知

    ※すぐに再起動したいとき
    
     # shutdown -r now
    
    

    ※警告メッセージを出して、5分後にシャットダウンするとき
    
     # shutdown -h +5 "Please logout!"
     Shutdown scheduled for Fri 2019-11-08 16:48:11 JST, use 'shutdown -c' to cancel.
    
    
    ※このようなメッセージが出ます
    
     Please logout!
     The system is going down for poweroff at Fri 2019-11-08 16:48:11 JST!
    
    

    ※23:00に再起動をするとき
    
     # shutdown -r 23:00
     Shutdown scheduled for Fri 2019-11-08 23:00:00 JST, use 'shutdown -c' to cancel.
    
    

ハード基礎知識


概要

デバイス情報を確認するためのLinuxコマンドについての情報をまとめます。

要点

  • CPU情報の確認
  • Linuxのデバイスに関する情報は/proc配下のファイルで確認する事ができます。
    
     $ cat /proc/cpuinfo
     processor       : 0
     model name      : ARMv7 Processor rev 4 (v7l)
     BogoMIPS        : 38.40
     Features        : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32
     CPU implementer : 0x41
     CPU architecture: 7
     CPU variant     : 0x0
     CPU part        : 0xd03
     CPU revision    : 4
     (以下省略)
    
    
  • PCIデバイスの情報を表示
  • PCが使用可能なPCIデバイス情報は、lspciコマンドで表示することができます。
    
    $lspci
    
    
  • USBデバイスの情報を表示
  • 接続しているUSBデバイスの情報は、lsusbコマンドで表示することができます。

    ※lsusbコマンドでよく使うオプション
    オプション 説明
    -v 詳細に表示する
    -t 階層をツリー構成で表示する

    
     $ lsusb -t
     /:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M
         |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/5p, 480M
             |__ Port 1: Dev 3, If 0, Class=Vendor Specific Class, Driver=smsc95xx, 480M
    
    

  • カーネルモジュールの確認
  • Linuxでデバイスを利用するために必要なプログラムをカーネルモジュールといい、デバイスを使用する際にはロードしておく必要があります。 現在ロードされているカーネルモジュールを確認するにはlsmodコマンドを使います。
    
     $ lsmod
     Module                  Size  Used by
     fuse                  110592  3
     rfcomm                 49152  4
     bnep                   20480  2
     hci_uart               40960  1
     btbcm                  16384  1 hci_uart
    (以下省略)
    
    
    必要なカーネルモジュールを手動でロードする際にはmodproveコマンドを使用します。
    
    # modprobe XXXX