LoginSignup
25
19

More than 5 years have passed since last update.

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

Posted at

はじめに

ふとしたきっかけでシンセのファームウェアのアップデータをダウンロードしたので、その時のメモ。
KRONOS システム・バージョン2.1.1

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

ファイル内容と役割

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

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
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の略と思われます。おそらくファームウェアアップデート前?に実行させたいスクリプト
POSTTARSCRIPTPRETARSCRIPTと同様PreがPostになっただけでファームウェアアップデート後?に実行させたいスクリプト
をそれぞれ指定しています。
SIGNATUREはどこで使用しているか不明。

pretar.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


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


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ディレクトリは作られませんでした。


pretar.shの一部
echo "Verifying install media..." > /tmp/installer_status

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


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の画面に出力されると思われます。


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で終了します。


pretar.shの一部
if [ ! -e /mnt/updaterSource/mnt ]; then
    mkdir /mnt/updaterSource/mnt
fi

USBメモリにmntがなければ作ります。


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入れたら動きました!"定石。あるある。


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
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"


そこそこ長いです。


posttar.shの一部
chown 500.500 mnt/korg/rw/HD
chmod 555 mnt/korg/ftp

オーナとパーミッション変更。


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ディレクトリの存在確認と存在しなかった/した時の処理。


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は不都合だったのでしょうか。


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にポイーして"臭いものには蓋"定石でしょうか。


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の画面のプログレスバーが値に応じて伸びていくと思われます。


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にログ落とす。


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として見えるはずです。(ややこしい)

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
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ってどこに行ってしまったのか。
25
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
19