「linux」タグアーカイブ

RaspberryPiでプログラムを自動起動する方法

RaspberryPiでせっかく作ったプログラム、毎回コマンドやマウスで動かしてたらキリがない。
まして、電源入れたらひとりでに起動する組み込みで使用したい。自動化どうするんだっけ・・・

こんにちは、北神です。

RaspberryPiで、プログラムを自動起動する方法です。

古きLinuxユーザーの方は、init.dを想像するかもしれませんが、
今ではsystemdという仕組みが物凄く簡単ですので、ぜひsystemdを活用してみてください。

ます、systemdで起動する内容を設定する .serviceというファイルを作成します。
主にテキストのファイルですので、nanoやviで書き込みます。

[Unit]
Description= Custom Service
[Service]
Type=simple
ExecStart=/usr/bin/python3 /home/pi/service.py
[Install]
WantedBy=multi-user.target

Sytemdでは、service記述によりたくさんのオプションがあり、細かく設定する事ができます。
上記では、/home/piに保存したservice.pyをPython3で起動する単純な物です。

このファイルを、以下のコマンドでディレクトリにコピーします。
仮に hello.service としましょう。

sudo cp hello.service /etc/systemd/system/
sudo systemctl daemon-reload

これで、Systemdが読みに行けるファイルになりました。

実際に、起動を開始するには

sudo systemctl start hello.service 

終了する際は

sudo systemctl stop hello.service 

で行うだけです。

また、状態の確認は

sudo systemctl status hello.service 

で行えます。

簡単ですね。

最後に、自動起動を設定する際は、

sudo systemctl enable hello.service 

で行い、逆に自動起動を停止する際は

sudo systemctl disable hello.service 

で行えます。

非常に簡単ですので、覚えておいて損はないでしょう。

それでは!

株式会社アバンドでは、IoTに関するネットワーク開発、ハードウエア開発を行っております。

まずは、お気軽にお問い合わせください。

RaspberryPiでRAMディスク化する方法

RaspberryPiはLinuxで動いていますが、突然電源を切ってしまうと、ディスクを壊したりOSが起動しなくなる。
そんな問題が起きたりします。

回避のために行った内容をまとめていきます。

こんにちは、北神です。

RaspberryPiは組込み用途を想定された作りをしていない為、所謂「電源のブチ切り」には対応していません。

しかし、次第に組込み用途で使用される事が増え、世界中のエンジニアがアイディアを出し合い、とても良い方法が提案されました。

それは、「overlayfs」です。

この機能は、OSやアプリケーションの設定を変更せずに、起動時は、ディスクをRO(リードオンリー)に設定し、
起動後にアプリが書き込むファイルは、RAM上でRW(リードライト)にする機能です。

もう少し詳しく話しますと、

フォルダのアドレスをRAMやtmpに変更する必要がなく、書き換えや保存も”見かけ上”変更なく同等に実行されます。

しかし、見かけ上問題がないだけで、内部では書き換えや保存はRAM上で行われる為、保存ができたと思っても再起動をしますと保存前に戻ります。

さらに、試して気が付きましたが、書き込みがRAM上で行われる為、起動完了までの時間が少し速くなる事がわかりました。

ただ、ログ等の書き込みがRAMで行われてしまう為、電源を抜くと確認しに行く事ができない事を留意してください。

早速、そのoverlayfsの設定方法ですが

コマンドにて

sudo raspi-config nonint enable_overlayfs

これだけです。
これだけで、Rebootを行うと、起動時にROで立ち上がります。
書き込みや保存は全てRAMに転送されますので、保存されません。
これにより、電源ブチ切りを行っても、SDカードのディレクトリに障害は発生しません。
起動失敗による障害が減ると予想されます。

また、再びディスクに書き込みや保存を行いたい際は

sudo raspi-config nonint disable_overlayfs

を行い、再起動後に書き換えができます。

このoverlayfsに加え、systemd(systemctl)を駆使する事で、組込み用途で使用できるRaspberryPiに変化させる事できます。

それでは!

株式会社アバンドでは、IoTに関するネットワーク開発、ハードウエア開発を行っております。

