computerの日記

Cisco,SHELL,C,Qt,C++,Linux,ネットワーク,Windows Scriptなどの発言です

sar-analyzer の開発状況(20180805)

さて、sar-analyzer のバージョン、10.0 を発表しました。

このバージョンの特徴は、それぞれのソースコードでオブジェクトファイルを生成するようにしたことです。

これにより、近い将来、ライブラリを作成する事ができると考えます。

要すれば、sar-analyzer が、違う形になる事ができる、それを目指しています。

github.comカップ麺、うめー。

LFS scripts ですが、LFS 8.2 対応版の補助的説明

お疲れさまです。

sourceforge.net

上記リンクに展開している LFS 8.2 対応スクリプトですが、ユーザから連絡があり、一部バグがありましたので、現在は直っています。連絡していただいた方、ありがとうございました。

さて、LFS Book のよさを損うことのないような作りにしています。

というのは、簡単にディストリビューションができてしまわないようにしています。

したがって、本来なら、LFS Book を読んで、分からないところは自分で調べて、色々と試してみる、ということをやってもらいたいです。

とはいうものの、面倒な手順を少しでも楽にしてあげたい、という気持ちの結実したものでもあります。

 

PART1-2/README に、ブロックデバイスの初期化の話が出てきます。

例えば、VirtualBox だと、ストレージを追加して、root で fdisk を走らせます。

fdisk の類似のコマンドでもよいです。

ちなみに、LFS をやるのは、十分に時間が取れるときにしましょう。

お腹すいたァ。。

VirtualBox でクローンすると ip address がおかしくなる現象について

VirtualBox でクローンすると ip address がおかしくなる現象について、解決策のメモです。

1. クローン対象のマシンを立ち上げます。
2. 以下のファイルを削除します。
/etc/udev/rules.d/70-persistent-net.rules
3. マシンをシャットダウンします。
# shutdown -h now
4. クローンします(MAC アドレスを再初期化にチェックを入れますFULL CLONE)
5. 作成されたマシンを立ち上げます
6. /etc/udev/rules.d/70-persistent-net.rules を削除します。
7. マシンを再起動します。
8. ip a コマンドを実行して、MAC アドレスを記録しておきます。
9. /etc/sysconfig/network-scripts/ifcfg-eth0, eth1 を編集して、
記録した MAC アドレスに修正します。
10. /etc/udev/rules.d/70-persistent-net.rules を削除します。
11. マシンを再起動します。

 以上となります。

sar-analyzer の開発状況(20180728)

前回問題とした、segfault ですが、sar ファイルに Average という行が含まれていない時に起こる問題でした。

なぜ、問題が発覚したかというと、自分が管理しているある端末が吐いた sar file がそのようになっており、それを sar-analyzer で解析したところ、segfault していました。

sar file に Average 行が含まれないという問題は、ほとんど生起しないと考えられるとはいえ、万が一にそのような事が起こることに備えて、バージョン 9.0 を発表しました。

バージョン 9.0 では、ファイルを解析する前に、一度 Average 行が sar ファイルに含まれているかどうかを検査します。もし、Average 行が含まれていなかった場合は、エラーを表示して停止します。

github.com

台風が来てるから、早めにおいしいものでも食べに行こう。。

sar-analyzer で segfault したので、coredump を読んでみた ( is sar-analyzer の開発状況(20180726))

あるファイルを読み込ませると、sar-analyzer が coredump を吐くので、なぜだろう、と思っていました。ありえない数値のデータが入った sar ファイルを読むと、segfault するようでした。 ちなみに、sar-analyzer のバージョンは、8.5 です。

これは問題だなぁ、と考えているのですが、コード上、どこでひっかかっているのか、どう直したらいいのかを追求したいところです。

すぐにでも直したいところですが、せっかくのチャンスなので、coredump を確認してみようと思います。

 Fedora28 では、以下のディレクトリに coredump が吐かれるようでした。

/var/spool/abrt

今回作成されていたファイルとなります。

# ls /var/spool/abrt/ccpp-2018-07-26-22\:27\:57.89892-6205/
abrt_version cmdline cpuinfo executable kernel mountinfo pid rootdir uid
analyzer core_backtrace crash_function exploitable last_occurrence open_fds proc_pid_status runlevel username
architecture coredump dso_list hostname limits os_info pwd time uuid
cgroup count environ journald_cursor maps os_release reason type

ここで、coredump というファイルがありますので、gdb で読んでみます。

# gdb sar-analyzer /var/spool/abrt/ccpp-2018-07-26-22\:27\:57.89892-6205/coredump
GNU gdb (GDB) Fedora 8.1-23.fc28
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from sar-analyzer...done.
[New LWP 6205]
Core was generated by `./sar-analyzer -D ./tmp -ZM'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0 0x00007f5592201ad5 in __strncpy_sse2_unaligned () from /lib64/libc.so.6
Missing separate debuginfos, use: dnf debuginfo-install glibc-2.27-30.fc28.x86_64
(gdb)

glibc の debuginfo パッケージが必要だということですよで、指示どおり、以下のコマンドを実行しました。

# dnf debuginfo-install glibc-2.27-30.fc28.x86_64
enabling docker-ce-stable-debuginfo repository
enabling docker-ce-edge-debuginfo repository
enabling docker-ce-test-debuginfo repository
enabling updates-debuginfo repository
enabling fedora-debuginfo repository
enabling rpmfusion-free-updates-debuginfo repository
enabling rpmfusion-free-debuginfo repository
enabling rpmfusion-nonfree-updates-debuginfo repository
enabling rpmfusion-nonfree-debuginfo repository
Docker CE Stable - Debuginfo x86_64 3.6 kB/s | 1.8 kB 00:00
Docker CE Edge - Debuginfo x86_64 3.7 kB/s | 2.3 kB 00:00
Docker CE Test - Debuginfo x86_64 5.6 kB/s | 4.0 kB 00:00
Fedora 28 - x86_64 - Updates - Debug 4.3 MB/s | 9.9 MB 00:02
Fedora 28 - x86_64 - Debug 9.3 MB/s | 28 MB 00:03
RPM Fusion for Fedora 28 - Free - Updates Debug 109 kB/s | 448 kB 00:04
RPM Fusion for Fedora 28 - Free - Debug 214 kB/s | 678 kB 00:03
RPM Fusion for Fedora 28 - Nonfree - Updates Debug 46 kB/s | 52 kB 00:01
RPM Fusion for Fedora 28 - Nonfree - Debug 79 kB/s | 105 kB 00:01
メタデータの期限切れの確認は、0:00:00 時間前の 2018年07月26日 22時50分34秒 に実施しました。
依存性が解決されました。
======================================================================================================================================
パッケージ アーキテクチャ バージョン リポジトリ サイズ
======================================================================================================================================
インストール:
glibc-debuginfo x86_64 2.27-30.fc28 updates-debuginfo 14 M
依存関係のインストール:
glibc-debuginfo-common x86_64 2.27-30.fc28 updates-debuginfo 10 M

トランザクションの要約
======================================================================================================================================
インストール 2 パッケージ

総ダウンロードサイズ: 24 M
パッケージ展開後のサイズ: 160 M
これでいいですか? [y/N]: y
パッケージをダウンロードしています:
(1/2): glibc-debuginfo-common-2.27-30.fc28.x86_64.rpm 179 kB/s | 10 MB 00:57
(2/2): glibc-debuginfo-2.27-30.fc28.x86_64.rpm 199 kB/s | 14 MB 01:10
--------------------------------------------------------------------------------------------------------------------------------------
合計 340 kB/s | 24 MB 01:11
トランザクションの確認を実行中...
トランザクションの確認に成功しました。
トランザクションのテストを実行中...
トランザクションのテストに成功しました。
トランザクションを実行中...
準備中 : 1/1
インストール : glibc-debuginfo-common-2.27-30.fc28.x86_64 1/2
インストール : glibc-debuginfo-2.27-30.fc28.x86_64 2/2
Running scriptlet: glibc-debuginfo-2.27-30.fc28.x86_64 2/2
検証中 : glibc-debuginfo-2.27-30.fc28.x86_64 1/2
検証中 : glibc-debuginfo-common-2.27-30.fc28.x86_64 2/2

インストール済み:
glibc-debuginfo.x86_64 2.27-30.fc28 glibc-debuginfo-common.x86_64 2.27-30.fc28

完了しました!

では、もう一度実行してみます。

 # gdb sar-analyzer /var/spool/abrt/ccpp-2018-07-26-22\:27\:57.89892-6205/coredump
GNU gdb (GDB) Fedora 8.1-23.fc28
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from sar-analyzer...done.
[New LWP 6205]
Core was generated by `./sar-analyzer -D ./tmp -ZM'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0 __strncpy_sse2_unaligned () at ../sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S:298
298 movdqu (%rsi), %xmm1
(gdb)

 これではどうでしょうか。

