いまどきのシンセサイザとLinuxについて


## はじめに
ふとしたきっかけでシンセのファームウェアのアップデータをダウンロードしたので、その時のメモ。
[KRONOS システム・バージョン2.1.1](http://www.gearzonemusic.com/Kronos/KRONOS_Update_2_1_1.zip)

いまどきのシンセサイザ(今回はKORG KRONOS)はLinuxべったりなシステムで
作られていると感じさせられたことをつらつらと書いています。

## ファイル内容と役割
ダウンロードしたzipファイルを解凍すると以下の様な構成になっていました。

```tex:KRONOS_Update_2_1_1.zipの内容
.
├── [-rw-r--r--]  DisplayUpdaterMessage
├── [-rw-r--r--]  KRONOS_Update_2_1_1.csum
├── [-rw-r--r--]  KRONOS_Update_2_1_1.tar.gz
├── [drwxr-xr-x]  Manuals
│   ├── [drwxr-xr-x]  English
│   │   ├── [-rw-r--r--]  KRONOS_2_1_New_Features_E1.pdf
│   │   ├── [-rw-r--r--]  KRONOS_ExtSetups_E1.pdf
│   │   ├── [-rw-r--r--]  KRONOS_Op_Guide_E6.pdf
│   │   ├── [-rw-r--r--]  KRONOS_Param_Guide_E6.pdf
│   │   ├── [-rw-r--r--]  KRONOS_Quick_Start_E3.pdf
│   │   ├── [-rw-r--r--]  KRONOS_Update_and_Restore_E2.pdf
│   │   ├── [-rw-r--r--]  KRONOS_VNL_EFGSJ2.pdf
│   │   └── [-rw-r--r--]  KRONOS_VNL_PRELOAD_V2_EFGS1.pdf
│   ├── [drwxr-xr-x]  French
│   │   ├── [-rw-r--r--]  KRONOS_2_1_New_Features_F1.pdf
│   │   ├── [-rw-r--r--]  KRONOS_Op_Guide_F6.pdf
│   │   ├── [-rw-r--r--]  KRONOS_Quick_Start_F3.pdf
│   │   ├── [-rw-r--r--]  KRONOS_Update_and_Restore_F2.pdf
│   │   ├── [-rw-r--r--]  KRONOS_VNL_EFGSJ2.pdf
│   │   └── [-rw-r--r--]  KRONOS_VNL_PRELOAD_V2_EFGS1.pdf
│   ├── [drwxr-xr-x]  German
│   │   ├── [-rw-r--r--]  KRONOS_2_1_New_Features_G1.pdf
│   │   ├── [-rw-r--r--]  KRONOS_Op_Guide_G6.pdf
│   │   ├── [-rw-r--r--]  KRONOS_Quick_Start_G3.pdf
│   │   ├── [-rw-r--r--]  KRONOS_Update_and_Restore_G2.pdf
│   │   ├── [-rw-r--r--]  KRONOS_VNL_EFGSJ2.pdf
│   │   └── [-rw-r--r--]  KRONOS_VNL_PRELOAD_V2_EFGS1.pdf
│   ├── [drwxr-xr-x]  Japanese
│   │   ├── [-rw-r--r--]  KRONOS_2_1_New_Features_J1.pdf
│   │   ├── [-rw-r--r--]  KRONOS_ExtSetups_J1.pdf
│   │   ├── [-rw-r--r--]  KRONOS_Op_Guide_J.pdf
│   │   ├── [-rw-r--r--]  KRONOS_Param_Guide_J.pdf
│   │   ├── [-rw-r--r--]  KRONOS_Quick_Start_J.pdf
│   │   ├── [-rw-r--r--]  KRONOS_Update_and_Restore_J2.pdf
│   │   ├── [-rw-r--r--]  KRONOS_VNL_EFGSJ2.pdf
│   │   └── [-rw-r--r--]  KRONOS_VNL_PRELOAD_V2_EFGSJ1.pdf
│   └── [drwxr-xr-x]  Spanish
│       ├── [-rw-r--r--]  KRONOS_2_1_New_Features_S.pdf
│       ├── [-rw-r--r--]  KRONOS_Quick_Start_S3.pdf
│       ├── [-rw-r--r--]  KRONOS_VNL_EFGSJ2.pdf
│       └── [-rw-r--r--]  KRONOS_VNL_PRELOAD_V2_EFGS1.pdf
├── [-rw-r--r--]  bc
├── [-rw-r--r--]  install.info
├── [-rw-r--r--]  md5sum
├── [drwxr-xr-x]  mnt
├── [-rw-r--r--]  posttar.sh
└── [-rw-r--r--]  pretar.sh

7 directories, 40 files

```

Manuals以下は説明書PDFなのでそれ以外を眺めます。

###### bcとmd5sum
名前と実行形式ファイルあることからLinuxのコマンドそのものと思われます。

###### DisplayUpdaterMessage
これはKORGオリジナルのコマンド。名前からファームウェアアップデート時に使うと思われます。

###### install.info

```txt:install.info
VERSION=2.1.1
SOURCE=KRONOS_Update_2_1_1.tar.gz
PRETARSCRIPT=pretar.sh
POSTTARSCRIPT=posttar.sh
SIGNATURE=08161729754c9e24eddf91aecdf4e714995c3636
```

所謂iniファイル等で見るkey=value形式で、それぞれの情報を持っています。
特に
`SOURCE`はファームウェアアップデート時に解凍するtarball
`PRETARSCRIPT`はPre Target Scriptの略と思われます。おそらくファームウェアアップデート前？に実行させたいスクリプト
`POSTTARSCRIPT`は`PRETARSCRIPT`と同様PreがPostになっただけでファームウェアアップデート後？に実行させたいスクリプト
をそれぞれ指定しています。
`SIGNATURE`はどこで使用しているか不明。

###### pretar.sh

```sh:pretar.sh
#!/bin/sh
rm -fr /mnt/updaterSource/mnt/lib/modules/2.6.32.11-korg/kernel/sound
echo "Verifying install media..." > /tmp/installer_status
/mnt/updaterSource/DisplayUpdaterMessage "Verifying install media..."
checksum=`/mnt/updaterSource/md5sum /mnt/updaterSource/KRONOS_Update_2_1_1.tar.gz | awk '{ print $1; }'`
if [ "3ef19d31a7c7467123ac22cb1efe12dc" != "$checksum" ]; then
	kill -9 $(/sbin/pidof UpdateOS)
	/mnt/updaterSource/DisplayUpdaterMessage "Checksum Error! Update failed, please restart the system."
fi
checksum=`/mnt/updaterSource/md5sum /mnt/updaterSource/DisplayUpdaterMessage | awk '{ print $1; }'`
if [ "18f79a009cef9054a71377bb863b0647" != "$checksum" ]; then
	kill -9 $(/sbin/pidof UpdateOS)
	/mnt/updaterSource/DisplayUpdaterMessage "Checksum Error! Update failed, please restart the system."
fi
checksum=`/mnt/updaterSource/md5sum /mnt/updaterSource/bc | awk '{ print $1; }'`
if [ "cb9b8612bfb57c7fad4484b341090d1f" != "$checksum" ]; then
	kill -9 $(/sbin/pidof UpdateOS)
	/mnt/updaterSource/DisplayUpdaterMessage "Checksum Error! Update failed, please restart the system."
fi
/mnt/updaterSource/DisplayUpdaterMessage "SetTextPalette"
# make sure that the mnt/ folder exists
if [ ! -e /mnt/updaterSource/mnt ]; then
	mkdir /mnt/updaterSource/mnt
fi
kill $(/sbin/pidof vsftpd)
kill $(/sbin/pidof avahi-daemon)
kill $(/sbin/pidof messagebus)
kill $(/sbin/pidof ifplugd)
sleep 2
kill -9 $(/sbin/pidof vsftpd)
kill -9 $(/sbin/pidof avahi-daemon)
kill -9 $(/sbin/pidof messagebus)
kill -9 $(/sbin/pidof ifplugd)
sleep 2
curDate=`date +%s`
if [ $curDate -lt 1386066775 ]; then
	date --set=@1386066775
fi


```
堂々とシェルスクリプトが出現します。いまどきのシンセサイザはシェルスクリプトくらい余裕で動くらしいです。
***

```bash:pretar.shの一部
rm -fr /mnt/updaterSource/mnt/lib/modules/2.6.32.11-korg/kernel/sound
```
一旦ファイルorディレクトリを削除。ちなみに現段階ではmnt以下は空ですが
KRONOS_Update_2_1_1.tar.gzを解凍するとmnt以下に大量にファイルが作られます。(後半で記述)
//ただし`mnt/lib/modules/2.6.32.11-korg/kernel`は解凍すると作られますが、
//`mnt/lib/modules/2.6.32.11-korg/kernel/sound`というファイルorディレクトリは作られませんでした。
***

```bash:pretar.shの一部
echo "Verifying install media..." > /tmp/installer_status
```
/tmp以下にログを吐く。アップデート失敗時に後でどのフェーズまで進んでコケたかの調査用とかそのあたりと思われます。
シンセサイザの世界でも"便利な/tmpログ"は定石のようです。
***

```bash:pretar.shの一部
/mnt/updaterSource/DisplayUpdaterMessage "Verifying install media..."
```
ファームウェアアップデート時にはUSBメモリの直下にKRONOS_Update_2_1_1.zipを解凍したファイル郡を置くことや
`/mnt/updaterSource/DisplayUpdaterMessage`とシェルスクリプト内で記述されていることから
ファームウェアアップデート時にKRONOSはUSBメモリを`/mnt/updaterSource`としてマウントしていると思われます。
(orシンボリックリンクを貼っている、とかかもしれません。)
//この場合mntはmountの略とかでしょうか。

`DisplayUpdaterMessage`コマンドに引数として`"Verifying install media..."`を与えると
その引数に応じたメッセージや画像などがKRONOSの画面に出力されると思われます。
***

```bash:pretar.shの一部
checksum=`/mnt/updaterSource/md5sum /mnt/updaterSource/KRONOS_Update_2_1_1.tar.gz | awk '{ print $1; }'`
```
KRONOS_Update_2_1_1.tar.gzのチェックサムを取得。
コマンドの結果の一つ目のフィールドをawkで切り出すのは、これまたシンセサイザの世界でも定石のようです。

その後つらつらとif文でチェックサムの確認をして値が異なっていれば無慈悲に`kill -9`で終了します。
***

```bash:pretar.shの一部
if [ ! -e /mnt/updaterSource/mnt ]; then
    mkdir /mnt/updaterSource/mnt
fi
```
USBメモリにmntがなければ作ります。
***

```bash:pretar.shの一部
kill $(/sbin/pidof vsftpd)
kill $(/sbin/pidof avahi-daemon)
kill $(/sbin/pidof messagebus)
kill $(/sbin/pidof ifplugd)
sleep 2
kill -9 $(/sbin/pidof vsftpd)
kill -9 $(/sbin/pidof avahi-daemon)
kill -9 $(/sbin/pidof messagebus)
kill -9 $(/sbin/pidof ifplugd)
sleep 2
```
ひたすらデーモンをkill。途中`sleep 2`しているあたりは
デーモンが終了するのに時間がかかるので、確実に終了するまで待つとかそんな感じの意図で`sleep`しているのでしょうか。
"必殺なんかようわからんけど`sleep`入れたら動きました!"定石。あるある。
***

```bash:pretar.shの一部
curDate=`date +%s`
if [ $curDate -lt 1386066775 ]; then
    date --set=@1386066775
fi
```

現在のunixtimeを取得して1386066775(2013/12/03 19:32:55)より現在時間の方が小さかったら1386066775をセット。
KRONOS システム・バージョン2.1.1のリリース日がちょうど2013/12/03でなので
KRONOSの時計が正常に機能していれば、ほぼほぼこのif文通ることはないはず…なのですが何なのでしょうか。
//開発中の時はifの中に入るが今となっては唯の残骸and/or
//バージョン2.1.1は現在時刻が2013/12/03 19:32:55以降であることを前提としたロジックがあるとかでしょうか。
***

###### posttar.sh

```sh:posttar.sh
#!/bin/sh
chown 500.500 mnt/korg/rw/HD
chmod 555 mnt/korg/ftp
if [ ! -e /korg/rw/Startup/KronosNet.conf ]; then
	echo "kronos
kronos
" > /korg/rw/Startup/KronosNet.conf
fi

if [ -d /korg/rw2/HD ]; then
        chown 500.500 /korg/rw2/HD
      chmod 775 /korg/rw2/HD
fi
if [ -d /korg/rw2/HD/FACTORY ]; then
    chown -R 500.500 /korg/rw2/HD/FACTORY
fi
if [ -d /korg/rw2/HD/Korg\ Options ]; then
       chown -R 500.500 /korg/rw2/HD/Korg\ Options
fi

numberOfFilesToVerify=0
while read line
do
	let "numberOfFilesToVerify = numberOfFilesToVerify + 1"
done < KRONOS_Update_2_1_1.csum
echo "number of files to verify is $numberOfFilesToVerify" >> /tmp/updater_error
fpProgressBarIncrementPerFile=$(echo "scale=4; 100.0 / $numberOfFilesToVerify" | /mnt/updaterSource/bc -q 2>/dev/null)
/mnt/updaterSource/DisplayUpdaterMessage "Verifying Installed Files..."
/mnt/updaterSource/DisplayUpdaterMessage "SetDefaultPalette"
echo "set 0" > /proc/OmapNKS4ProgressBar
fpProgress=0.0
progress=0
checksumErrorFound=0
while read line
do
	fileName=`echo "$line" | awk '{ print $1 }'`
	refchecksum=`echo "$line" | awk '{ print $2 }'`
	checksum=`/mnt/updaterSource/md5sum $fileName | awk '{ print $1 }'`
	if [ "$checksum" != "$refchecksum" ]; then
		echo "Checksum failure for $fileName" >> /tmp/updater_error
		let "checksumErrorFound = checksumErrorFound + 1"
	fi
	fpProgress=$(echo "scale=4; $fpProgress + $fpProgressBarIncrementPerFile" | /mnt/updaterSource/bc -q 2>/dev/null)
	newProgress=$(echo "($fpProgress+0.5)/1" | /mnt/updaterSource/bc -q 2>/dev/null)
	if [ $progress != $newProgress ]; then
		progress=$newProgress
		echo "set $progress" > /proc/OmapNKS4ProgressBar
		echo "updated progress bar with $progress" >> /tmp/updater_error
	fi
done < KRONOS_Update_2_1_1.csum
if [ $checksumErrorFound -ne 0 ]; then
	kill -9 $(/sbin/pidof UpdateOS)
	/mnt/updaterSource/DisplayUpdaterMessage "Checksum Error! Update failed, recovery may require format and full install."
	echo "$checksumErrorFound installed files had checksum errors" >> /tmp/updater_error
	exit 1
else
	echo "No checksum errors found" >> /tmp/updater_error
fi
/mnt/updaterSource/DisplayUpdaterMessage "Finishing Installation..."
/mnt/updaterSource/DisplayUpdaterMessage "SetDefaultPalette"
echo "set 0" > /proc/OmapNKS4ProgressBar
sync
progress=6
for seconds in {1..15}; do
	echo "set $progress" > /proc/OmapNKS4ProgressBar
	sleep 1
	let "progress = progress + 6"
done
echo "set 100" > /proc/OmapNKS4ProgressBar
/mnt/updaterSource/DisplayUpdaterMessage "SetTextPalette"


```
そこそこ長いです。
***

```bash:posttar.shの一部
chown 500.500 mnt/korg/rw/HD
chmod 555 mnt/korg/ftp
```
オーナとパーミッション変更。
***

```bash:posttar.shの一部
if [ ! -e /korg/rw/Startup/KronosNet.conf ]; then
    echo "kronos
kronos
" > /korg/rw/Startup/KronosNet.conf
fi

if [ -d /korg/rw2/HD ]; then
        chown 500.500 /korg/rw2/HD
      chmod 775 /korg/rw2/HD
fi
if [ -d /korg/rw2/HD/FACTORY ]; then
    chown -R 500.500 /korg/rw2/HD/FACTORY
fi
if [ -d /korg/rw2/HD/Korg\ Options ]; then
       chown -R 500.500 /korg/rw2/HD/Korg\ Options
fi
```

ファイルorディレクトリの存在確認と存在しなかった/した時の処理。
***

```bash:posttar.shの一部
numberOfFilesToVerify=0
while read line
do
    let "numberOfFilesToVerify = numberOfFilesToVerify + 1"
done < KRONOS_Update_2_1_1.csum
echo "number of files to verify is $numberOfFilesToVerify" >> /tmp/updater_error
```
`KRONOS_Update_2_1_1.csum`の行数をカウント。
ファイルの行数カウントに```wc -l```は不都合だったのでしょうか。
***

```bash:posttar.shの一部
fpProgressBarIncrementPerFile=$(echo "scale=4; 100.0 / $numberOfFilesToVerify" | /mnt/updaterSource/bc -q 2>/dev/null)
```

`$numberOfFilesToVerify`がファイル行数なので、一行処理すると何%進めるかを`fpProgressBarIncrementPerFile`変数にセット。
`$numberOfFilesToVerify`が仮に1000とかなら 100/1000 = 0.1 なのでそんな感じだと思われます。
標準エラー出力は`/dev/null`にポイーして"臭いものには蓋"定石でしょうか。
***

```bash:posttar.shの一部
echo "set 0" > /proc/OmapNKS4ProgressBar
fpProgress=0.0
progress=0
checksumErrorFound=0
while read line
do
    fileName=`echo "$line" | awk '{ print $1 }'`
    refchecksum=`echo "$line" | awk '{ print $2 }'`
    checksum=`/mnt/updaterSource/md5sum $fileName | awk '{ print $1 }'`
    if [ "$checksum" != "$refchecksum" ]; then
        echo "Checksum failure for $fileName" >> /tmp/updater_error
        let "checksumErrorFound = checksumErrorFound + 1"
    fi
    fpProgress=$(echo "scale=4; $fpProgress + $fpProgressBarIncrementPerFile" | /mnt/updaterSource/bc -q 2>/dev/null)
    newProgress=$(echo "($fpProgress+0.5)/1" | /mnt/updaterSource/bc -q 2>/dev/null)
    if [ $progress != $newProgress ]; then
        progress=$newProgress
        echo "set $progress" > /proc/OmapNKS4ProgressBar
        echo "updated progress bar with $progress" >> /tmp/updater_error
    fi
done < KRONOS_Update_2_1_1.csum
```
`KRONOS_Update_2_1_1.csum`を一行ずつ読み込んで処理します。

`/proc/OmapNKS4ProgressBar`は`/proc`と付いているので仮想的なファイル・システムになっていて
そこに`set "値"`をリダイレクトするとKRONOSの画面のプログレスバーが値に応じて伸びていくと思われます。
***

```bash:posttar.shの一部
if [ $checksumErrorFound -ne 0 ]; then
    kill -9 $(/sbin/pidof UpdateOS)
    /mnt/updaterSource/DisplayUpdaterMessage "Checksum Error! Update failed, recovery may require format and full install."
    echo "$checksumErrorFound installed files had checksum errors" >> /tmp/updater_error
    exit 1
else
    echo "No checksum errors found" >> /tmp/updater_error
fi
```
`$checksumErrorFound`がひとつ以上あった場合エラーメッセージ出力とその旨を/tmpログに落とす、なければ/tmpにログ落とす。
***

```bash:posttar.shの一部
/mnt/updaterSource/DisplayUpdaterMessage "Finishing Installation..."
/mnt/updaterSource/DisplayUpdaterMessage "SetDefaultPalette"
echo "set 0" > /proc/OmapNKS4ProgressBar
sync
progress=6
for seconds in {1..15}; do
    echo "set $progress" > /proc/OmapNKS4ProgressBar
    sleep 1
    let "progress = progress + 6"
done
echo "set 100" > /proc/OmapNKS4ProgressBar
/mnt/updaterSource/DisplayUpdaterMessage "SetTextPalette"
```
このフェーズが終了すればユーザによってKRONOSの電源がOFFにされるので
`sync`コマンドでディスク・キャッシュの内容をディスクに書き込みます。
ディスクに書き込むのに15秒もあれば十分というところで、そのようなfor文になっていると思われます。

## KRONOS_Update_2_1_1.tar.gz の内容
こちらのtarballはファームウェアアップデートの任意のタイミングで解凍され`mnt`以下に展開されます。(おそらく)
解凍先を特に指定していなければUSBメモリ上に解凍され、KRONOS本体からはUSBメモリが`/mnt/updaterSource`として見えるので
KRONOS_Update_2_1_1.tar.gzを解凍して出来た`mnt`は`/mnt/updaterSource/mnt`として見えるはずです。(ややこしい)

```tex:KRONOS_Update_2_1_1.tar.gzの内容
mnt/
├── [drwxr-xr-x]  bin
│   ├── [-rw-r--r--]  ShowReauthScreen
│   ├── [-rw-r--r--]  dbus-daemon
│   ├── [-rw-r--r--]  egrep
│   ├── [-rw-r--r--]  fanctrld
│   ├── [-rw-r--r--]  ln
│   ├── [-rw-r--r--]  md5sum
│   ├── [-rw-r--r--]  ps
│   └── [-rw-r--r--]  udevinfo
├── [drwxr-xr-x]  boot
│   ├── [-rw-r--r--]  bzImage
│   └── [drwxr-xr-x]  grub
│       ├── [-rw-r--r--]  grub.conf
│       └── [-rw-r--r--]  menu.lst
├── [drwxr-xr-x]  dev
│   └── [drwxr-xr-x]  mapper
│       └── [-rw-r--r--]  control
├── [drwxr-xr-x]  etc
│   ├── [-rw-r--r--]  OA.rc
│   ├── [-rw-r--r--]  OA.si
│   ├── [drwxr-xr-x]  avahi
│   │   ├── [-rw-r--r--]  avahi-autoipd.action
│   │   ├── [-rw-r--r--]  avahi-daemon.conf
│   │   ├── [drwxr-xr-x]  etc
│   │   │   └── [-rw-r--r--]  localtime
│   │   ├── [-rw-r--r--]  hosts
│   │   └── [drwxr-xr-x]  services
│   │       ├── [-rw-r--r--]  ftp.service
│   │       └── [-rw-r--r--]  ssh.service
│   ├── [drwxr-xr-x]  dbus-1
│   │   ├── [-rw-r--r--]  session.conf
│   │   ├── [drwxr-xr-x]  session.d
│   │   ├── [-rw-r--r--]  system.conf
│   │   └── [drwxr-xr-x]  system.d
│   │       ├── [-rw-r--r--]  ConsoleKit.conf
│   │       ├── [-rw-r--r--]  NetworkManager.conf
│   │       ├── [-rw-r--r--]  avahi-dbus.conf
│   │       ├── [-rw-r--r--]  bluetooth.conf
│   │       ├── [-rw-r--r--]  cups.conf
│   │       ├── [-rw-r--r--]  hal.conf
│   │       ├── [-rw-r--r--]  newprinternotification.conf
│   │       ├── [-rw-r--r--]  nm-applet.conf
│   │       ├── [-rw-r--r--]  nm-dhcp-client.conf
│   │       ├── [-rw-r--r--]  nm-openvpn-service.conf
│   │       ├── [-rw-r--r--]  nm-vpnc-service.conf
│   │       ├── [-rw-r--r--]  setroubleshootd.conf
│   │       ├── [-rw-r--r--]  wpa_supplicant.conf
│   │       └── [-rw-r--r--]  yum-updatesd.conf
│   ├── [-rw-r--r--]  group
│   ├── [-rw-r--r--]  gshadow
│   ├── [drwxr-xr-x]  init.d
│   │   ├── [-rw-r--r--]  avahi-daemon
│   │   ├── [-rw-r--r--]  functions
│   │   └── [-rw-r--r--]  messagebus
│   ├── [-rw-r--r--]  modprobe.conf
│   ├── [-rw-r--r--]  nsswitch.conf
│   ├── [drwxr-xr-x]  pam.d
│   │   ├── [-rw-r--r--]  atd
│   │   ├── [-rw-r--r--]  authconfig
│   │   ├── [-rw-r--r--]  authconfig-gtk
│   │   ├── [-rw-r--r--]  authconfig-tui
│   │   ├── [-rw-r--r--]  chfn
│   │   ├── [-rw-r--r--]  chsh
│   │   ├── [-rw-r--r--]  config-util
│   │   ├── [-rw-r--r--]  cpufreq-selector
│   │   ├── [-rw-r--r--]  crond
│   │   ├── [-rw-r--r--]  cups
│   │   ├── [-rw-r--r--]  cvs
│   │   ├── [-rw-r--r--]  dateconfig
│   │   ├── [-rw-r--r--]  eject
│   │   ├── [-rw-r--r--]  gdm
│   │   ├── [-rw-r--r--]  gdm-autologin
│   │   ├── [-rw-r--r--]  gdmsetup
│   │   ├── [-rw-r--r--]  gnome-screensaver
│   │   ├── [-rw-r--r--]  gnome-system-log
│   │   ├── [-rw-r--r--]  halt
│   │   ├── [-rw-r--r--]  kbdrate
│   │   ├── [-rw-r--r--]  kcheckpass
│   │   ├── [-rw-r--r--]  kdm
│   │   ├── [-rw-r--r--]  kdm-np
│   │   ├── [-rw-r--r--]  kppp
│   │   ├── [-rw-r--r--]  kscreensaver
│   │   ├── [-rw-r--r--]  login
│   │   ├── [-rw-r--r--]  neat
│   │   ├── [-rw-r--r--]  newrole
│   │   ├── [-rw-r--r--]  other
│   │   ├── [-rw-r--r--]  passwd
│   │   ├── [-rw-r--r--]  pirut
│   │   ├── [-rw-r--r--]  pm-hibernate
│   │   ├── [-rw-r--r--]  pm-powersave
│   │   ├── [-rw-r--r--]  pm-suspend
│   │   ├── [-rw-r--r--]  pm-suspend-hybrid
│   │   ├── [-rw-r--r--]  polkit
│   │   ├── [-rw-r--r--]  poweroff
│   │   ├── [-rw-r--r--]  ppp
│   │   ├── [-rw-r--r--]  pup
│   │   ├── [-rw-r--r--]  reboot
│   │   ├── [-rw-r--r--]  remote
│   │   ├── [-rw-r--r--]  run_init
│   │   ├── [-rw-r--r--]  runuser
│   │   ├── [-rw-r--r--]  runuser-l
│   │   ├── [-rw-r--r--]  screen
│   │   ├── [-rw-r--r--]  selinux-polgengui
│   │   ├── [-rw-r--r--]  serviceconf
│   │   ├── [-rw-r--r--]  setup
│   │   ├── [-rw-r--r--]  smtp.sendmail
│   │   ├── [-rw-r--r--]  sshd
│   │   ├── [-rw-r--r--]  su
│   │   ├── [-rw-r--r--]  su-l
│   │   ├── [-rw-r--r--]  sudo
│   │   ├── [-rw-r--r--]  sudo-i
│   │   ├── [-rw-r--r--]  system-auth
│   │   ├── [-rw-r--r--]  system-auth-ac
│   │   ├── [-rw-r--r--]  system-cdinstall-helper
│   │   ├── [-rw-r--r--]  system-config-authentication
│   │   ├── [-rw-r--r--]  system-config-date
│   │   ├── [-rw-r--r--]  system-config-display
│   │   ├── [-rw-r--r--]  system-config-firewall
│   │   ├── [-rw-r--r--]  system-config-keyboard
│   │   ├── [-rw-r--r--]  system-config-language
│   │   ├── [-rw-r--r--]  system-config-network
│   │   ├── [-rw-r--r--]  system-config-network-cmd
│   │   ├── [-rw-r--r--]  system-config-printer
│   │   ├── [-rw-r--r--]  system-config-securitylevel
│   │   ├── [-rw-r--r--]  system-config-selinux
│   │   ├── [-rw-r--r--]  system-config-services
│   │   ├── [-rw-r--r--]  system-config-soundcard
│   │   ├── [-rw-r--r--]  system-config-time
│   │   ├── [-rw-r--r--]  system-config-users
│   │   ├── [-rw-r--r--]  system-install-packages
│   │   ├── [-rw-r--r--]  vsftpd
│   │   ├── [-rw-r--r--]  xdm
│   │   └── [-rw-r--r--]  xserver
│   ├── [-rw-r--r--]  passwd
│   ├── [drwxr-xr-x]  rc.d
│   │   └── [drwxr-xr-x]  init.d
│   │       ├── [-rw-r--r--]  avahi-daemon
│   │       ├── [-rw-r--r--]  functions
│   │       └── [-rw-r--r--]  messagebus
│   ├── [-rw-r--r--]  services
│   ├── [-rw-r--r--]  shadow
│   ├── [drwxr-xr-x]  sysconfig
│   │   ├── [-rw-r--r--]  network
│   │   └── [drwxr-xr-x]  network-scripts
│   │       ├── [-rw-r--r--]  ifcfg-eth0
│   │       ├── [-rw-r--r--]  ifcfg-eth1
│   │       ├── [-rw-r--r--]  ifcfg-eth2
│   │       ├── [-rw-r--r--]  network-functions
│   │       └── [-rw-r--r--]  network-functions.lite
│   ├── [drwxr-xr-x]  vsftpd
│   │   └── [-rw-r--r--]  ftpusers
│   └── [-rw-r--r--]  vsftpd.conf
├── [drwxr-xr-x]  korg
│   ├── [-rw-r--r--]  VersionInfo
│   ├── [drwxr-xr-x]  ftp
│   │   ├── [drwxr-xr-x]  SSD1
│   │   └── [drwxr-xr-x]  SSD2
│   ├── [drwxr-xr-x]  ro
│   │   ├── [-rw-r--r--]  Eva.img
│   │   └── [-rw-r--r--]  Mod.img
│   ├── [drwxr-xr-x]  rw
│   │   ├── [drwxr-xr-x]  PRELOAD
│   │   │   └── [drwxr-xr-x]  PianoTypes
│   │   │       ├── [-rw-r--r--]  PianoType00
│   │   │       ├── [-rw-r--r--]  PianoType01
│   │   │       ├── [-rw-r--r--]  PianoType02
│   │   │       ├── [-rw-r--r--]  PianoType03
│   │   │       ├── [-rw-r--r--]  PianoType04
│   │   │       ├── [-rw-r--r--]  PianoType05
│   │   │       ├── [-rw-r--r--]  PianoType06
│   │   │       ├── [-rw-r--r--]  PianoType07
│   │   │       ├── [-rw-r--r--]  PianoType08
│   │   │       ├── [-rw-r--r--]  PianoType09
│   │   │       ├── [-rw-r--r--]  PianoType10
│   │   │       ├── [-rw-r--r--]  PianoType11
│   │   │       ├── [-rw-r--r--]  PianoType12
│   │   │       ├── [-rw-r--r--]  PianoType13
│   │   │       ├── [-rw-r--r--]  PianoType14
│   │   │       ├── [-rw-r--r--]  PianoType15
│   │   │       ├── [-rw-r--r--]  PianoType16
│   │   │       ├── [-rw-r--r--]  PianoType17
│   │   │       ├── [-rw-r--r--]  PianoType18
│   │   │       ├── [-rw-r--r--]  PianoType19
│   │   │       ├── [-rw-r--r--]  PianoType20
│   │   │       ├── [-rw-r--r--]  PianoType21
│   │   │       ├── [-rw-r--r--]  PianoType22
│   │   │       ├── [-rw-r--r--]  PianoType23
│   │   │       ├── [-rw-r--r--]  PianoType24
│   │   │       ├── [-rw-r--r--]  PianoType25
│   │   │       ├── [-rw-r--r--]  PianoType26
│   │   │       ├── [-rw-r--r--]  PianoType27
│   │   │       ├── [-rw-r--r--]  PianoType28
│   │   │       ├── [-rw-r--r--]  PianoType29
│   │   │       ├── [-rw-r--r--]  PianoType30
│   │   │       ├── [-rw-r--r--]  PianoType31
│   │   │       ├── [-rw-r--r--]  PianoType32
│   │   │       ├── [-rw-r--r--]  PianoType33
│   │   │       ├── [-rw-r--r--]  PianoType34
│   │   │       ├── [-rw-r--r--]  PianoType35
│   │   │       ├── [-rw-r--r--]  PianoType36
│   │   │       ├── [-rw-r--r--]  PianoType37
│   │   │       ├── [-rw-r--r--]  PianoType38
│   │   │       ├── [-rw-r--r--]  PianoType39
│   │   │       ├── [-rw-r--r--]  PianoType40
│   │   │       ├── [-rw-r--r--]  PianoType41
│   │   │       ├── [-rw-r--r--]  PianoType42
│   │   │       ├── [-rw-r--r--]  PianoType43
│   │   │       ├── [-rw-r--r--]  PianoType44
│   │   │       ├── [-rw-r--r--]  PianoType45
│   │   │       ├── [-rw-r--r--]  PianoType46
│   │   │       ├── [-rw-r--r--]  PianoType47
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo00
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo01
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo02
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo03
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo04
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo05
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo06
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo07
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo08
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo09
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo10
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo11
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo12
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo13
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo14
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo15
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo16
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo17
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo18
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo19
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo20
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo21
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo22
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo23
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo24
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo25
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo26
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo27
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo28
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo29
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo30
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo31
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo32
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo33
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo34
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo35
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo36
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo37
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo38
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo39
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo40
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo41
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo42
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo43
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo44
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo45
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo46
│   │   │       ├── [-rw-r--r--]  PianoTypeInfo47
│   │   │       └── [-rw-r--r--]  PianoTypeNames
│   │   ├── [drwxr-xr-x]  Startup
│   │   │   └── [-rw-r--r--]  KronosNet.conf
│   │   └── [drwxr-xr-x]  var
│   │       ├── [drwxr-xr-x]  lib
│   │       ├── [drwxr-xr-x]  lock
│   │       │   └── [drwxr-xr-x]  subsys
│   │       └── [drwxr-xr-x]  run
│   │           ├── [drwxr-xr-x]  avahi-daemon
│   │           └── [drwxr-xr-x]  dbus
│   └── [drwxr-xr-x]  rw2
├── [drwxr-xr-x]  lib
│   ├── [-rw-r--r--]  libavahi-client.so.3
│   ├── [-rw-r--r--]  libavahi-common.so.3
│   ├── [-rw-r--r--]  libavahi-core.so.5
│   ├── [-rw-r--r--]  libcap.so.1
│   ├── [-rw-r--r--]  libcrypt.so.1
│   ├── [-rw-r--r--]  libdaemon.so.0
│   ├── [-rw-r--r--]  libdbus-1.so.3
│   ├── [-rw-r--r--]  libexpat.so.1
│   ├── [-rw-r--r--]  libglib-2.0.so.0
│   ├── [-rw-r--r--]  libgmodule-2.0.so.0
│   ├── [-rw-r--r--]  libgobject-2.0.so.0
│   ├── [-rw-r--r--]  libnsl.so.1
│   ├── [-rw-r--r--]  libnss3.so
│   ├── [-rw-r--r--]  libnss_compat.so.2
│   ├── [-rw-r--r--]  libnss_db.so.2
│   ├── [-rw-r--r--]  libnss_dns.so.2
│   ├── [-rw-r--r--]  libnss_files.so.2
│   ├── [-rw-r--r--]  libnss_hesiod.so.2
│   ├── [-rw-r--r--]  libnss_mdns4.so.2
│   ├── [-rw-r--r--]  libnss_mdns4_minimal.so.2
│   ├── [-rw-r--r--]  libnss_nis.so.2
│   ├── [-rw-r--r--]  libnss_nisplus.so.2
│   ├── [-rw-r--r--]  libnss_winbind.so.2
│   ├── [-rw-r--r--]  libnss_wins.so.2
│   ├── [-rw-r--r--]  libnssckbi.so
│   ├── [-rw-r--r--]  libpam.so.0
│   ├── [-rw-r--r--]  libpam_misc.so.0
│   ├── [-rw-r--r--]  libreadline.so.5
│   ├── [-rw-r--r--]  libssp.so.0
│   ├── [-rw-r--r--]  libuser.so.1
│   ├── [-rw-r--r--]  libutil.so.1
│   ├── [-rw-r--r--]  libxml2.so.2
│   ├── [drwxr-xr-x]  modules
│   │   └── [drwxr-xr-x]  2.6.32.11-korg
│   │       ├── [drwxr-xr-x]  kernel
│   │       │   ├── [drwxr-xr-x]  drivers
│   │       │   │   └── [drwxr-xr-x]  net
│   │       │   │       └── [drwxr-xr-x]  usb
│   │       │   │           ├── [-rw-r--r--]  asix.ko
│   │       │   │           ├── [-rw-r--r--]  pegasus.ko
│   │       │   │           ├── [-rw-r--r--]  smsc7500.ko
│   │       │   │           └── [-rw-r--r--]  usbnet.ko
│   │       │   └── [drwxr-xr-x]  fs
│   │       │       └── [drwxr-xr-x]  fuse
│   │       │           └── [-rw-r--r--]  fuse.ko
│   │       ├── [-rw-r--r--]  modules.alias
│   │       ├── [-rw-r--r--]  modules.dep
│   │       ├── [-rw-r--r--]  modules.order
│   │       ├── [-rw-r--r--]  modules.symbols
│   │       └── [-rw-r--r--]  modules.usbmap
│   └── [drwxr-xr-x]  security
│       ├── [-rw-r--r--]  pam_access.so
│       ├── [-rw-r--r--]  pam_ccreds.so
│       ├── [-rw-r--r--]  pam_chroot.so
│       ├── [-rw-r--r--]  pam_ck_connector.so
│       ├── [-rw-r--r--]  pam_console.so
│       ├── [-rw-r--r--]  pam_cracklib.so
│       ├── [-rw-r--r--]  pam_debug.so
│       ├── [-rw-r--r--]  pam_deny.so
│       ├── [-rw-r--r--]  pam_echo.so
│       ├── [-rw-r--r--]  pam_env.so
│       ├── [-rw-r--r--]  pam_exec.so
│       ├── [-rw-r--r--]  pam_faildelay.so
│       ├── [drwxr-xr-x]  pam_filter
│       │   └── [-rw-r--r--]  upperLOWER
│       ├── [-rw-r--r--]  pam_filter.so
│       ├── [-rw-r--r--]  pam_ftp.so
│       ├── [-rw-r--r--]  pam_gnome_keyring.la
│       ├── [-rw-r--r--]  pam_gnome_keyring.so
│       ├── [-rw-r--r--]  pam_group.so
│       ├── [-rw-r--r--]  pam_issue.so
│       ├── [-rw-r--r--]  pam_keyinit.so
│       ├── [drwxr-xr-x]  pam_krb5
│       │   └── [-rw-r--r--]  pam_krb5_storetmp
│       ├── [-rw-r--r--]  pam_krb5.so
│       ├── [-rw-r--r--]  pam_krb5afs.so
│       ├── [-rw-r--r--]  pam_lastlog.so
│       ├── [-rw-r--r--]  pam_ldap.so
│       ├── [-rw-r--r--]  pam_limits.so
│       ├── [-rw-r--r--]  pam_listfile.so
│       ├── [-rw-r--r--]  pam_localuser.so
│       ├── [-rw-r--r--]  pam_loginuid.so
│       ├── [-rw-r--r--]  pam_mail.so
│       ├── [-rw-r--r--]  pam_mkhomedir.so
│       ├── [-rw-r--r--]  pam_motd.so
│       ├── [-rw-r--r--]  pam_namespace.so
│       ├── [-rw-r--r--]  pam_nologin.so
│       ├── [-rw-r--r--]  pam_passwdqc.so
│       ├── [-rw-r--r--]  pam_permit.so
│       ├── [-rw-r--r--]  pam_pkcs11.so
│       ├── [-rw-r--r--]  pam_postgresok.so
│       ├── [-rw-r--r--]  pam_rhosts.so
│       ├── [-rw-r--r--]  pam_rhosts_auth.so
│       ├── [-rw-r--r--]  pam_rootok.so
│       ├── [-rw-r--r--]  pam_rps.so
│       ├── [-rw-r--r--]  pam_securetty.so
│       ├── [-rw-r--r--]  pam_selinux.so
│       ├── [-rw-r--r--]  pam_selinux_permit.so
│       ├── [-rw-r--r--]  pam_shells.so
│       ├── [-rw-r--r--]  pam_smb_auth.so
│       ├── [-rw-r--r--]  pam_smbpass.so
│       ├── [-rw-r--r--]  pam_stress.so
│       ├── [-rw-r--r--]  pam_succeed_if.so
│       ├── [-rw-r--r--]  pam_tally.so
│       ├── [-rw-r--r--]  pam_tally2.so
│       ├── [-rw-r--r--]  pam_time.so
│       ├── [-rw-r--r--]  pam_timestamp.so
│       ├── [-rw-r--r--]  pam_umask.so
│       ├── [-rw-r--r--]  pam_unix.so
│       ├── [-rw-r--r--]  pam_unix_acct.so
│       ├── [-rw-r--r--]  pam_unix_auth.so
│       ├── [-rw-r--r--]  pam_unix_passwd.so
│       ├── [-rw-r--r--]  pam_unix_session.so
│       ├── [-rw-r--r--]  pam_userdb.so
│       ├── [-rw-r--r--]  pam_warn.so
│       ├── [-rw-r--r--]  pam_wheel.so
│       ├── [-rw-r--r--]  pam_winbind.so
│       └── [-rw-r--r--]  pam_xauth.so
├── [drwxr-xr-x]  sbin
│   ├── [-rw-r--r--]  GetPubIdMod.ko
│   ├── [-rw-r--r--]  InstallEXs
│   ├── [-rw-r--r--]  MIDID
│   ├── [-rw-r--r--]  OmapNKS4Module.ko
│   ├── [-rw-r--r--]  OmapVideoModule.ko
│   ├── [-rw-r--r--]  STGEnabler.ko
│   ├── [-rw-r--r--]  STGGmp.ko
│   ├── [-rw-r--r--]  USBMidiAccessory.ko
│   ├── [-rw-r--r--]  UpdateOS
│   ├── [-rw-r--r--]  UpdateRandomSeed.sh
│   ├── [-rw-r--r--]  avahi-autoipd
│   ├── [-rw-r--r--]  avahi-daemon
│   ├── [-rw-r--r--]  consoletype
│   ├── [-rw-r--r--]  dhclient
│   ├── [-rw-r--r--]  e2label
│   ├── [-rw-r--r--]  ifdown.lite
│   ├── [-rw-r--r--]  ifplugd
│   ├── [-rw-r--r--]  ifplugd.lite
│   ├── [-rw-r--r--]  ifplugd.lite.action
│   ├── [-rw-r--r--]  ifplugstatus
│   ├── [-rw-r--r--]  ifup.lite
│   ├── [-rw-r--r--]  loadmod.ko
│   ├── [-rw-r--r--]  loadoa
│   ├── [-rw-r--r--]  nologin
│   ├── [-rw-r--r--]  route
│   └── [-rw-r--r--]  vsftpd
└── [drwxr-xr-x]  usr
    ├── [drwxr-xr-x]  realtime
    │   └── [drwxr-xr-x]  modules
    │       ├── [-rw-r--r--]  rtai_fifos.ko
    │       └── [-rw-r--r--]  rtai_ndbg.ko
    └── [drwxr-xr-x]  share
        └── [drwxr-xr-x]  empty

54 directories, 369 files

```
`mnt`以下は標準的なLinuxのディレクトリ構造をしています。
今回すべてのファイルを見るのは大変なので、気になったところをピックアップします。

###### mnt/boot/grub/grub.conf

```grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/sda2
#          initrd /initrd-version.img
#boot=/dev/sda
default=0
timeout=0
hiddenmenu

title Linux (2.6.32.11)-320m STG 8x6
	root (hd0,0)
	kernel /bzImage root=/dev/sda2 max_loop=16 fbcon=map:0 memmap=384m vga=0x0303 loglevel=0 fastboot Single raid=noautodetect elevator=noop
```
カーネルは2.6.32.11。2010年頃に登場したもの。
***

###### mnt/etc/passwd
```passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/etc/news:
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
rpm:x:37:37:RPM user:/var/lib/rpm:/sbin/nologin
pulse:x:499:497:PulseAudio daemon:/:/sbin/nologin
polkituser:x:87:87:PolicyKit:/:/sbin/nologin
avahi:x:498:494:avahi-daemon:/var/run/avahi-daemon:/sbin/nologin
mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
torrent:x:497:492:BitTorrent Seed/Tracker:/var/spool/bittorrent:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
gdm:x:42:42::/var/gdm:/sbin/nologin
pocky:x:500:500:pocky:/home/pocky:/bin/bash
stg:x:500:502::/home/stg:/bin/bash
```
さすがにシャドウパスワード化されています。沢山ユーザがいますが`torrent`ユーザってなんでしょうか。
***

###### mnt/korg/ro/Eva.imgとmnt/korg/ro/Mod.img
このへんのイメージファイルもKRONOSの中核部分？でしょうか。

## あとがき
* いまどきのシンセサイザはLinuxべったりなシステムというかそのままLinuxでした。
* ファームウェアアップデート用のシェルスクリプトのインデントはタブ文字だったりホワイトスペースだったり…
* チェックサムの確認が「ファイルが損傷してないことを担保する」目的なら良いですが、  
改変防止目的ならあまり意味をなしていないように思われます。  
(チェックサムの確認処理のところに改変後再計算したチェックサムをねじ込むorそもそもコメントアウトで回避可能)
* KRONOSの前衛的な見た目とは裏腹に、昔ながらのシェルスクやawkが動いちゃうあたり萌えますね。
* そういえばTRONってどこに行ってしまったのか。