RaspberryPiを用いた組込みや試作にも対応しております。

まずは、お気軽にお問い合わせください。

「うるう秒」挿入のお知らせ、何?

総務省 情報通信国際戦略局 技術政策課より

「うるう秒」挿入のお知らせ
http://www.soumu.go.jp/menu_news/s-news/01tsushin03_02000031.html

うるう秒とは(上記PDFがHTML化していないので、抜粋)
時刻は、かつて地球の公転・自転に基づく天文時(世界時)から決められていましたが、1958年より原子の振動を利用した原子時計(注)に基づく国際原子時が開始され、1秒の長さが非常に高精度なものとなった結果、原子時計に基づく時刻と天文時に基づく時刻との間でずれが生じるようになりました。
そこで、原子時計に基づく時刻を天文時とのずれが0.9秒以内におさまるように調整を行った時刻を世界の標準時(協定世界時)として使うことにしており、今回その調整を行うために「うるう秒」の挿入が行われるものです。うるう秒の調整は1972年から数年に1回程度行われています。

「うるう秒」の調整は、地球の回転の観測を行う国際機関である「国際地球回転・基準系事業(IERS:International Earth Rotation and Reference Systems Service、所在地:パリ)」が決定しており、これを受けて世界で一斉にうるう秒の調整が行われています。日本では、総務省及びNICTが法令に基づき標準時の通報に係る事務を行っており、IERSの決定に基づきNICTにおいて日本標準時にうるう秒の挿入を実施しています。
NICTでは、本年1月5日のIERSのうるう秒挿入の決定を受け、7月1日(日)に日本標準時に「うるう秒」の挿入を実施します。なお、最近では3年半前となる平成21年(2009年)1月1日にうるう秒の調整が行なわれました。

技術者的には、
当然、電波時計じゃない人は1秒腕時計がズレるが、たぶん、ほぼ気がつかない。
パソコンやサーバはNTP(Network Time Protocol )の設定されていれば、時間が修正されます。
(NTPの設定を知らんという人があれば、言ってください、記事化します。)

困るのは、1秒単位で統計している人やシステム、1秒単位で決済等を行う人やシステム。
たとえば、車のスピードを測り、交通情報を出しているところ、60秒が61秒になるので、少しだけ、渋滞が緩和した情報になる可能性がある。
GPS等を使っている場合は、位置調整でスピードと距離を使っている場合、少し誤差がでる可能性がある。
システムによっては、時間が逆行する場合があるので、この一秒を使って、オークションサイト等で不正が起きる可能性がある。

技術的にはIBMが分かりやすい。
【Technical Notes】Linux システムクロックの『うるう秒』調整
http://www-06.ibm.com/jp/domino01/mkt/cnpages7.nsf/page/default-0019DB89?OpenDocument&TableRow=1.2

Redhat up2date スキップしたい場合。

Redhat Enterprise
up2date -l でアップデート一覧を出し、
up2date -u で問答無用にすべてアップデートすることがあります。
しかし、モジュールがないとエラーがでて、そして、途方にくれますよね。
特に、開発系のものはよくある。
大量になければ、一つ一つアップデートすればいいでのが、
この1つだけスキップしたい!

/etc/sysconfig/rhn/up2date

pkgSkipList=perl*;kernel*;
のように書くです。

ちなみに、他でも書いていますが、up2date -l でup2date自体がでたら、先にup2date -u up2dateをした方がいい。
最近は自動で先にやってくれるか、危険。

ZABBIXエージェントを使用しないサーバ監視方法(ping監視)

ZABBIXエージェントを使用しないサーバ監視方法(ping監視)
Zabbix 1.8.7の場合

○ZABBIXサーバの設定
■初期設定
通知用のメール設定
[メニュー] → [管理] → [メディアタイプ] → [Email]から設定

■ZABBIXサーバの監視設定
ZABBIXサーバ自体の監視を有効に変更
※有効にする前に下記不要な監視(FTP,IAMP,POPのサービス監視)を無効にします。

・プロセス監視の設定変更
1.[設定]→[ホスト]→ [Zabbix server – アプリケーション]を選択。