(gdb) bt
#0 __strncpy_sse2_unaligned () at ../sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S:298
#1 0x0000000000402a0f in set_token_items (file_number=file_number@entry=1, item_name=item_name@entry=0x41412e "DEV",
utility=utility@entry=-999, SAR_OPTION=90, line=<optimized out>) at sar_analyzer.c:703
#2 0x000000000040b4f1 in get_word_line (file_number=file_number@entry=1, line=line@entry=0x7ffc08dd6a90,
SAR_OPTION=SAR_OPTION@entry=90, MESSAGE_ONLY=MESSAGE_ONLY@entry=1) at sar_analyzer.c:3581
#3 0x000000000040e858 in read_sar (REPORT=0, MESSAGE_ONLY=1, SAR_OPTION=90, filename=0x7ffc08dd89cf "./tmp/sar24", file_number=1)
at sar_analyzer.c:5226
#4 read_write_file (dname=dname@entry=0x7ffc08ddce4a "./tmp", sar_arr=sar_arr@entry=0x7ffc08ddaa20, files_n=files_n@entry=1,
SAR_OPTION=SAR_OPTION@entry=90, REPORT=REPORT@entry=0, MESSAGE_ONLY=MESSAGE_ONLY@entry=1) at sar_analyzer.c:3860
#5 0x0000000000413ee1 in read_sa_dir (dname=0x7ffc08ddce4a "./tmp", SAR_OPTION=90, REPORT=0, MESSAGE_ONLY=1) at sar_analyzer.c:3748
#6 0x00000000004012cc in main (argc=<optimized out>, argv=0x7ffc08ddaee8) at main.c:377
 

まずは、以下の記述です。

#6 0x00000000004012cc in main (argc=<optimized out>, argv=0x7ffc08ddaee8) at main.c:377

実際のコードは、以下のようになっています。

main.c

377 sar_analyzer_init ( dir_name, file_name, SAR_OPTION, REPORT, MESSAGE_ONLY );

初期化のコードですね。

次は、以下の記述です。

#5 0x0000000000413ee1 in read_sa_dir (dname=0x7ffc08ddce4a "./tmp", SAR_OPTION=90, REPORT=0, MESSAGE_ONLY=1) at sar_analyzer.c:3748

read_sa_dir() という関数で、sa ディレクトリを読み出します。デフォルトでは、./tmp となります。関数の頭もつけてみました。

3650 /*
3651 * This function reads sa directory.
3652 * Sorts file names and puts them into an array.
3653 * Pass an array and file numbers with the SAR_OPTION and REPORT to the function 'read_write_file()'.
3654 *
3655 * Caller : sar_analyzer_init()
3656 *
3657 * Calls : read_write_file()
3658 *
3659 */
3660 static void read_sa_dir ( const char *dname, int SAR_OPTION, int REPORT, int MESSAGE_ONLY )
3661 {

,,,(snip)...

3747 /* now pass an array to the function, this will be done by passing first pointer of an array */
3748 read_write_file ( dname, str_arr_to_function, files_n, SAR_OPTION, REPORT, MESSAGE_ONLY );

今回は、read_sa_dir 関数により、./tmp を読んでいます。

そして、read_write_file () 関数を呼び出しています。

 次は、この記述です。

#4 read_write_file (dname=dname@entry=0x7ffc08ddce4a "./tmp", sar_arr=sar_arr@entry=0x7ffc08ddaa20, files_n=files_n@entry=1,
SAR_OPTION=SAR_OPTION@entry=90, REPORT=REPORT@entry=0, MESSAGE_ONLY=MESSAGE_ONLY@entry=1) at sar_analyzer.c:3860 

read_write_file() 関数の頭もつけておきました。

3809 /*
3810 * This function loops through an array given by 'read_sa_dir()'.
3811 * During the procedure, files are read by 'read_sar()' and data are stored in the struct.
3812 * After 'read_sar()' job is done, calls 'make_report()' to store data in the struct.
3813 *
3814 * Caller read_sa_dir()
3815 *
3816 * Calls: read_sar()
3817 * Calls: make_report()
3818 *
3819 */
3820 static void read_write_file ( const char *dname, char *sar_arr [ ], int files_n, int SAR_OPTION, int REPORT, int MESSAGE_ONLY )
3821 {

...(snip)...

3849 /* read sar files in the hope that 'read_sar()' works fine */
3850 for ( i = 1; i <= files_n; i++ )
3851 {
3852 char str_tmp [ 17 ] = "--------file no.";
3853 char str_num [ 50 ] = { '\0' };
3854 snprintf ( str_num, MAX_INPUT, "%s%d", str_tmp, i );
3855 append_list ( &line_obj, "" );
3856 append_list ( &line_obj, str_num );
3857 append_list ( &line_all_obj, "" );
3858 append_list ( &line_all_obj, str_num );
3859 /* let 'read_sar()' do the job */
3860 read_sar ( i, sar_full_path_arr [ i ], SAR_OPTION, REPORT, MESSAGE_ONLY );
3861 }
3862 make_report ( SAR_OPTION, REPORT, files_n );
3863 }

3860 行目で、read_sar () 関数を呼び出すところですね。

 次は、この記述です。

#3 0x000000000040e858 in read_sar (REPORT=0, MESSAGE_ONLY=1, SAR_OPTION=90, filename=0x7ffc08dd89cf "./tmp/sar24", file_number=1)
at sar_analyzer.c:5226 

 お、./tmp/sar24 というファイルを最初に読み出したよ、といっていますね。

そうなんです、あり得ない数値を入れた sar24 というファイルを一つだけ ./tmp ディレクトリに入れておいたのです。すごいなー、丸見えやー。

read_sar() という関数により、sar ファイルを読むのですが、今回も、関数の頭もつけます。

5161 /*
5162 * This function reads sar file and during the procedure, 'get_word_line()' writes
5163 * item values to the struct as an option orders.
5164 *
5165 * Caller : read_write_file()
5166 *
5167 * Calls : get_word_line()
5168 *
5169 */
5170 static void read_sar ( int file_number, const char *filename, int SAR_OPTION, int REPORT, int MESSAGE_ONLY )
5171 {

...(snip)...

5204 /* read file and parse lines */
5205 while ( fgets ( linebuf,sizeof ( linebuf ),fp ) != NULL )
5206 {
5207 lnr++;
5208 line = linebuf;
5209 /* strip newline */
5210 i = ( int ) strlen ( line );
5211 if ( ( i <= 0 ) || ( line [ i - 1 ] != '\n' ) )
5212 {
5213 printf("%s:%d: line too long or last line missing newline\n Hint:$sed -i 's/\\x00//g' <sar_file>\n",filename,lnr);
5214 /* freeing object and setting it to NULL */
5215 free_sar_analyzer_obj ( );
5216 exit ( EXIT_FAILURE );
5217 }
5218 line [ i - 1 ] = '\0';
5219 /* ignore comment lines */
5220 if ( line [ 0 ] == '#' )
5221 continue;
5222 /* strip trailing spaces */
5223 for ( i--; ( i > 0 ) && isspace ( line [ i -1 ] ) ; i-- )
5224 line [ i -1 ] = '\0';
5225 /* get keyword from line and ignore empty lines */
5226 if ( get_word_line ( file_number, &line, SAR_OPTION, MESSAGE_ONLY ) != 0 )
5227 continue;
5228 }
5229 /* after reading all lines, close the file pointer */
5230 fclose ( fp );
5231 }

 5226 行目ですが、今回は、./tmp/sar24 ファイルを、get_word_line() という関数で 1行読んでいるところです。

だんだん近づいてきた感じがしますね。ドキドキ。。

でも、疲れたぁ。お腹すいたァ。じゃ、つづきはまた。。

sar-analyzer の開発状況(20180724)