2.「Template_Linux:Processes」項目の[アイテム]選択

3.「proc.num[inetd]」を選択して無効に変更

・サービス監視の設定変更
1.「Template_Linux:Services」項目の[アイテム]を選択

2.「net.tcp.service[ftp]」、「net.tcp.service[nntp]」、「net.tcp.service[imap]」、「net.tcp.service[pop]」を選択して無効に変更

・ZABBIXサーバ自体の監視を有効にする
1.[設定]→[ホスト]→ [Zabbix server – 無効]を[Zabbix server – 有効]に変更

■テンプレートの追加
・テンプレートのダウンロード

http://www.zabbix.jp/modules/bwiki/index.php?ZABBIX-JP%B4%C6%BB%EB%A5%C6%A5%F3%A5%D7%A5%EC%A1%BC%A5%C8%C7%DB%C9%DB%A5%DA%A1%BC%A5%B8

(ZABBIX-JP監視テンプレート配布ページ)
Template_OS_Linux
Template_App_bind
Template_App_cupsd
Template_App_dhcpd
Template_App_ldap
Template_App_postfix
Template_App_sshd
Template_App_samba
Template_App_httpd

・ダウンロードしたテンプレートのインポート
1.[設定]→[テンプレート]→[テンプレートのインポート]を選択

2.「インポートするファイル」を指定してインポートボタンを押下

■ping監視用のテンプレートを作成
・テンプレートの作成
[設定]→[テンプレート]→[テンプレートの作成]を選択

下記を設定して保存
~~~~~~~~~~~~~~~~~
名前 :Template_ping_check
グループ :Templates
~~~~~~~~~~~~~~~~~

・アイテムの作成
[設定]→[テンプレート]→[Template_ping_check – アイテム]を選択

・[アイテムの作成]を選択

下記内容でアイテムを作成
~~~~~~~~~~~~~~~~~
説明        :Ping Check
タイプ       :シンプルチェック
キー         :icmpping
データ型       :数値(整数)
データの形式     :10進数
値のマッピングの使用 :なし
アプリケーションの作成:icmpping
~~~~~~~~~~~~~~~~~

・トリガーの作成
[設定]→[テンプレート]→[Template_ping_check – トリガー]を選択

・ [トリガーの作成]を選択

下記内容でトリガーを作成
~~~~~~~~~~~~~~~~~
名前:Ping Check
条件式 :{Template_ping_check:icmpping.last(0)}=0
深刻度:重度の障害
~~~~~~~~~~~~~~~~~

○監視ホストの追加
1.[設定]→[ホスト]→[ホストの作成]

2.下記内容を設定して[保存]
~~~~~~~~~~~~~~~~~
名前:XXXXXXXXX
グループ:Linux servers
DNS名:XXXXXXXXXXXXXXX
IPアドレス:192.168.XXX.XXX
接続方法:IPアドレス
リンクしているテンプレート:Template_ping_check
~~~~~~~~~~~~~~~~~
※XXXXには任意の値を設定

3.監視データの確認
[監視データ] → [ダッシュボード] に追加したホストが表示される

zabbix-jp-1.8インストール手順

zabbix-jp-1.8インストール手順

【参考サイト】
http://wiki.livedoor.jp/you_hiko/d/Zabbix%201.8%A4%F2CentOS%205%B7%CF%A4%CB%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB%A4%B9%A4%EB%BC%EA%BD%E7#content_1_1

CentOS 5
Zabbix 1.8.7

■YUMのリポジトリをインストール

# rpm -ivh http://www.zabbix.jp/binaries/relatedpkgs/rhel5/x86_64/zabbix-jp-release-5-3.noarch.rpm

■現在使用しているリポジトリのZABBIXバージョンの確認

# alternatives --display zabbix-jp-release
zabbix-jp-release -ステータスは自動です。
リンクは現在 /usr/share/zabbix-jp-release/zabbix-jp-1.6.repo を指しています。
/usr/share/zabbix-jp-release/zabbix-jp-1.1.repo - 優先項目 10
/usr/share/zabbix-jp-release/zabbix-jp-1.4.repo - 優先項目 20
/usr/share/zabbix-jp-release/zabbix-jp-1.6.repo - 優先項目 40
/usr/share/zabbix-jp-release/zabbix-jp-1.8.repo - 優先項目 30
現在の「最適」バージョンは /usr/share/zabbix-jp-release/zabbix-jp-1.6.repo です

■優先順位を上げるバージョンを切り替える

# alternatives --config zabbix-jp-release

4 プログラムがあり ‘zabbix-jp-release’ を提供します。

選択       コマンド
-----------------------------------------------
1           /usr/share/zabbix-jp-release/zabbix-jp-1.1.repo
2           /usr/share/zabbix-jp-release/zabbix-jp-1.4.repo
*+ 3           /usr/share/zabbix-jp-release/zabbix-jp-1.6.repo
4           /usr/share/zabbix-jp-release/zabbix-jp-1.8.repo

Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:4

■zabbixのインストール

# yum -y install zabbix zabbix-agent zabbix-server zabbix-server-mysql zabbix-web zabbix-web-mysql

■MySQLにzabbixデータベースを作成

# mysql -uroot -p
mysql> create database zabbix;
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by 'xxxxxxx';
mysql> flush privileges;
mysql> quit

■初期データベースをインポート

# mysql -u zabbix -p -D zabbix < /usr/share/doc/zabbix-server-1.8.7/schema/mysql.sql
# mysql -u zabbix -p -D zabbix < /usr/share/doc/zabbix-server-1.8.7/data/data.sql
# mysql -u zabbix -p -D zabbix < /usr/share/doc/zabbix-server-1.8.7/data/images_mysql.sql

■PHP設定

# vi /etc/php.ini
; Defines the default timezone used by the date functions
; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone
date.timezone = Asia/Tokyo

;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;

; Maximum execution time of each script, in seconds
; http://www.php.net/manual/en/info.configuration.php#ini.max-execution-time
memory_limit = 128M
post_max_size = 16M
max_execution_time = 300
max_input_time = 300

■初期設定
1.Zabbixサーバー側

# vi /etc/zabbix/zabbix_server.conf
### Option: DBHost
#       Database host name.
#       If set to localhost, socket is used for MySQL.
#

# DBHost=localhost

### Option: DBName
#       Database name.
#       For SQLite3 path to database file must be provided. DBUser and DBPassword are ignored.

DBName=zabbix

### Option: DBUser
#       Database user. Ignored for SQLite.

DBUser=zabbix <- データベースユーザ名を設定

### Option: DBPassword
#       Database password. Ignored for SQLite.
#       Comment this line if no password is used.

DBPassword=XXXXXXXX <- コメントアウトを外してデータベースパスワードを設定

### Option: DBSocket
#       Path to MySQL socket.

DBSocket=/var/lib/mysql/mysql.sock

2.Zabbixサーバー起動

#/etc/rc.d/init.d/zabbix-server start

3.Zabbixエージェント側

# vi /etc/zabbix/zabbix_agentd.conf
### Option: Server
#       List of comma delimited IP addresses (or hostnames) of Zabbix servers.
#       No spaces allowed. First entry is used for receiving list of and sending active checks.

Server=127.0.0.1

### Option: Hostname
#       Unique, case sensitive hostname.
#       Required for active checks and must match hostname as configured on the server.
#       System hostname is used if undefined.

Hostname=Zabbix server

### Option: ListenIP
#       List of comma delimited IP addresses that the agent should listen on.
#

ListenIP=127.0.0.1

4.Zabbixエージェント起動

# /etc/init.d/zabbix-agent start

5.自動起動設定

# chkconfig zabbix-server on
# chkconfig zabbix-agent on

ディスク・パンクしたときにファイル容量を見る

ディスクが急に90パーセントになって、驚くことがありますよね。
そうです。普通は/var/logのログを見て、消せるものは消す。というのが
あるのですが、/var/logでも、DBの実データも巨大化していない。
しかし、確かにでかい。というときに。

このコマンド(linux OS)