前回発表した sar-analyzer-8.0 ですが、コンパイルすると、バイナリが 1G になってました。これは、spike 機能のために、静的にメモリを確保したからです。というのも、sar ファイルを、1000 まで受け入れ可能にしていて、その分の配列を作成していました。

今回発表した sar-analyzer-8.1 では、受け入れ可能の上限を、デフォルトで 31 にしました。sar のデフォルトが 1ヵ月なので、これで問題ありません。

その結果、コンパイル後のバイナリサイズは、42 M 程になりました。

まだまだ大きいですので、多少コードを修正すると思います。気が向けば。。

 

腕立て伏せでもしよっと。

sar-analyzer の開発状況(20180722)

Spike を、それぞれのファイルごと表示できるようにしました。

今までの 全期間の Spike 表示はそのままですが、その下に、ファイルごとの表示を加えました。

直前の値と比べているので、全期間の Spike だけだと、ある項目では、正確に表示ができませんでしたが、ファイルごとの表示を見ると、もう少し理解が出来ると思います。

 

github.com

github でリポジトリを作成した直後に出るメッセージ

このようなやり方ですね。

…or create a new repository on the command line

echo "# Awesome project." >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin git@github.com:xxxx/xxxx.git
git push -u origin master

…or push an existing repository from the command line

git remote add origin git@github.com:xxxx/xxxx.git
git push -u origin master

 

Raspberry Pi 2 用のOS(ディストリビューション)を作成します-その4

Raspberry Pi の実験ですが、立ち上がった時に、何かプログラムを自動実行させたいです。このページを逐次編集していきます。

Buildroot で、作っていくんですけど。

sdcard.img を tmp 等の適当なディレクトリにコピーして、以下のコマンドを実行します。

# kpartx -a sdcard.img

# ls -l /dev/mapper

loop1p2 だと思います。マウントします。

# mount /dev/mapper/loop1p2 /mnt/Fedora-2

例えば、画像ファイルを、/mnt/Fedora-2/usr/share/pinkrabbit/ ディレクトリにコピーします。

# umount /mnt/Fedora-2

# kpartx -d sdcard.img

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

それとも、次の方法が良い方法です。

$ cd board/raspberrypi2

$ vim post-build.sh

----

$ mkdir ${TOPDIR}/usr/share/xxx

$ cp -af ../xxx.png ${TOPDIR}/usr/share/xxx

$ strace make all

以下を実行するといいかもしれません。

cmdline.txt を編集します。

boot メッセージを隠すために、"console=tty1" を "console=tty3" に。
"loglevel=3" クリティカルでないメッセージを抑制するために、"loglevel=3" を加え、

カーソルのブリンクを止めるには、“vt.global_cursor_default=0” を追記します。

もし、ロゴも出したくなかったら、"logo.nologo” を追記します。

dd コマンドで、output/images/sdcard.img をコピーします。

----

 

...(編集待ち)...

(参考)

Music Player With Buildroot and Raspberry Pi - Void’s Vault

Super fast Linux splashscreen

Raspberry Pi – hiding boot messages on screen | Anand Dersingh, Ph.D.

 

 

 

Fedora Arm イメージを分解する(kpartx)

Fedora Arm イメージを分解します

- 準備
$ rpm -q kpartx

インストールされていなければ、インストールします。

# dnf install kpartx

Fedora の ARM イメージを解凍します。

$ unxz Fedora-Workstation-armhfp-28-1.1-sda.raw.xz

解凍されると、以下のようになります。

Fedora-Workstation-armhfp-28-1.1-sda.raw

file コマンドで確認します。

$ file Fedora-Workstation-armhfp-28-1.1-sda.raw
Fedora-Workstation-armhfp-28-1.1-sda.raw: DOS/MBR boot sector; partition 1 : ID=0xc, start-CHS (0x4,4,1), end-CHS (0x78,119,2), startsector 2048, 59392 sectors; partition 2 : ID=0x83, active, start-CHS (0x78,120,1), end-CHS (0x3ff,254,2), startsector 61440, 999424 sectors; partition 3 : ID=0x82, start-CHS (0x3ff,254,2), end-CHS (0x3ff,254,2), startsector 1060864, 999424 sectors; partition 4 : ID=0x83, start-CHS (0x3ff,254,2), end-CHS (0x3ff,254,2), startsector 2060288, 12109824 sectors

.raw を、 .img にリネームします。
$ mv Fedora-Workstation-armhfp-28-1.1-sda.raw Fedora-Workstation-armhfp-28-1.1-sda.img

kpartx を実行します。

# kpartx -a Fedora-Workstation-armhfp-28-1.1-sda.img

/dev/mapper を確認します。

# ls -l /dev/mapper/
合計 0
crw-------. 1 root root 10, 236 7月 13 19:07 control
lrwxrwxrwx. 1 root root 7 7月 13 19:07 docker-253:0-3154371-pool -> ../dm-3
lrwxrwxrwx. 1 root root 7 7月 13 19:07 fedora-home -> ../dm-2
lrwxrwxrwx. 1 root root 7 7月 13 19:07 fedora-root -> ../dm-0
lrwxrwxrwx. 1 root root 7 7月 13 19:07 fedora-swap -> ../dm-1
lrwxrwxrwx. 1 root root 7 7月 13 19:54 loop2p1 -> ../dm-4
lrwxrwxrwx. 1 root root 7 7月 13 19:54 loop2p2 -> ../dm-5
lrwxrwxrwx. 1 root root 7 7月 13 19:54 loop2p3 -> ../dm-6
lrwxrwxrwx. 1 root root 7 7月 13 19:54 loop2p4 -> ../dm-7

loop2p1 から、loop2p4 までが、Fedora Arm と思われます。

以下の手順でマウントします。

# mkdir /mnt/{Fedora,Fedora-2,Fedora-3,Fedora-4}
# mount /dev/mapper/loop0p1 /mnt/fedora-1
# mount /dev/mapper/loop0p1 /mnt/fedora-2
# mount /dev/mapper/loop0p1 /mnt/fedora-3
# mount /dev/mapper/loop0p1 /mnt/fedora-4

では、それぞれを確認してみます。

# ls -l /mnt/Fedora
合計 13006
-rwxr-xr-x. 1 root root 52064 4月 25 15:37 bootcode.bin
-rwxr-xr-x. 1 root root 1105 4月 25 15:37 config-64.txt
-rwxr-xr-x. 1 root root 1181 4月 25 15:37 config.txt
-rwxr-xr-x. 1 root root 6575 4月 25 15:37 fixup.dat
-rwxr-xr-x. 1 root root 2599 4月 25 15:37 fixup_cd.dat
-rwxr-xr-x. 1 root root 9726 4月 25 15:37 fixup_db.dat
-rwxr-xr-x. 1 root root 9730 4月 25 15:37 fixup_x.dat
drwxr-xr-x. 2 root root 12288 4月 25 15:37 overlays
-rwxr-xr-x. 1 root root 410560 4月 25 15:37 rpi2-u-boot.bin
-rwxr-xr-x. 1 root root 421224 4月 25 15:37 rpi3-u-boot.bin
-rwxr-xr-x. 1 root root 2825124 4月 25 15:37 start.elf
-rwxr-xr-x. 1 root root 673444 4月 25 15:37 start_cd.elf
-rwxr-xr-x. 1 root root 4968292 4月 25 15:37 start_db.elf
-rwxr-xr-x. 1 root root 3912164 4月 25 15:37 start_x.elf

# ls -l /mnt/Fedora-2
合計 65056
drwxr-xr-x. 3 root root 4096 4月 25 15:32 239f94d4501440c9b6524057b3972fc4
-rw-------. 1 root root 3436883 4月 24 09:48 System.map-4.16.3-301.fc28.armv7hl
-rw-r--r--. 1 root root 209896 4月 24 09:48 config-4.16.3-301.fc28.armv7hl
lrwxrwxrwx. 1 root root 27 4月 25 15:32 dtb -> dtb-4.16.3-301.fc28.armv7hl
drwxr-xr-x. 2 root root 36864 4月 25 15:23 dtb-4.16.3-301.fc28.armv7hl
drwxr-xr-x. 2 root root 4096 4月 25 15:37 extlinux
drwxrwxr-x. 2 root root 4096 4月 25 15:13 fw
drwxrwxr-x. 2 root root 4096 4月 25 15:37 grub
drwxr-xr-x. 3 root root 4096 4月 25 15:19 grub2
-rw-------. 1 root root 56166524 4月 25 15:34 initramfs-4.16.3-301.fc28.armv7hl.img
drwx------. 2 root root 16384 4月 25 15:13 lost+found
-rwxr-xr-x. 1 root root 6672896 4月 24 09:49 vmlinuz-4.16.3-301.fc28.armv7hl