du
指定したファイル以下の全ファイル階層による使用量を表示します。
そして、-hで単位で表示してくれる。なのでGとかを見つけてください。
( HELP-manより:
それぞれのサイズに、例えばメガバイトなら M のようなサイズ文字 を
付 加 す る 。 10 の 累乗ではなく 2 の累乗を用いるので、 M は
1,048,576 バイトを表す。)

こんな感じで出ます。下記は/からの容量です。これをうまくgrep等を使って、容量が多いものを見つけ出してください。
# du -h /
0 /misc
0 /net
16K /etc/xml
8.0K /etc/cluster
128K /etc/setuptool.d
8.0K /etc/cups/ppd
8.0K /etc/cups/interfaces
・・・・・・・

dkmsとは そして、bulidが終わらない。

■dkms(Dynamic Kernel Module Suppor)とは
Dell社が提供しているもので、モジュールを各カーネルに合わせて簡易な形でビルドとインストールして配置・管理するための仕組み。
ドライバー等のモジュールで使用します。

・Dell の DKMS ページ
http://linux.dell.com/dkms/
http://linux.dell.com/dkms/dkms-ols2004.pdf

下記のコマンドを使用する。
dkms build -m ドライバ名 -v ドライバのバージョン -k カーネルのバージョン –config Configの場所(/boot/の下にある場合が多い) –kernelsourcedir カーネルソースのディレクトリ –arch カーネルのarch
dkms install -m ドライバ名 -v ドライバのバージョン -k カーネルのバージョン –config Configの場所(/boot/の下にある場合が多い) –kernelsourcedir カーネルソースのディレクトリ –arch カーネルのarch

カーネルのarchは
uname -m
で情報取得

コマンド例:
dkms build -m hogehoge -v 2.9.1 -k 2.6.9-89.0.16.EL –config /boot/config-2.6.9-89.0.16.EL –kernelsourcedir /lib/modules/2.6.9-89.EL/build/ –arch i686
dkms install -m hogehoge -v 2.9.1 -k 2.6.9-89.0.16.EL –config /boot/config-2.6.9-89.0.16.EL –kernelsourcedir /lib/modules/2.6.9-89.EL/build/ –arch i686

■dkmsでbuildが何時間も終わらない。エラーも出ない。
make oldconfig….で何時間も止まってしまった方へ
kernelsourcedirと実際動いているのカーネルのバージョンが違う場合、この現象がでる場合があるようです。

当然、エラーがでると思うのですが、buildが終わらないままです。
カーネルをアップデートするか、ソースを同じものを用意して、再度buildしてみてください。

「共有オブジェクトファイルを開けません」と出たら。

linuxのコンパイル時や実行時で「共有オブジェクトファイルを開けません」または「cannot open shared object file」と
出て止まったら・・・
まず、makeのパラメータを疑うのですが、しかし、そのままメッセージを信用してみましょう。
そうです。共有オブジェクト→共有ライブラリの設定です。
#vi /etc/ld.so.conf.d/lib.conf←ここのファイル名は適当でよいので新規に用意します。
/usr/local/lib の一行を書き込む。使用したいライブラリーパスです。
それでファイルを閉じる。
共有ライブラリをシステムに認識させるためのコマンドを実行。
#ldconfig
ライブラリが登録されたか、表示オプションで確認。
#ldconfig -pで確認です。

LINUXでフォントをお探しな方へIPA Fonts

IPA(独立行政法人情報処理推進機構)という、いわゆる行政法人な機構が
真面目にフォントを作ってくれました。
最近まで知らなかったのですが例の渡邊フォントの事件があってから真剣に調べた。

・渡邊フォントの詳細はWIKIへ
http://ja.wikipedia.org/wiki/%E6%B8%A1%E9%82%8A%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88

・IPA フォント
http://ossipedia.ipa.go.jp/ipafont/

LINUXで使用する場合は、フォントを解凍して、
フォントのディレクトリに入れて、フォントキャッシュ更新です。
fc-cache -fv

・各OSのインストールについて
http://ossipedia.ipa.go.jp/ipafont/fontinstall.html