# ls -l /mnt/Fedora-3
合計 0

# ls -l /mnt/Fedora-4
合計 84
lrwxrwxrwx. 1 root root 7 2月 7 19:27 bin -> usr/bin
drwxrwxr-x. 2 root root 4096 4月 25 15:13 boot
drwxr-xr-x. 4 root root 4096 4月 25 15:32 dev
drwxr-xr-x. 131 root root 12288 4月 25 15:37 etc
drwxr-xr-x. 2 root root 4096 2月 7 19:27 home
lrwxrwxrwx. 1 root root 7 2月 7 19:27 lib -> usr/lib
drwx------. 2 root root 16384 4月 25 15:13 lost+found
drwxr-xr-x. 2 root root 4096 2月 7 19:27 media
drwxr-xr-x. 2 root root 4096 2月 7 19:27 mnt
drwxr-xr-x. 2 root root 4096 2月 7 19:27 opt
drwxrwxr-x. 2 root root 4096 4月 25 15:13 proc
dr-xr-x---. 2 root root 4096 4月 25 15:37 root
drwxr-xr-x. 32 root root 4096 4月 25 15:31 run
lrwxrwxrwx. 1 root root 8 2月 7 19:27 sbin -> usr/sbin
drwxr-xr-x. 2 root root 4096 2月 7 19:27 srv
drwxrwxr-x. 2 root root 4096 4月 25 15:13 sys
drwxrwxrwt. 2 root root 4096 4月 25 15:37 tmp
drwxr-xr-x. 11 root root 4096 4月 25 15:15 usr
drwxr-xr-x. 22 root root 4096 4月 25 15:31 var

好きな作業をしてください。
アンマウントします。

# umount /mnt/Fedora-4
# umount /mnt/Fedora-3
# umount /mnt/Fedora-2
# umount /mnt/Fedora

ファイルを戻します。
# kpartx -d Fedoara-Workstation-armhfp-28-1.1-sda.img
確認します。
$ ls
Fedora-Workstation-armhfp-28-1.1-sda.img
ファイル名も戻します。
$ mv Fedora-Workstation-armhfp-28-1.1-sda.img Fedora-Workstation-armhfp-28-1.1-sda.raw
圧縮します(かなりの時間がかかります)。
# xz Fedora-Workstation-armhfp-28-1.1-sda.raw
SDカードに書き込みます。
# dnf install -y fedora-arm-installer
以下のコマンドを実行します。
# shred -v /dev/mmcblk0p1
# shred -v /dev/mmcblk0p2

# mkfs.vfat /dev/mmcblk0p1

# mkfs.ext4 /dev/mmcblk0p2
# arm-image-installer --image=Fedora-Workstation-armhfp-28-1.1-sda.raw.xz --target=Bananapi --media=/dev/mmcblk0

(参考)
https://fedoraproject.org/wiki/Architectures/ARM/Raspberry_Pi
https://linuxconfig.org/how-to-extract-xz-compressed-archive-on-linux
https://medium.com/@madhav2code/how-to-mount-fedora-atomic-host-image-to-local-directory-file-system-98bae20751c1

Raspberry Pi 2 用のOS(ディストリビューション)を作成します-その2

ラズパイ2 用のイメージは、前回、Buildroot を使うことで、ビルドできました。

でも、あまりソフトが入っていませんね。じゃ、どんどん入れてみます。

ビルドの時に、入れて、.sdcard イメージを作成します。


Target Packages-->Networking applications の ntp , ntpdate にチェックを入れました。

早速エラーになりました。

64-bit filesystem support is not enabled. The larger fields afforded by this feature enable full-strength checksumming. Pass -O 64bit to rectify.

と出たので、additional mke2fs options を、-O ^64bit から、-O 64bit に直しました。

再度の make all で、エラーは出ませんでした。

しかし、次のエラーが出ました。

Copying files into the device: __populate_fs: Could not allocate block in ext2 filesystem while writing file "libuClibc-1.0.30.so"
mkfs.ext4: Could not allocate block in ext2 filesystem while populating file system
*** Maybe you need to increase the filesystem size (BR2_TARGET_ROOTFS_EXT2_SIZE)
make[1]: *** [fs/ext2/ext2.mk:56: /home/xxxx/BUILDROOT/buildroot-2018.05_save/output/images/rootfs.ext2] エラー 1

Filesystem で、exact size を、120M にしました。

エラーなく終了しました!

では、Target Packages-->Development tools で、check,git,make,pkgconf にチェックをつけました。

以下のエラーになりました。

/home/xxxxx/BUILDROOT/buildroot-2018.05_save/output/build/make-4.2.1/config/missing: 行 81: makeinfo: コマンドが見つかりません

ホストマシンに、texinfo を入れました。

エラーなく終了しました!

Target Packages-->Networking applications で、dhcpd,ethtool,iproute2,iptables,openssh,tcpdump にチェックを入れました。

エラーなく終了しました!

 どんどんいきます。

Target Packages--> Graphic libraries and applications (graphic/text) --->

imagemagick、Qt(Obsolete) と、xkeyboard-config にチェックを入れました。

ここまでの成果を確認します。

# dd if=./output/images/sdcard.img of=/dev/mmcblk0
311297+0 レコード入力
311297+0 レコード出力
159384064 bytes (159 MB, 152 MiB) copied, 32.9621 s, 4.8 MB/s

 イメージを立ち上げて、ntpdate と打つと、日付けが、UTC でセットされました!

眠い。。

Raspberry Pi 2 用のOS(ディストリビューション)を作成します

Raspberry Pi 2 を持っているんですが、最近全然遊んでいないです。
久しぶりに遊んでみます。
今回、Buildroot を使ってみます。

$ curl -O http://buildroot.org/downloads/buildroot-2018.05.tar.gz
$ tar zxvf buildroot-2018.05.tar.gz
$ cd buildroot-2018.05/
$ make menuconfig

以下、うまくいったやり方となります。

以下のページのとおりやってみました。
(参考)
http://ltekieli.com/buildroot-with-raspberry-pi-what-where-and-how/
------------------------------------------------

$ curl -O http://buildroot.org/downloads/buildroot-2018.05.tar.gz
$ tar zxvf buildroot-2018.05.tar.gz
$ cd buildroot-2018.05/
$ make raspberrypi2_defconfig(*注1)
(表示)
...(snip)...
# configuration written to /home/fujiwara/BUILDROOT/buildroot-2018.05/.config

ここで、make menuconfig として、設定をグラフィカリに確認してもよいでしょう。

では、ビルドを開始します。

$ make all

約 30分弱でビルド完了しました。
以下のディレクトリを確認します。

$ ls -lah output/images
合計 158M
drwxr-xr-x. 3 4.0K 7月 8 04:20 .
drwxrwxr-x. 6 4.0K 7月 8 03:35 ..
-rw-r--r--. 1 23K 7月 8 04:20 bcm2709-rpi-2-b.dtb
-rw-r--r--. 1 32M 7月 8 04:20 boot.vfat
-rw-r--r--. 1 60M 7月 8 04:20 rootfs.ext2
lrwxrwxrwx. 1 11 7月 8 04:20 rootfs.ext4 -> rootfs.ext2
drwxr-xr-x. 2 4.0K 7月 8 04:07 rpi-firmware
-rw-r--r--. 1 93M 7月 8 04:20 sdcard.img
-rw-r--r--. 1 4.7M 7月 8 04:20 zImage
-------------------------
ビルドが一度できたので、安心しました。

(*注1)
下記のようにすると、make のリストが表示されます。
$ make list-defconfigs

SDカードにイメージを書き出します。

# dd if=sdcard.img of=/dev/mmcblk0 status=progress

実施結果です。

# dd if=./output/images/sdcard.img of=/dev/mmcblk0 status=progress
188417+0 レコード入力
188417+0 レコード出力
96469504 bytes (96 MB, 92 MiB) copied, 16.845 s, 5.7 MB/s

うまくいきました。こちらに、展開しました。root : pinkrabbit

pinkrabbit-rpi-2018.05-sdcard.img

 Fedora のイメージを試してみました。

# arm-image-installer --image=Fedora-Workstation-armhfp-28-1.1-sda.raw.xz --target=rpi2 --media=/dev/mmcblk0

次の表示となりました。

=====================================================
= Selected Image:
= ./Fedora-Workstation-armhfp-28-1.1-sda.raw.xz
= Selected Media : /dev/mmcblk0
= U-Boot Target : rpi2
=====================================================

*****************************************************
*****************************************************
******** WARNING! ALL DATA WILL BE DESTROYED ********
*****************************************************
*****************************************************

Type 'YES' to proceed, anything else to exit now

= Proceed?

YES と入力して、Fedora が立ち上がったのを確認できました。

 

以下は、うまくいかなかった一例となります。

Linux kernel の menuconfig かのような画面が立ち上がりました。
以下の設定に変更します。

----------------------
Top level configuration

Target Architecture ARM (little endian)
Target Architecture Variant arm1176jzf-s
Target ABI EABI
----------------------
Build options

Download dir $(HOME)/buildroot/dl デフォルトで、($(TOPDIR)/dl) Download dir となっているので、これでよいかも。
Enable compiler cache YES
Compiler cache location $(HOME)/buildroot/ccache デフォルトで、($(HOME)/.buildroot-ccache) Compiler cache location となっているので、これでよいかも。
----------------------
Toolchain

Kernel Headers Linux 3.6.x kernel headers デフォルトで、Linux 4.16.x kernel headers となっているので、これでよいかも。

GCC compiler Version GCC 4.7.x デフォルトで、GCC compiler Version (gcc 6.x) となっているので、これでよいかも。

Additional gcc options --with-float=hard --with-fpu=vfp

Purge unwanted locales YES
Locales to keep C en_US
Generate locale data en_US
-----------------------
System configuration

System hostname rpi
System banner Welcome to Raspberry Pi!
/dev management Dynamic using mdev デフォルトで、/dev management (Dynamic using devtmpfs only) となっているので、これでよいかも。 │ │

Port to run a getty (login prompt) on tty1
Baudrate to use 38400
-----------------------
ackage selection for target

This is the section where you specify which packages get in and which will be left out.

Busybox - which is enabled by default - gives us a fairly complete userland, so the only extra you should enable here is dropbear, a small SSH server under Networking applications which will let us log in remotely.

Also, if you want to mount NFS filesystems, you should enable Networking applications / Portmap.

You may select other packages too, as you see fit.
------------------------
Filesystem images

Compression method gzip

Here we ask Buildroot to generate a rootfs.tar.gz (besides rootfs.tar). デフォルトで、 [*] tar the root filesystem (NEW) となっているので、これでよいかも。 │ │
------------------------
Kernel
Linux Kernel YES
Kernel version Custom Git tree
URL of custom Git repository https://github.com/raspberrypi/linux
Custom Git version rpi-3.6.y ここは、上記リンクを見ると、4.14.y が正しいかな。
Kernel configuration Using a defconfig
Defconfig name bcmrpi
Kernel binary format zImage

With these settings, Buildroot will clone the foundation's rpi-3.6.y branch, configure it using arch/arm/configs/bcmrpi_defconfig (included in the source) and build a zImage which we can then shove into /boot. (Note that post-processing with the imagetool-uncompressed.py script is not needed anymore as the latest firmware can load zImage kernels without a hitch.)

Now exit the configuration program - save the new configuration as you leave! - and initiate a full build of the system by executing:
------------------------
$ make all

You seem to have the current working directory in your
LD_LIBRARY_PATH environment variable. This doesn't work.
make[1]: *** [support/dependencies/dependencies.mk:21: dependencies] エラー 1
make: *** [Makefile:79: _all] エラー 2
[fujiwara@gns3vm buildroot-2018.05]$ make menuconfig


*** End of the configuration.
*** Execute 'make' to start the build or try 'make help'.

$ ls
CHANGES Config.in DEVELOPERS Makefile.legacy arch boot configs docs linux package system utils
COPYING Config.in.legacy Makefile README board build dl fs output support toolchain
[buildroot-2018.05]$ echo $LD_LIBRARY_PATH
/opt/lib:/opt/lib:

http://lists.busybox.net/pipermail/buildroot/2015-April/124424.html

: が付いているのが悪かったようだ。
変更する。

$ LD_LIBRARY_PATH=/opt/lib:/opt/lib; export LD_LIBRARY_PATH

もう一度、

$ make

 

でも、このままだと、なにも面白いソフトが入っていないです。

もう一度、不備なところを再修正します。
$ make menuconfig

以下の設定を実施します。
System configuration

System hostname Pink Rabbit Linux
System banner Welcome to Raspberry Pi!
------------------------
$ make all

$ ls -lah output/images/
合計 158M
drwxr-xr-x. 3 4.0K 7月 8 04:42 .
drwxrwxr-x. 6 4.0K 7月 8 03:35 ..
-rw-r--r--. 1 23K 7月 8 04:20 bcm2709-rpi-2-b.dtb
-rw-r--r--. 1 32M 7月 8 04:42 boot.vfat
-rw-r--r--. 1 60M 7月 8 04:42 rootfs.ext2
lrwxrwxrwx. 1 11 7月 8 04:42 rootfs.ext4 -> rootfs.ext2
drwxr-xr-x. 2 4.0K 7月 8 04:07 rpi-firmware
-rw-r--r--. 1 93M 7月 8 04:42 sdcard.img
-rw-r--r--. 1 4.7M 7月 8 04:20 zImage
---------------------------
ビルドできました。
まだまだ、面白くないです。
ありったけのソフトをインストールしてみたいですね。
こんな感じに。


Networking appliations --->
では、apache、bind、dhcpcd、ethtool、iptables、ntp、ntpdate、tcpdump と openssh を入れてみます。
チェックを入れます。
Shell and utilities --->
screen にチェックをいれます。
System tools --->
util-linux --->
audit、hwclock、kill、logger にチェックを入れます。
Security --->
semodule-utils
*** checkpolicy needs a glibc toolchain w/ threads, dynamic library ***
って出てます。
Libraries --->
Database --->
mysqlpostgresqlsqlite
Javascript --->
bootstrap、jQuery
Target packages --->
Development tools --->
git、make、pkgconf
Toolchain --->
C library (glibc) --->
これをしたことで、Target Package の Security で、SELinux 関連がインストールできるようになりました。
checkpolicy, policycoreutils, refpolicy, restorecond, selinux-python(audit2allow, sepolgen もチェック),
semodule-utils, setools
にチェックを入れます。
Libraries --->
Interpreter languages and scripting --->
Text and terminal handling --->
ncurses にチェックを入れます。
Enable ECHAR support
Enable toolchain locale/i18n support

Enable root login with password
(root) Root password -- root
https://buildroot.org/downloads/manual/manual.html
Install timezone info
default local time -- Asia/Tokyo
---------------------------
$ make all

glibc に変更したので、結構時間がかかるかも。
エラーになりました。
では、glibc はダメみたいですね。uClibc にしました。
$ make clean
$ make all

ビルドが始まりました。

 

(その他参考にしたサイト)
https://qiita.com/pu_ri/items/75c80e388c79fe0d3f0b

Fedora28 に Phalcon をインストールしてみた

Phalcon は、PHP フレームワークのうちのひとつで、爆速で知られています。

今回は、ソースからのコンパイルをやってみます(*注1)。

こちらのドキュメントを参考にしました。

docs.phalconphp.com php7 をインストールします。

# dnf install php
...(snip)...
インストール済み:
php.x86_64 7.2.7-1.fc28
php-fpm.x86_64 7.2.7-1.fc28
nginx-filesystem.noarch 1:1.12.1-8.fc28

 その他、必要なパッケージをインストールします。

# dnf install php-json php-devel pcre-devel gcc make

確認したところでは、必要なパッケージは、以下となります。
php, php-json, php-devel, pcre-devel, gcc, make

PHP 関係だけ確認します。

$ rpm -qa | grep php
php-cli-7.2.7-1.fc28.x86_64
php-devel-7.2.7-1.fc28.x86_64
php-json-7.2.7-1.fc28.x86_64
php-7.2.7-1.fc28.x86_64
php-mysqlnd-7.2.7-1.fc28.x86_64
php-fpm-7.2.7-1.fc28.x86_64
php-pdo-7.2.7-1.fc28.x86_64
php-common-7.2.7-1.fc28.x86_64

では、cphalcon を clone します。

$ git clone https://github.com/phalcon/cphalcon

build ディレクトリに移動して、make します。

$ cd cphalcon/build
# ./install
find . -name \*.gcno -o -name \*.gcda | xargs rm -f
find . -name \*.lo -o -name \*.o | xargs rm -f
find . -name \*.la -o -name \*.a | xargs rm -f
find . -name \*.so | xargs rm -f
find . -name .libs -a -type d|xargs rm -rf
rm -f libphp.la modules/* libs/*
Cleaning..
Configuring for:
PHP Api Version: 20170718
Zend Module Api No: 20170718
Zend Extension Api No: 320170718
configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.
libtool: compile: gcc -I. -I/home/fujiwara/PHALCON/cphalcon/build/php7/64bits -DPHP_ATOM_INC -I/home/fujiwara/PHALCON/cphalcon/build/php7/64bits/include -I/home/fujiwara/PHALCON/cphalcon/build/php7/64bits/main -I/home/fujiwara/PHALCON/cphalcon/build/php7/64bits -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib -DPHALCON_RELEASE -DHAVE_CONFIG_H -march=native -mtune=native -O2 -fomit-frame-pointer -c /home/fujiwara/PHALCON/cphalcon/build/php7/64bits/phalcon.zep.c -fPIC -DPIC -o .libs/phalcon.o
libtool: link: gcc -shared -fPIC -DPIC .libs/phalcon.o -march=native -mtune=native -O2 -Wl,-soname -Wl,phalcon.so -o .libs/phalcon.so
libtool: link: ( cd ".libs" && rm -f "phalcon.la" && ln -s "../phalcon.la" "phalcon.la" )
libtool: install: cp ./.libs/phalcon.so /home/fujiwara/PHALCON/cphalcon/build/php7/64bits/modules/phalcon.so
libtool: install: cp ./.libs/phalcon.lai /home/fujiwara/PHALCON/cphalcon/build/php7/64bits/modules/phalcon.la
libtool: finish: PATH="/usr/lib64/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin:/home/fujiwara/.rvm/bin:/usr/local/sbin:/usr/sbin:/home/fujiwara/.rvm/bin:/home/fujiwara/.local/bin:/home/fujiwara/bin:/home/fujiwara/.rvm/bin:/sbin" ldconfig -n /home/fujiwara/PHALCON/cphalcon/build/php7/64bits/modules
----------------------------------------------------------------------
Libraries have been installed in:
/home/fujiwara/PHALCON/cphalcon/build/php7/64bits/modules

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the '-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the 'LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the 'LD_RUN_PATH' environment variable
during linking
- use the '-Wl,-rpath -Wl,LIBDIR' linker flag
- have your system administrator add LIBDIR to '/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------

Build complete.
Don't forget to run 'make test'.

Installing shared extensions: /usr/lib64/php/modules/
Installing header files: /usr/include/php/

Thanks for compiling Phalcon!
Build succeed: Please restart your web server to complete the installation

共有モジュールがインストールされました。確認します。

# ls /usr/lib64/php/modules/
bz2.so ctype.so exif.so ftp.so iconv.so mysqlnd.so pdo_mysql.so phalcon.so sockets.so tokenizer.so
calendar.so curl.so fileinfo.so gettext.so mysqli.so pdo.so pdo_sqlite.so phar.so sqlite3.so

ヘッダーファイルがインストールされました。確認します。

# ls /usr/include/php/ext
date dom filter gd hash iconv json libxml mbstring mysqli mysqlnd pcre pdo phalcon phar session simplexml sockets spl standard xml

以下のファイルを作成して、extension の記述をします。
php.ini に記述するよりも、この方がよいようです(*注2)。

# vim /etc/php.d/30-phalcon.ini
--------
; Enable phalcon extension module
extension=phalcon
--------

ini ファイルのディレクトリ配下は、以下のようになりました。

# ls /etc/php.d
20-bz2.ini 20-curl.ini 20-ftp.ini 20-json.ini 20-phar.ini 20-tokenizer.ini 30-pdo_sqlite.ini
20-calendar.ini 20-exif.ini 20-gettext.ini 20-mysqlnd.ini 20-sockets.ini 30-mysqli.ini 30-phalcon.ini
20-ctype.ini 20-fileinfo.ini 20-iconv.ini 20-pdo.ini 20-sqlite3.ini 30-pdo_mysql.ini

httpd.service をリスタートします。

# systemctl restart httpd.service

loaded extensions を確認します。
phpinfo を見たところ、Phalcon の項目がありました。

以下のコマンドでも確認できました。

# php -r 'print_r(get_loaded_extensions());'| grep phalcon
[33] => phalcon

さあ、なに食べようか。。

--------
(*注1)
リポジトリをインストールして、パッケージインストールをする場合はこちらです。

phalcon のリポジトリをインストールします。

# curl -s https://packagecloud.io/install/repositories/phalcon/stable/script.rpm.sh | bash

phalcon のリポジトリ設定ファイルがあることを確認します。

# ls -l /etc/yum.repos.d
...(snip)...
phalcon_stable.repo

(*注2)
php.ini に直接モジュールの読み込み設定を記述すると、たとえば、以下のようなエラーになります。

/usr/lib64/php/modules/phalcon.so (/usr/lib64/php/modules/phalcon.so: undefined symbol: php_json_decode_ex)) in Unknown on line 0 

あるプロセスが使用しているメモリの正確な値を知る方法-その2

お疲れさまです。

プロセスや、サービスがどの程度メモリを使用しているかって、気になりますよね。

以前、このブログで以下のようなエントリーを書きました。

あるプロセスが使用しているメモリの正確な値を知る方法 - computerの日記

/proc から、ひとつひとつのプロセス番号を洗いだしていくのは疲れますよね。

なんか簡単に確認する方法はないのでしょうか。探してみたらありました。

いいプログラムを見つけましたよ。これを root で動かしてみてください。

https://github.com/pixelb/ps_mem/blob/master/ps_mem.py

やってみました。

# python ps_mem.py
Private + Shared = RAM used Program

244.0 KiB + 15.5 KiB = 259.5 KiB mcelog
228.0 KiB + 33.5 KiB = 261.5 KiB atd
316.0 KiB + 20.5 KiB = 336.5 KiB audispd
416.0 KiB + 48.5 KiB = 464.5 KiB irqbalance
436.0 KiB + 37.5 KiB = 473.5 KiB rtkit-daemon
340.0 KiB + 158.5 KiB = 498.5 KiB alsactl
536.0 KiB + 38.5 KiB = 574.5 KiB sedispatch
280.0 KiB + 345.5 KiB = 625.5 KiB sh
720.0 KiB + 5.5 KiB = 725.5 KiB ssh-agent
636.0 KiB + 92.5 KiB = 728.5 KiB chronyd
716.0 KiB + 16.5 KiB = 732.5 KiB auditd
676.0 KiB + 91.5 KiB = 767.5 KiB agent
732.0 KiB + 63.5 KiB = 795.5 KiB dconf-service
752.0 KiB + 79.5 KiB = 831.5 KiB xfconfd
756.0 KiB + 133.5 KiB = 889.5 KiB ibus-engine-simple
764.0 KiB + 161.5 KiB = 925.5 KiB gconfd-2
804.0 KiB + 123.5 KiB = 927.5 KiB ibus-portal
840.0 KiB + 124.5 KiB = 964.5 KiB at-spi-bus-launcher
928.0 KiB + 44.5 KiB = 972.5 KiB crond
972.0 KiB + 14.5 KiB = 986.5 KiB vmware-authdlauncher
904.0 KiB + 122.5 KiB = 1.0 MiB at-spi2-registryd
896.0 KiB + 137.5 KiB = 1.0 MiB ibus-dconf
436.0 KiB + 612.0 KiB = 1.0 MiB avahi-daemon (2)
1.0 MiB + 66.5 KiB = 1.1 MiB gssproxy
1.1 MiB + 58.5 KiB = 1.1 MiB vmware-vmblock-
824.0 KiB + 383.5 KiB = 1.2 MiB systemd-machined
964.0 KiB + 276.5 KiB = 1.2 MiB rngd
696.0 KiB + 576.0 KiB = 1.2 MiB dnsmasq (2)
1.0 MiB + 282.5 KiB = 1.3 MiB gvfsd
1.1 MiB + 140.5 KiB = 1.3 MiB imsettings-daemon
1.4 MiB + 63.5 KiB = 1.4 MiB bluetoothd
1.3 MiB + 164.5 KiB = 1.5 MiB gvfsd-metadata
1.5 MiB + 13.5 KiB = 1.5 MiB vmware-usbarbitrator
1.0 MiB + 485.5 KiB = 1.5 MiB gpg-agent (3)
1.5 MiB + 114.5 KiB = 1.6 MiB accounts-daemon
1.3 MiB + 383.5 KiB = 1.7 MiB gvfsd-trash
1.2 MiB + 476.5 KiB = 1.7 MiB su
1.6 MiB + 195.5 KiB = 1.8 MiB xscreensaver
1.8 MiB + 57.5 KiB = 1.9 MiB smartd
1.6 MiB + 409.5 KiB = 2.0 MiB abrtd
1.8 MiB + 426.5 KiB = 2.2 MiB abrt-dbus
1.9 MiB + 428.5 KiB = 2.3 MiB upowerd
2.0 MiB + 431.5 KiB = 2.4 MiB gvfs-udisks2-volume-monitor
2.1 MiB + 519.5 KiB = 2.6 MiB ibus-x11
2.1 MiB + 798.5 KiB = 2.9 MiB panel-6-systray
2.9 MiB + 135.5 KiB = 3.0 MiB ibus-daemon
2.5 MiB + 601.5 KiB = 3.0 MiB systemd-logind
2.8 MiB + 431.5 KiB = 3.2 MiB wpa_supplicant
2.8 MiB + 427.5 KiB = 3.3 MiB gnome-keyring-daemon
2.4 MiB + 959.5 KiB = 3.4 MiB panel-2-actions
3.0 MiB + 647.5 KiB = 3.6 MiB xfsettingsd
2.9 MiB + 837.0 KiB = 3.7 MiB lightdm (2)
3.5 MiB + 248.5 KiB = 3.8 MiB ModemManager
3.0 MiB + 789.5 KiB = 3.8 MiB abrt-applet
3.7 MiB + 255.5 KiB = 4.0 MiB dhclient
3.6 MiB + 637.5 KiB = 4.3 MiB xfce4-session
3.9 MiB + 459.5 KiB = 4.3 MiB dbus-daemon (3)
3.1 MiB + 1.4 MiB = 4.4 MiB (sd-pam)
4.1 MiB + 521.5 KiB = 4.6 MiB udisksd
4.6 MiB + 558.5 KiB = 5.1 MiB systemd-udevd
4.3 MiB + 1.3 MiB = 5.5 MiB xfce-polkit
4.7 MiB + 919.0 KiB = 5.6 MiB bash (2)
5.5 MiB + 1.0 MiB = 6.5 MiB xfce4-notifyd
5.6 MiB + 1.5 MiB = 7.1 MiB xfwm4
4.2 MiB + 3.5 MiB = 7.7 MiB systemd (2)
7.0 MiB + 1.1 MiB = 8.1 MiB NetworkManager
7.2 MiB + 1.2 MiB = 8.4 MiB ibus-ui-gtk3
7.8 MiB + 701.5 KiB = 8.5 MiB ibus-extension-gtk3
7.7 MiB + 1.5 MiB = 9.2 MiB xfce4-power-manager (2)
8.5 MiB + 1.5 MiB = 9.9 MiB nm-applet
7.9 MiB + 2.1 MiB = 10.0 MiB leafpad
4.7 MiB + 5.5 MiB = 10.2 MiB httpd (5)
10.0 MiB + 1.1 MiB = 11.1 MiB abrt-dump-journal-core
10.4 MiB + 2.2 MiB = 12.6 MiB xfce4-panel
13.5 MiB + 892.5 KiB = 14.3 MiB abrt-dump-journal-xorg
13.1 MiB + 1.7 MiB = 14.8 MiB cav
12.2 MiB + 3.0 MiB = 15.1 MiB xfce4-terminal
14.1 MiB + 1.4 MiB = 15.5 MiB xfdesktop
16.7 MiB + 193.5 KiB = 16.9 MiB polkitd
14.9 MiB + 2.0 MiB = 16.9 MiB blueman-tray
15.7 MiB + 2.1 MiB = 17.8 MiB seapplet
18.8 MiB + 2.3 MiB = 21.1 MiB blueman-applet
20.1 MiB + 1.3 MiB = 21.4 MiB firewalld
20.3 MiB + 2.0 MiB = 22.3 MiB pulseaudio
20.5 MiB + 7.0 MiB = 27.5 MiB systemd-journald
22.4 MiB + 5.7 MiB = 28.0 MiB abrt-dump-journal-oops
29.4 MiB + 1.7 MiB = 31.1 MiB libvirtd
31.2 MiB + 103.5 KiB = 31.3 MiB net.downloadhelper.coapp-linux-64
34.1 MiB + 16.5 KiB = 34.1 MiB docker-containerd
34.2 MiB + 3.1 MiB = 37.3 MiB dnfdragora-upda
32.9 MiB + 8.2 MiB = 41.1 MiB rsyslogd
46.8 MiB + 618.5 KiB = 47.4 MiB ibus-engine-kkc
68.6 MiB + 107.5 KiB = 68.7 MiB dockerd
148.9 MiB + 12.8 MiB = 161.7 MiB Xorg
200.0 MiB + 4.0 MiB = 204.0 MiB cmgdaemon
333.0 MiB + 5.4 MiB = 338.5 MiB cmdagent
308.1 MiB + 67.8 MiB = 375.9 MiB skypeforlinux (3)
529.1 MiB + 34.6 MiB = 563.7 MiB firefox
2.5 GiB + 81.8 MiB = 2.6 GiB Web Content (4)
---------------------------------
5.0 GiB

=================================

-d オプションで、プロセス番号も出力されます。

# python ps_mem.py -d
Private + Shared = RAM used Program[pid]

244.0 KiB + 15.5 KiB = 259.5 KiB mcelog [936]
228.0 KiB + 33.5 KiB = 261.5 KiB atd [1221]
316.0 KiB + 20.5 KiB = 336.5 KiB audispd [897]
80.0 KiB + 262.5 KiB = 342.5 KiB dnsmasq [1991]
132.0 KiB + 278.5 KiB = 410.5 KiB avahi-daemon [975]
416.0 KiB + 48.5 KiB = 464.5 KiB irqbalance [950]
436.0 KiB + 37.5 KiB = 473.5 KiB rtkit-daemon [930]
328.0 KiB + 156.5 KiB = 484.5 KiB gpg-agent [2672]
340.0 KiB + 158.5 KiB = 498.5 KiB alsactl [925]
340.0 KiB + 162.5 KiB = 502.5 KiB gpg-agent [5032]
392.0 KiB + 166.5 KiB = 558.5 KiB gpg-agent [5107]
536.0 KiB + 38.5 KiB = 574.5 KiB sedispatch [900]
280.0 KiB + 345.5 KiB = 625.5 KiB sh [2175]
304.0 KiB + 333.5 KiB = 637.5 KiB avahi-daemon [952]
720.0 KiB + 5.5 KiB = 725.5 KiB ssh-agent [2497]
636.0 KiB + 92.5 KiB = 728.5 KiB chronyd [993]
716.0 KiB + 16.5 KiB = 732.5 KiB auditd [895]
676.0 KiB + 91.5 KiB = 767.5 KiB agent [2893]
732.0 KiB + 63.5 KiB = 795.5 KiB dconf-service [3272]
664.0 KiB + 152.5 KiB = 816.5 KiB dbus-daemon [2732]
752.0 KiB + 79.5 KiB = 831.5 KiB xfconfd [2669]
756.0 KiB + 133.5 KiB = 889.5 KiB ibus-engine-simple [3856]
764.0 KiB + 162.5 KiB = 926.5 KiB gconfd-2 [3721]
804.0 KiB + 123.5 KiB = 927.5 KiB ibus-portal [3291]
616.0 KiB + 313.5 KiB = 929.5 KiB dnsmasq [1990]
840.0 KiB + 124.5 KiB = 964.5 KiB at-spi-bus-launcher [2727]
928.0 KiB + 44.5 KiB = 972.5 KiB crond [1240]
972.0 KiB + 14.5 KiB = 986.5 KiB vmware-authdlauncher [1273]
904.0 KiB + 122.5 KiB = 1.0 MiB at-spi2-registryd [2736]
896.0 KiB + 137.5 KiB = 1.0 MiB ibus-dconf [3281]
1.0 MiB + 66.5 KiB = 1.1 MiB gssproxy [946]
1.1 MiB + 58.5 KiB = 1.1 MiB vmware-vmblock- [1211]
824.0 KiB + 383.5 KiB = 1.2 MiB systemd-machined [953]
964.0 KiB + 276.5 KiB = 1.2 MiB rngd [933]
1.1 MiB + 154.5 KiB = 1.2 MiB dbus-daemon [2310]
1.0 MiB + 283.5 KiB = 1.3 MiB gvfsd [2394]
1.1 MiB + 140.5 KiB = 1.3 MiB imsettings-daemon [2386]
360.0 KiB + 1.0 MiB = 1.4 MiB httpd [11343]
1.4 MiB + 63.5 KiB = 1.4 MiB bluetoothd [954]
1.2 MiB + 242.5 KiB = 1.5 MiB lightdm [1699]
1.3 MiB + 164.5 KiB = 1.5 MiB gvfsd-metadata [2871]
1.5 MiB + 13.5 KiB = 1.5 MiB vmware-usbarbitrator [1275]
1.5 MiB + 114.5 KiB = 1.6 MiB accounts-daemon [963]
1.3 MiB + 383.5 KiB = 1.7 MiB gvfsd-trash [2826]
404.0 KiB + 1.3 MiB = 1.7 MiB httpd [1207]
1.2 MiB + 476.5 KiB = 1.7 MiB su [16758]
1.6 MiB + 195.5 KiB = 1.8 MiB xscreensaver [2899]
1.8 MiB + 57.5 KiB = 1.9 MiB smartd [931]
1.6 MiB + 409.5 KiB = 2.0 MiB abrtd [965]
1.8 MiB + 426.5 KiB = 2.2 MiB abrt-dbus [2109]
2.1 MiB + 152.5 KiB = 2.3 MiB dbus-daemon [955]
1.7 MiB + 594.5 KiB = 2.3 MiB lightdm [2072]
1.9 MiB + 428.5 KiB = 2.3 MiB upowerd [3020]
1.2 MiB + 1.1 MiB = 2.3 MiB httpd [11345]
1.2 MiB + 1.1 MiB = 2.3 MiB httpd [11346]
2.0 MiB + 431.5 KiB = 2.4 MiB gvfs-udisks2-volume-monitor [2767]
1.4 MiB + 1.1 MiB = 2.5 MiB systemd [2168]
1.5 MiB + 1.1 MiB = 2.5 MiB httpd [11344]
2.0 MiB + 551.5 KiB = 2.6 MiB xfce4-power-manager [2920]
2.1 MiB + 519.5 KiB = 2.6 MiB ibus-x11 [3285]
2.3 MiB + 464.5 KiB = 2.7 MiB bash [16764]
2.4 MiB + 455.5 KiB = 2.8 MiB bash [4164]
2.1 MiB + 798.5 KiB = 2.9 MiB panel-6-systray [2741]
2.9 MiB + 135.5 KiB = 3.0 MiB ibus-daemon [3270]
2.5 MiB + 601.5 KiB = 3.0 MiB systemd-logind [961]
2.8 MiB + 431.5 KiB = 3.2 MiB wpa_supplicant [1676]
2.8 MiB + 427.5 KiB = 3.3 MiB gnome-keyring-daemon [3459]
2.4 MiB + 959.5 KiB = 3.4 MiB panel-2-actions [2749]
3.0 MiB + 647.5 KiB = 3.6 MiB xfsettingsd [2690]
3.5 MiB + 248.5 KiB = 3.8 MiB ModemManager [957]
3.0 MiB + 789.5 KiB = 3.8 MiB abrt-applet [2809]
3.7 MiB + 255.5 KiB = 4.0 MiB dhclient [2260]
3.6 MiB + 637.5 KiB = 4.3 MiB xfce4-session [2665]
3.1 MiB + 1.4 MiB = 4.4 MiB (sd-pam) [2170]
4.1 MiB + 521.5 KiB = 4.6 MiB udisksd [2801]
4.6 MiB + 558.5 KiB = 5.1 MiB systemd-udevd [657]
2.8 MiB + 2.5 MiB = 5.2 MiB systemd [1]
4.3 MiB + 1.3 MiB = 5.5 MiB xfce-polkit [2827]
5.5 MiB + 1.0 MiB = 6.5 MiB xfce4-notifyd [2877]
5.7 MiB + 1.0 MiB = 6.7 MiB xfce4-power-manager [2726]
5.6 MiB + 1.5 MiB = 7.1 MiB xfwm4 [2673]
7.0 MiB + 1.1 MiB = 8.1 MiB NetworkManager [1194]
7.2 MiB + 1.2 MiB = 8.4 MiB ibus-ui-gtk3 [3282]
7.8 MiB + 701.5 KiB = 8.5 MiB ibus-extension-gtk3 [3283]
8.5 MiB + 1.5 MiB = 9.9 MiB nm-applet [2800]
7.9 MiB + 2.1 MiB = 10.0 MiB leafpad [5129]
10.0 MiB + 1.1 MiB = 11.1 MiB abrt-dump-journal-core [1000]
10.4 MiB + 2.2 MiB = 12.6 MiB xfce4-panel [2688]
944.0 KiB + 12.2 MiB = 13.1 MiB skypeforlinux [2951]
13.5 MiB + 892.5 KiB = 14.3 MiB abrt-dump-journal-xorg [1001]
13.1 MiB + 1.7 MiB = 14.8 MiB cav [2955]
12.2 MiB + 3.0 MiB = 15.2 MiB xfce4-terminal [4160]
14.1 MiB + 1.4 MiB = 15.5 MiB xfdesktop [2694]
16.7 MiB + 193.5 KiB = 16.9 MiB polkitd [1002]
14.9 MiB + 2.0 MiB = 16.9 MiB blueman-tray [3047]
15.7 MiB + 2.1 MiB = 17.8 MiB seapplet [2883]
18.8 MiB + 2.3 MiB = 21.1 MiB blueman-applet [2797]
20.1 MiB + 1.3 MiB = 21.4 MiB firewalld [960]
20.3 MiB + 2.0 MiB = 22.3 MiB pulseaudio [2834]
20.5 MiB + 7.0 MiB = 27.5 MiB systemd-journald [627]
22.4 MiB + 5.7 MiB = 28.0 MiB abrt-dump-journal-oops [999]
29.4 MiB + 1.7 MiB = 31.1 MiB libvirtd [1206]
31.3 MiB + 103.5 KiB = 31.4 MiB net.downloadhelper.coapp-linux-64 [15418]
34.1 MiB + 16.5 KiB = 34.1 MiB docker-containerd [2092]
34.2 MiB + 3.1 MiB = 37.3 MiB dnfdragora-upda [2907]
32.9 MiB + 8.2 MiB = 41.1 MiB rsyslogd [927]
46.8 MiB + 618.5 KiB = 47.4 MiB ibus-engine-kkc [3304]
68.6 MiB + 107.5 KiB = 68.7 MiB dockerd [2075]
98.3 MiB + 26.5 MiB = 124.8 MiB skypeforlinux [2747]
148.9 MiB + 12.8 MiB = 161.7 MiB Xorg [1720]
200.0 MiB + 4.0 MiB = 204.0 MiB cmgdaemon [1658]
209.0 MiB + 29.1 MiB = 238.0 MiB skypeforlinux [3340]
333.0 MiB + 5.4 MiB = 338.5 MiB cmdagent [1686]
435.7 MiB + 17.2 MiB = 453.0 MiB Web Content [3635]
453.3 MiB + 23.6 MiB = 476.9 MiB Web Content [3998]
529.3 MiB + 34.6 MiB = 563.9 MiB firefox [3483]
831.2 MiB + 19.8 MiB = 851.0 MiB Web Content [3832]
889.0 MiB + 21.3 MiB = 910.3 MiB Web Content [4747]
---------------------------------
5.0 GiB
=================================

 Shared メモリが表示されるのは嬉しいです。

お腹すいた。。