約 3,587,853 件
https://w.atwiki.jp/linux_kai/pages/13.html
Total - (Today - Yesterday - ) 最終更新日 2010/08/12 02 08 LinuxでXLink Kaiする環境を作成するにあたり、準備する設定内容などをまとめる 当然ながらすべての設定作業は 自己責任でお願いします。 1.必要なもの 2.ネットワーク設定 3.Linuxで準備する設定内容 4.Linuxディストリビューション別設定例 コメント 1.必要なもの インターネットに接続できる環境 LinuxがインストールされたPC XLinkKai用として使えそうな見込みのあるWiFiアダプタ。不明な場合は動作検証まとめページを参照すると良い PSP本体とPSPゲーム(Monster Hunter Portable 2ndGなど) 2.ネットワーク設定 XLinkKaiを使用するにあたり、ネットワーク設定が必要になる ルーターのポート開放設定、LinuxのIPアドレス設定およびファイアウォール設定について説明する ネットワーク設定 3.Linuxで準備する設定内容 インストール直後からの最低限必要になりそうな準備作業は次の通り。 sudo設定 開発ツール、カーネルソースの追加 その他ユーティリティの追加 デスクトップ、ブラウザ、日本語入力 4.Linuxディストリビューション別設定例 ディストリビューションごとの設定例については各ページ参照。 下記以外のディストリビューションでKai環境を作成された方はそのときの設定内容を追加してほしい。 archdebian 5.0debian 6.0fedoragentoomandrivaopensusepuppyslackwareubuntu 以上で主な準備は終わり。 上へ戻る コメント 名前 コメント
https://w.atwiki.jp/woomee/pages/17.html
便利コマンド ディレクトリのサイズを調べる du -m | sort -rn | head -100 sudo権限の設定 visudo 以下を追加すればOK [ユーザ名] ALL=(ALL) ALL 管理者のタイムアウト時間を1日にするには Defaults timestamp_timeout=1440 firewall関連 停止させる systemctl stop firewalld.service 自動起動も停止 systemctl disable firewalld 特定のポートのみ開ける (例. 8080) sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent sudo firewall-cmd --reload リダイレクト関連 標準出力と標準エラー出力をまとめて一つに ./test.sh test.out 2 1 標準出力と標準エラー出力を別々のファイルに ./test.sh test.out 2 test.err 2 の部分はスペースを開けない ディスクの拡張 fdiskコマンド実行 fdisk /dev/sda1 ディスクの再作成 d → [Partition number] 2 n → [Command action] p → [Partition number] 2 t → [Partition number] 2 → [Hex code] 8e
https://w.atwiki.jp/yo-kichi/pages/81.html
スコーラとは 2010 ガイダンス ユーザ作成 テキトウに課題羅列 第3回にして人いなくなる。 ネットワークの設定 TODO 資料のうp 来年、チェックのため 新たな生徒のための準備 (環境は各自のノーパを予定 コマンドを人通り学んでる生徒にはさらりと復習してあとは自分で覚えさす そろそろbash以外に進出したい linuxがどう動いているか わかる本が欲しい! DONE LPIC レベル1の教科書、ネットワークコマンドの本入手 コメント
https://w.atwiki.jp/bluearth3/pages/19.html
とりあえず移行中につき、Linuxの「インストールCD/LiveCD」の作成手順 WindowsXP編 を参照してください。
https://w.atwiki.jp/linux_kai/pages/33.html
Total - (Today - Yesterday - ) 最終更新日 2011/04/04 18 19 ここでは、ubuntu lucid上のXLinkKaiでPLANEX GW-USNano (Realtek RTL8188SU)をndiswrapper + Windowsドライバで使えるようにしたときのメモです。 当然ながらインストールなどすべての作業は 自己責任でお願いします。 1.ndiswrapperとWindowsドライバのインストール1.1.Linux側の準備 1.2.Windows側でのWindowsドライバ抽出 1.3.Linux側でのndiswrapperとWindowsドライバのインストール 2.ドライバとインタフェースの確認 3.kai設定 コメント 1.ndiswrapperとWindowsドライバのインストール #このページでは、"ubuntu lucid"での記載をしています。 1.1.Linux側の準備 検証したLinuxについての情報です。 $ uname -a Linux utsusemi 2.6.32-22-generic #36-Ubuntu SMP Thu Jun 3 22 02 19 UTC 2010 i686 GNU/Linux WiFiアダプタをPCに取り付け、認識されているか確認します。 $ lsusb Bus 002 Device 002 ID 2019 ab28 PLANEX 標準で読み込まれたドライバを確認します。環境によってはロードされていない場合もあります。 $ lsmod | grep 8712u 8712u 298432 0 8712uドライバをアンロードします。 $ sudo ifconfig wlan0 down $ sudo modprobe -r 8712u 標準で読み込まれた8712uドライバを使用しないように設定します。 $ sudo vi /etc/modprobe.d/blacklist blacklist 8712u ← ファイルの最終行に追加します 必要であればudevファイルを修正しておきます。 $ sudo vi /etc/udev/rules.d/70-persistent-net.rules 1.2.Windows側でのWindowsドライバ抽出 メーカーサイトからWindowsXP用ドライバをダウンロードします。 Windows環境でセットアップした後、ドライバのファイルを抽出します。 今回は、下記のフォルダにドライバがインストールされていました。フォルダごとLinuxにコピーします。 C \Program Files\PLANEX ClientManager\Driver\XP_WIN 今回は~/Downloads/XP_WIN にコピーしました。コピーしたファイルは次の通りです。 $ ls -l ~/Downloads/XP_WIN -rw-rw-rw- 1 USER USER 10713 Nov 20 2009 net8192su.cat -rw-rw-rw- 1 USER USER 6831 Jan 21 10 43 net8192su.inf -rw-rw-rw- 1 USER USER 594048 Dec 7 2009 rtl8192su.sys 1.3.Linux側でのndiswrapperとWindowsドライバのインストール ndiswrapperをインストールします。 $ sudo aptitude install ndiswrapper-common ndiswrapper-utils-1.9 Windowsドライバをndiswrapperにインストールします。 $ sudo ndiswrapper -i ~/Downloads/XP_WIN/net8192su.inf installing net8192su ... インストールされたドライバを確認します。 $ sudo ndiswrapper -l net8192su driver installed device (2019 AB28) present (alternate driver 8712u) ドライバの設定ファイルを編集します。 $ sudo vi /etc/ndiswrapper/net8192su/2019 AB28.F.conf Channel|1 PSPXlinkMode|1 ndiswrapperをロードします。 $ sudo modprobe ndiswrapper WiFiアダプタの初期化スクリプトを作成します。 $ sudo touch /usr/local/bin/ndis_adhoc.sh $ sudo chmod 755 /usr/local/bin/ndis_adhoc.sh $ sudo vi /usr/local/bin/ndis_adhoc.sh #!/bin/sh /sbin/ifconfig wlan1 down /sbin/iwconfig wlan1 mode ad-hoc /sbin/iwconfig wlan1 channel 1 /sbin/iwconfig wlan1 essid PSP_AULJM05500_L_MHP2Q000 /sbin/ifconfig wlan1 up 2.ドライバとインタフェースの確認 インタフェースを初期化します。 $ sudo /usr/local/bin/ndis_adhoc.sh インタフェースを確認します。 $ sudo ifconfig wlan1 wlan1 Link encap Ethernet HWaddr 00 22 cf 32 db 27 inet addr 10.42.43.1 Bcast 10.42.43.255 Mask 255.255.255.0 inet6 addr fe80 222 cfff fe32 db27/64 Scope Link UP BROADCAST RUNNING MULTICAST MTU 1500 Metric 1 RX packets 440631 errors 0 dropped 0 overruns 0 frame 0 TX packets 3393295 errors 0 dropped 0 overruns 0 carrier 0 collisions 0 txqueuelen 1000 RX bytes 72543018 (72.5 MB) TX bytes 575218545 (575.2 MB) $ sudo iwconfig wlan1 wlan1 IEEE 802.11g ESSID "PSP_AULJM05500_L_MHP2Q000" Mode Ad-Hoc Frequency 2.412 GHz Cell 02 20 60 EC E0 5A Bit Rate=11 Mb/s Tx-Power 20 dBm Sensitivity=0/3 RTS thr off Fragment thr off Encryption key off Power Management off Link Quality 79/100 Signal level -45 dBm Noise level -96 dBm Rx invalid nwid 0 Rx invalid crypt 0 Rx invalid frag 0 Tx excessive retries 0 Invalid misc 0 Missed beacon 0 RutilTで接続できませんでしたので、GNOME NetworkManagerで無線接続しました。 3.kai設定 XLink Kai ConfigurationのNetworkAdapterは、"wlan1"を選択します。#XLink Kai Configurationは、kai設定編のkai設定を参照してください。 このページについての指摘や情報がありましたらコメントに投稿をお願いします。 以上で主な設定は終わり。 上へ戻る コメント GW-USNanoチップ型番とndiswrapperパッケージ名の誤りを修正 -- kar (2011-04-04 18 19 40) 名前 コメント
https://w.atwiki.jp/vmlinuz/pages/63.html
mysql トラブルシューティング TOP linux mysql トラブルシューティング レプリケーションエラー対応 エラースキップ レプリケーションが何らかのオペレーションミスでエラーになった場合、エラーが発生したポジションのSQLをスキップして先に進ませることができる。 致命的なエラーで停止している場合はMasterからのダンプが必要になるが、軽度のエラーであるならばスキップするのが手っ取り早い。 SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; START SLAVE; SHOW SLAVE STATUS; Slave I/O thread Failed reading log event, reconnecting to retry, log mysql.logに表題のメッセージが大量に出力される。 またリレーログも大量に生成される。 原因はレプリケーションを形成するグループ内で「サーバID」が重複しているため。 参考サイト: http //www.usamimi.info/~sakura/cgi-bin/blog/article.php?id=177 Today - Yesterday - Total -
https://w.atwiki.jp/hama170628/pages/57.html
CDを作成する ドライブの確認 # cdrecord -scanbus scsibus1 1,0,0 100) 'TEAC ' 'CD-224E ' 'V.9A' Removable CD-ROM 1,1,0 101) * 1,2,0 102) * 1,3,0 103) * 1,4,0 104) * 1,5,0 105) * 1,6,0 106) * 1,7,0 107) * # wodim --devices wodim --devices wodim Overview of accessible drives (1 found) -------------------------------------------------------------- 0 dev='/dev/scd0' rwr--- 'TEAC' 'CD-224E' -------------------------------------------------------------- CDに書き込む #cdrecord -v -eject speed=8 dev=/dev/scd0 aaa.iso ここでの指定の意味は、以下のとおりです。 -v 詳細表示 -eject 終了時にディスクを取り出す -speed 書き込み速度(x8) -dev デバイス番号 (1,0,0) ディスクイメージのコピー 今回はKnoppixを使います fdiskで領域の作成 ※以下rootでないとできません。 #fdisk /dev/sda(USBに接続されたHDDを認識) コマンド m-ヘルプ n-新しいパーティションの作成 d-既存のパーティションの削除 t-領域のシステムIDを変更 w-変更情報の書き込み ※既存のパーティション(バックアップ元)のシリンダ数を確認しておきます。 ddにてイメージをコピー 以下の例はIDE接続の2番目の領域からUSB接続されたHDDの1番目の領域にコピーするものです。 #dd if=/dev/hda2 /dev/sda1 ファイルにする場合は#dd if=/dev/hda of=ncomp_hda1_Sol10等ファイル名を指定 ディスクをフォーマットする。 フォーマットはmkfsコマンドで行います。以下はntfsでの例。 #mkfs -t ntfs /dev/sda1 ntfsを書き込み可にする。 ntfsをKnoppixでマウントすると読み込み専用となる。書き込みたい場合は一度umountしrwオプション付きで再マウントする。 #mount -o rw sd1 usbディスクの増設 接続デバイスの確認 # fdisk -l ・・・・・ デバイス Boot Start End Blocks Id System /dev/sdb1 1 13 104391 83 [[Linux]] /dev/sdb2 * 14 2432 19430617+ c W95 FAT32 (LBA) デバイス名を確認しマウント # mount -t auto /dev/sdb2 /media raid0を作成する # mdadm --create --verbose /dev/md0 --level=0 --raid-devices=2 /dev/sdb1 /dev/sdc1 tcpdump 例)eth1側のホスト192.168.0.4のポート1178のみ取得する。 # tcpdump -i eth1 host 192.168.0.4 and port 1178
https://w.atwiki.jp/newmain/
巷では Windows Vista が発売になってます。 Windows Vista Ultimate 日本語版 実売価格 約42,000- 同アップグレード版 約28,000- こんな金額出せない(´;ω;`)ウゥゥ 。 いい機会だから、 Linuxがどの程度育ってるか、一般ユーザーの立場から検証して見ます。 グラフィカルインタフェース、Noコマンドでどこまで使えるか? Linuxにはいろんなディストリビューションがあるけど、 今回は Fedora Core6 に絞ります。 いざ!!(・∀・)/ いってみお
https://w.atwiki.jp/linuxjapanwiki/pages/175.html
現在、LinuxJapanWikiはatwikiから Miraheze に移行中です。このページは2021年9月15日にMirahezeに移行しました。最新の情報は Mirahezeのページ で確認してください。 Arch Linux Arch Linuxは、簡潔さ、現代性、実用性、ユーザー中心性、多様性に焦点を当てて開発が行われている、独立系のLinuxディストリビューション。 簡潔さとは、Arch Linuxの言うところでは「不必要な追加・修正、あるいは複雑化を伴わない」ことであり、それは初心者の立場よりも開発者の立場からの見たものだとしている。 ▲Arch Linuxのロゴ 各種データ 開発者 Levente Polyak ら 系統 Arch Linux 開発状況 開発中 初版 2002年3月11日 最新版 ローリングリリースインストール用ISOイメージは毎月初旬に更新 アップデート方式 pacman パッケージ管理 pacman カーネル インストール時に選択 既定のシェル bash(ライブ環境ではzsh) ライセンス 様々 ウェブサイト https //www.archlinux.jp/ 概要 Arch Linuxは、2002年3月にジャッド・ヴィネットにより設立された。 ジャッドは、別の最小主義ディストリビューションであるCRUXから着想を得てArchの開発を思い立った。 2007年10月以降はアーロン・グリフィンが、2020年2月以降はレベンテ・ポリアクがプロジェクトを率いている。 Arch Linuxの公式リポジトリは、x86-64マイクロプロセッサを対象にしたバイナリパッケージをベースとしている。 Portsやebuildのように、ソースコードのビルドおよびバイナリパッケージの作成を自動化するArch Build System(ABS)も提供されている。 Arch Linuxは、シンプルで無駄の無いシステムに焦点を当てており、「素早くアクセスして編集できるように配置され、簡明なコメントが付けられた、きれいで能率的な構成ファイル群が整備されている」とされる。 管理や構築を複雑なツールに頼るシステムはエンドユーザにとって害になるだろう。 (中略) 「複雑なシステムを隠そうとすれば、その結局もっと複雑なシステムになってしまうのが落ち」だ。 中身を隠すための抽象化レイヤーは決して良いものではない。 その代わりに、隠さないで済むように中身を設計すべきなのだ。 アーロン・グリフィン Arch Linuxは、2012年11月4日以降公式のinitシステムとしてsystemdを採用しているが、それ以前はBSDスタイルのinitが使われていた。 これは、柔軟性と引き換えに簡潔さを得るもので、起動時にロードしたいモジュールや実行したいサービスは中心的設定ファイルの /etc/rc.conf に単純に列挙していた。 インストール Arch Linuxのウェブサイトでは、CDもしくはUSBから起動できるISOイメージが提供されている。 Arch Linuxのインストール作業はコマンドライン環境で行われる。 パーティションの作成、ファイルシステムの作成・マウントなどを行い、pacstrapという小さなシェルスクリプトを実行して基本システムをインストールする。 カーネルはbaseパッケージに含まれていないため、pacstrapによるインストールの段階でカーネルを選択することが出来る。 インストール後のシステムの設定やデスクトップ環境などのソフトウェアの追加は、手動で行う必要がある。 パッケージ管理 pacman 詳細は「pacman」参照 すべてのパッケージは、Arch Linuxのために開発されたpacmanパッケージマネージャを使用して管理される。 pacmanは、パッケージのインストール・アップグレード・削除・ダウングレードを処理するとともに、依存関係の自動解決を行う。 公式のパッケージはArch Linuxのパッケージツリーから取得される。 パッケージは基本的にtar.xz形式で提供されているが、2020年1月4日、tar.zst形式に切り替える方針が示された。 リポジトリ core - 基本システムをセットアップするために必要なすべてのパッケージが収容される。 extra - 基本システムでは必要とされないパッケージが収容される。デスクトップ環境とそのプログラムはこれに含まれる。 community - コミュニティによりビルドされたパッケージが収容される。これには、十分な数の投票を受けて「トラステッドユーザ」(trusted user) により採用されたものが含まれる。 multilib - x86-64ユーザのためのリポジトリで、32bitアプリケーションを64bit環境で容易に実行できるように提供されている。 この他に、メインのリポジトリに収容される前のテスト段階のパッケージを提供するためのリポジトリがある。 testing - 「core」および「extra」リポジトリ用。 community-testing - 「community」リポジトリ用。 multilib-testing - 「multilib」リポジトリ用。 加えて、破損したパッケージがtestingリポジトリに置かれることを回避するために、試験的なリビルドを行うための「staging」および「community-staging」リポジトリが用意されている。 過去に存在したunstableリポジトリは2008年7月をもって停止され、ほとんどのパッケージは他のリポジトリへ移動した。 これらの公式リポジトリに加え、利用者が提供する非公式リポジトリが存在する。 この例としてAURがある。 リポジトリのセキュリティ 過去のArch Linuxでは、電子署名付きパッケージがサポートされておらず、ダウンロード、インストールのプロセスにおいて、パッケージとメタデータの真正性が検証されていなかった。 したがって、改ざんされた、もしくは悪意を持つリポジトリミラーによってシステムが危険に晒される可能性があった。 pacmanバージョン4から、データベースとパッケージの検証が可能になった。 2011年11月より公式リポジトリにおいて新規パッケージへの署名が強制され、2012年3月の時点ではすべてのパッケージが署名され、2012年6月よりパッケージ署名検証の運用が正式に開始された。 Arch Build System Arch Build System(ABS)は、ソースコードのビルドおよびPacman用バイナリパッケージの作成を自動化するための「Portsライクな」システムである。 ABSが提供するツールは、公式リポジトリのパッケージ作成に使われているだけでなく、一般のユーザも利用できる。 ABSでは、パッケージの構築に必要な情報を PKGBUILD という名前のBashスクリプトとして記述する。 PKGBUILDスクリプトには、ソースコードのダウンロード元、パッケージのメタデータ(名前やバージョン番号など)、ビルド時に必要なパッケージの一覧や、インストール時の依存関係、ソースコードをビルドするスクリプト、ファイルシステムへの配置を決めるスクリプトなどが、定められた仕様に従って記述される。 PKGBUILDスクリプトはABSのmakepkgツールによって処理される。 makepkgは、PKGBUILDスクリプトの内容をもとに、ソースコードのダウンロードおよびビルド、pacman用バイナリパッケージの作成を自動で行うシェルスクリプトである。 これによって作成されたパッケージは、公式のパッケージと同様に、pacmanを使ってインストールおよび管理を行うことができる。 Arch User Repository Arch User Repository(AUR)では、一般ユーザによって作成された、公式リポジトリには存在しないパッケージのPKGBUILDスクリプトが提供されている。 これによりユーザは、ソースコードのビルドを簡略化することができ、さらにソフトウェアをpacmanのパッケージとしてインストールすることができる。 これらのPKGBUILDスクリプトはAURのウェブサイトからダウンロードしてABSのmakepkgコマンドで利用できるが、「Yay」のようなヘルパープログラムを使うことで、パッケージの検索・ダウンロード・ビルドのプロセスをさらに自動化することもできる。 AURでは、以下の理由によりリポジトリに収容されないパッケージも提供されている。 ライセンスの問題再配布は認められていないが利用はフリーなソフトウェアはAURに収容できる。AURには実際にそれらのソフトウェアを提供サイトから直接ダウンロードするPKGBUILDスクリプトが収容されている。例えばGoogle EarthやRealPlayerなどが該当する。 公式パッケージに変更を加えたものAURには公式パッケージの様々なバリエーションも収容される。公式パッケージのベータバージョンなどもこれに該当する。 いかなるソフトウェアであっても一般ユーザによってPKGBUILDが提供されうる。 あらゆるPKGBUILDは、ライセンスの問題や方針などのために意図的にAURに置く場合を除いて、ユーザから十分な投票を受けることでcommunityリポジトリに登録される可能性がある。 リリース Arch LinuxはGentoo Linux同様、ローリングリリースと呼ばれるリリースモデルを採用しており、明確な「バージョン番号」や「リリーススケジュール」を持たない。 リポジトリ上のソフトウェアパッケージは日々新しいバージョンへと更新されており、定期的にソフトウェアアップデートを行うことで、システムを常に最新の状態に保つことができる。 インストール用のイメージファイルは定期的に更新されているが、これは基本的にシステムパッケージ群の最新スナップショットに過ぎない。 ISOイメージリリース2009.02以降、最適なハードウェアサポートを行うために、インストール用イメージのリリースはカーネルのバージョンアップにあわせて行われることになった。 派生ディストリビューション Alter Linux - 日本初のArch Linuxベースのディストリビューション。完全な日本語化が行われている。GrowthLinux AquaLightOS Manjaro EndeavourOS コメント欄 コメント欄の利用に関してはコメント欄の利用を参照して下さい。 本ページに無関係な内容のコメントは一律して削除されます。Wiki運営に関しては Wiki運営掲示板 にお願いします 。 投稿されているコメントへの返信の際は、必ず返信したいコメント横の○にチェックを入れて返信して下さい。 +上記の内容を守れる方のみご利用ください。 上記の内容を守れる方のみご利用ください。 コメントログ作成 - 名無しさん (2020-05-27 17 31 27) 名前 コメントログ
https://w.atwiki.jp/aerocats/pages/33.html
標準Linuxの/usr/local/bin/内にある。 HDDの初期化の役割を担う。 ユーザーの意思次第で、開発用LinuxをHDDに設置したりHDDブートするように設定する。 動作内容 スクリプト スクリプト詳細ExitWithError関数 スクリプト本文 デバイスの初期化 動作内容 HDDがマウントされていないことを確認。されていればエラー終了。 HDDがxfs形式でフォーマットされていないことを確認。されていればエラー終了。 /mnt/mtdにChangeMeDevHDDがあるかどうかを確認して以下を実行。 ある場合 HDDを/dev/sda1、/dev/sda2、/dev/sda3、/dev/sda4の4つのパーティションに切り、それぞれをフォーマットする(マウントはしない)。 デバイス フォーマット形式 /dev/sda1 ext3 /dev/sda2 xfs /dev/sda3 swap /dev/sda4 xfs SetupDevEnv.shの実行 /mnt/mtdにhddrootfs.tar.gz、uImage.buffaloがあるかどうかを確認して以下を実行。 ある場合 /mnt/bootディレクトリを作成し、/dev/sda1をext3形式でマウントして、そこにuImage.buffaloをコピーする。 /mnt/rootfsディレクトリを作成し、/dev/sda2をxfs形式でマウントして、そこにhddrootfs.tar.gzを展開する。 デバイス マウントポイント マウントタイプ /dev/sda1 /mnt/boot ext3 /dev/sda2 /mnt/rootfs xfs /usr/local/bin/kuro_libを/mnt/rootfs/usr/local/binにコピーする。 ChangeMyUbootEnvがあればU-Boot環境変数を書き換える。なければそのまま終了する。 ない場合 エラー終了させる。 ない場合 HDDを/dev/sda1と1つだけのパーティション?に切りxfs形式でフォーマットする。 デバイス フォーマット形式 /dev/sda1 xfs /dev/sda1を/mnt/disk1にxfs形式でマウントする。 デバイス マウントポイント マウントタイプ /dev/sda1 /mnt/disk1 xfs /mnt/disk1のパーミッションを777にする。 スクリプト #!/bin/sh . /usr/local/bin/kuro_lib # $1 Error type {mounted | formatted} ExitWithError(){ miconapl -a led_set_cpu_mcon diag miconapl -a led_set_on_off diag miconapl -a led_set_brink diag miconapl -a bz_on on3off3 case $1 in mounted) echo "disk is already mounted!" /dev/console ;; formatted) echo "disk is already formatted!" /dev/console ;; esac sleep 5 miconapl -a bz_on miconapl -a led_set_brink off miconapl -a led_set_on_off off miconapl -a led_set_cpu_mcon off exit 1 } # Check point 1. disk is already mounted or not. IsMounted ${DISK1_DEV} ; [ $? = 1 ] ExitWithError mounted IsMounted ${DISK1_DEV}1 ; [ $? = 1 ] ExitWithError mounted IsMounted ${DISK1_DEV}4 ; [ $? = 1 ] EixtWithError mounted # Check point 2. disk is already formatted or not. XFS_FORMATTED=`dd if=${DISK1_DEV} bs=1 count=3` ; [ "${XFS_FORMATTED}" = XFS ] ExitWithError formatted XFS_FORMATTED=`dd if=${DISK1_DEV}1 bs=1 count=3` ; [ "${XFS_FORMATTED}" = XFS ] ExitWithError formatted XFS_FORMATTED=`dd if=${DISK1_DEV}4 bs=1 count=3` ; [ "${XFS_FORMATTED}" = XFS ] ExitWithError formatted # OK! Disk is not mounted and not formatted. miconapl -a led_set_code_information 28 miconapl -a bz_on button if [ -e ${CHANGE_TO_DEVHDD_FILE} ] ; then fdisk ${DISK1_DEV} /usr/local/bin/PartitionDefinition Format_EXT3 ${DISK1_DEV}1 Format_XFS ${DISK1_DEV}2 Format_XFS ${DISK1_DEV}4 mkswap ${DISK_DEV}3 /usr/local/sbin/SetupDevEnv.sh else fdisk ${DISK1_DEV} /usr/local/bin/PartitionDefinition1 Format_XFS ${DISK1_DEV}1 MountShare ${DISK1_DEV} ${DISK1_MPT} fi miconapl -a led_set_code_information clear ~ # スクリプト詳細 ブロックごとに見てみる。 #!/bin/sh シェルの指定。shを指定している。 . /usr/local/bin/kuro_lib /usr/local/bin/kuro_libをサブシェルで実行している。 このkuro_lib内の InMounted関数 Format_EXT3関数 Format_XFS関数 MountShare関数 IsHavePartition関数 DISK1_DEV変数(=/dev/sda) DISK1_MPT変数(=/mnt/disk1) CHANGE_TO_DEVHDD_FILE変数(=/mnt/mtd/ChangeMeDevHDD) HEXDUMP変数(=/usr/bin/hexdump) を使用するためだ。 ExitWithError関数 関数の定義が始まる。なお、この項目は関数が以後の命令で呼び出された時に機能する内容であり、スクリプト実行と同時に実行されるわけではない。 # $1 Error type {mounted | formatted} ExitWithError(){ 第1引数はmountedかformattedというエラータイプだ、と解説されている。 miconapl -a led_set_cpu_mcon diag miconapl -a led_set_on_off diag miconapl -a led_set_brink diag miconapl -a bz_on on3off3 まずはどのタイプのエラーであれ(この関数が呼び出されている時点で何らかのエラーには間違いないため)、miconaplコマンドでLEDとブザーが共通の操作をされている。 詳しくはmiconaplコマンドで記すが、この4行で エラーLEDが点滅 ブザーがピッピッピと鳴る という動作になる。 case $1 in 先ほどの第1引数の内容によって以後の処理動作を分けている。 第1引数がmountedの場合 mounted) echo "disk is already mounted!" /dev/console ;; echoコマンド?で「disk is already mounted!」という一文がコンソールデバイスに出力されている。 これだけでこのcase文を抜ける。 第1引数がformattedの場合 formatted) echo "disk is already formatted!" /dev/console ;; echoコマンド?で「disk is already formatted!」という一文がコンソールデバイスに出力されている。 これだけでこのcase文を抜ける。 esac 以上の処理でmountedかformattedか、というcase文は終了する。 sleep 5 miconapl -a bz_on miconapl -a led_set_brink off miconapl -a led_set_on_off off miconapl -a led_set_cpu_mcon off 5秒間一時停止した後に、LEDとブザーの動作を止めている。 exit 1 終了ステータスに異常を表す「1」を指定。 } ExitWithError関数はここまで。 スクリプト本文 ここからがいわゆるInitDisk1.shのスクリプト本体だ。 # Check point 1. disk is already mounted or not. まずはチェックポイント1としてHDDがすでにマウントされているかいないかを以下で調査している。 サブシェルで走らせている/usr/local/bin/kuro_lib内の関数「IsMounted」を使うことになる。 ここで述べておく方が理解が容易なので、InitDisk1.shスクリプトの内容ではないが/usr/local/bin/kuro_lib内のIsMounted関数に触れておく。 IsMounted関数 /usr/local/bin/kuro_lib内の関数であり、引数を1つ付けさせて内容により戻り値として「0」か「1」を返す仕組みのようだ。 # $1 device of check target # retval # 1 device $1 is mounted. # 0 device $1 is not mounted. 第1引数はチェック対象のデバイスであり、このIsMounted関数が戻り値1を返せばそのデバイスはマウントされている、0を返せばされていないとする旨の解説だ。 IsMounted(){ MOUNTED=`grep $1 /proc/mounts` MOUNTEDという変数を用意しそこにgrep $1 /proc/mountsの結果を代入している。 $1とはIsMounted関数に付けられた第1引数であり、${DISK1_DEV}すなわち/dev/sdaを指す。 つまり、procコマンド?でマウント状態を調べたとき、/dev/sdaという文字が含まれるものを抽出していることになる。 その結果がMOUNTEDという変数に代入される。 if [ "${MOUNTED}" != "" ] ; then return 1 else return 0 fi このMOUNTED変数がカラでなければ戻り値1を返しIsMounted関数を終了、そうでなければ(カラであれば)0を返しIsMounted関数を終了する、という内容。 この作業で、/dev/sdaがマウントされているかどうかが判別できる。 return 0 上のいずれにもあてはまらなければ(実際にはあり得ないが)0を返す。 } IsMounted関数はここまで。 ここからまたスクリプト本文の解説に戻る。 IsMounted ${DISK1_DEV} ; [ $? = 1 ] ExitWithError mounted IsMounted ${DISK1_DEV}1 ; [ $? = 1 ] ExitWithError mounted IsMounted ${DISK1_DEV}4 ; [ $? = 1 ] EixtWithError mounted IsMounted関数に${DISK1_DEV}(=/dev/sda)、${DISK1_DEV}1(=/dev/sda1)、${DISK1_DEV}4(=/dev/sda4)という引数をそれぞれ付け、戻り値は0か1が返ってくるのを待ち、返って来た結果(戻り値「$?」)が1ならばExitWithError関数をmountedという引数を付けて実行している。 /dev/sdaもしくは/dev/sda1、/dev/sda4のいずれか一つでもマウントされていればInitDisk1.shはエラー終了してしまう、ということだ。 誤動作防止のためだと思われる。 これでチェックポイント1であるマウントされているかどうかの調査は終了する。 # Check point 2. disk is already formatted or not. 次にチェックポイント2としてHDDがすでにフォーマットされているかいないかを以下で調査している。 XFS_FORMATTED=`dd if=${DISK1_DEV} bs=1 count=3` ; [ "${XFS_FORMATTED}" = XFS ] ExitWithError formatted XFS_FORMATTED=`dd if=${DISK1_DEV}1 bs=1 count=3` ; [ "${XFS_FORMATTED}" = XFS ] ExitWithError formatted XFS_FORMATTED=`dd if=${DISK1_DEV}4 bs=1 count=3` ; [ "${XFS_FORMATTED}" = XFS ] ExitWithError formatted 流れとしては XFS_FORMATTEDという変数を用意 そこに対象となるデバイスのフォーマット形式を代入 それがxfs形式かどうかを判別 xfs形式ならばExitWithError関数にformatted引数を付けてエラー処理 となる。 デバイスのフォーマットの調べ方だが、ここではddコマンドで行っている。 ddコマンドのofパラメータは出力先を指すが、今回これは指定しないのですなわち標準出力を指す。 xfs形式でフォーマットされたデバイス(パーティション?)は、 dd if=デバイス bs=1 count=3 とすると XFS3+0 records in 3+0 records out とコンソールには表示されるが、内部的にはXFSの3文字だけが出力されている(of=/mnt/disk1/dd.txtなどで確認してみるとはっきりする)。 ext3ではXFSは表示されないが、XFS形式のものをmkfs.ext3で上書きした場合はXFSと表示されてしまう。 パーティション?の先頭を0で埋めた後、領域を破壊した上でmkfs.ext3を実行しないと機械的にはXFSとみなされるので注意が必要だ。 上の命令は/dev/sda、/dev/sda1、/dev/sda4のいずれかがxfs形式ならばformattedという引数を付けてExitWithError関数を実行(すなわちエラー処理)する、という意味だ。 # OK! Disk is not mounted and not formatted. 以上、2つのチェックポイントを無事通過できると次の処理が待っている。 デバイスの初期化 miconapl -a led_set_code_information 28 miconapl -a bz_on button オレンジのLEDを点滅させ、ブザーをピっと鳴らす。 /mnt/mtdにChangeMeDevHDDがある場合 if [ -e ${CHANGE_TO_DEVHDD_FILE} ] ; then この「-e」という評価式は「存在すれば真」なので、CHANGE_TO_DEVHDD_FILE(/mnt/mtd/にChangeMeDevHDD)が存在すれば以下を実行、という意味になる。 なお、このChangeMeDevHDDとは、附属CD-ROM内にあるもので「HDDパーティション?を開発用に設定するための意思表示ファイル」となっている。中身は何もない。 この条件分岐のためだけにあり、あるかないかが問題なだけだ。 fdisk ${DISK1_DEV} /usr/local/bin/PartitionDefinition /usr/local/bin/PartitionDefinitionに記載されている内容に従って/dev/sdaにパーティション?をきっていく。 記載された内容とは パーティション? サイズ パーティションタイプ /dev/sda1 50MB Linux /dev/sda2 3GB Linux /dev/sda3 128MB swap /dev/sda4 残り Linux となっている。 次に、きられたパーティション?に今度はファイルシステムを導入する。 まずは/usr/local/bin/kuro_lib内の関数「Format_EXT3」を説明する。 Format_EXT3関数 /usr/local/bin/kuro_lib内の関数であり、引数一つを受け取りそのデバイスをext3形式にフォーマットする関数のようだ。 # $1 target device to format Format_EXT3(){ 第1引数のデバイスをフォーマット対象とする。 echo "***** Starting to format $1 *****" 画面に「***** Starting to format 対象デバイス *****」と表示する。 mkfs.ext3 $1 mkfs.ext3コマンド?で第1引数のデバイスをext3形式でフォーマットする。 if [ $? -eq 0 ] ; then $?とは上のmkfs.ext3コマンド?の実行結果の終了ステータスを指しているのだが、これが「0」すなわち成功ならば次を実行、となっている。 echo "Format is succeeded without error." 画面に「Format is succeeded without error.」と表示する。つまり「フォーマットはエラーもなく成功した。」と表示している。 else $?が「0」でなければ、つまりフォーマットに失敗しているのならば次を実行。 return 1 exit 1 fi return 1とは、関数の戻り値を1に明示的に指定してFormat_EXT3関数を終了しているわけだが、このスクリプト内で戻り値を具体的に利用する様子は見受けられないので意味はないだろう。 /usr/local/bin/kuro_libは様々なスクリプトで利用されているライブラリ的なスクリプトなので、どこかで利用するものかもしれない。 exit 1も同じような意味合いだが、終了ステータスを「1」(異常)に設定してスクリプト(/usr/local/bin/kuro_lib)を終了するようにしている。 return 0 戻り値「0」をセットしFormat_EXT3関数を抜ける。 } Format_EXT3関数はここまで。 次に/usr/local/bin/kuro_lib内の関数「Format_XFS」を説明する。 Format_XFS関数 /usr/local/bin/kuro_lib内の関数であり、引数一つを受け取りそのデバイスをxfs形式にフォーマットする関数のようだ。 # $1 target device to format. Format_XFS(){ 第1引数のデバイスをフォーマット対象とする。 KEY=`dd if=$1 bs=1 count=3` KEYという変数を用意し、そこにdd if=$1 bs=1 count=3の結果を代入する。 先ほど検証したようにxfs形式のデバイスに対してこのコマンドを使うと「XFS」と出力される。 if [ "${KEY}" = "XFS" ] ; then KEYの値がXFSならば次を実行、という意味だ。つまりここは対象デバイスのフォーマット形式がxfs形式かどうかを条件分岐にしている。 . /etc/melco/info /etc/melco/infoをサブシェルで走らせているが、標準Linuxにはこのファイルは存在しない。 製品仕様書にも初期化SWの項目に 内蔵HDD(/dev/sda)が既にxfs形式でフォーマットされている場合、フォーマットは行われない。但し、/etc/melco/info内、force_format=yesとすることで、xfsでフォーマットされている/いないにかかわらず、フォーマットを行うようにすることができる。 と記載されている。強制フォーマットの機能を使うのであれば自分で/etc/melco/infoを用意するしかない。 if [ "${force_format}" = "yes" ] ; then /etc/melco/info内の「force_format」項目が「yes」となっていれば以下を実行。 echo "Disk (or partition) is looks like already formatted." echo "If you stop format, Press Ctrl+C in 10 seconds!!!" 画面に「Disk (or partition) is looks like already formatted.If you stop format, Press Ctrl+C in 10 seconds!!!」と表示。 「ディスク(あるいはパーティション?)は既にフォーマットされているようです。フォーマットを中止する場合は10秒以内にCtrl+Cを押してください」という意味。 COUNTER=10 COUNTERという変数を用意し、そこに10を代入。 echo -n "waiting " 画面に「waiting」と表示。-nオプションは「テキストの行末で改行しない」という意味。 while [ ${COUNTER} -gt 0 ] COUNTER変数が0より大きければdo~doneの内容を繰り返す。 do echo -n "." sleep 1 COUNTER=$((${COUNTER} - 1)) done 「waiting」の行末に「.」を表示し、1秒待った後COUNTER変数から1を引く、という内容。 先のwhile条件から、1を引いた結果が0よりも大きければ同じことを繰り返す、ということなので、これで結果的に10秒間待機することになる。 「.」を1秒ごとに表示させるためにwhile文を使ったのだろう。 echo "" echo "OK, go on formatting." echoで空白を表示、これは改行させる目的で、次に「OK, go on formatting.」を表示させている。 else /etc/melco/info内の「force_format」項目が「yes」となっていなければ以下を実行。 return 0 戻り値を「0」に設定しFormat_XFS関数を抜ける。つまりこの関数内の以後の命令は実行しない。 fi fi if [ "${force_format}" = "yes" ]を抜け、すぐ次にif [ "${KEY}" = "XFS" ]も抜けている。 echo "***** Cleaning Disk partition information *****" 画面に「***** Cleaning Disk partition information *****」と表示。 dd if=/dev/zero of=$1 bs=512 count=1 ddコマンドを使ってデバイスの先頭から512バイトに「0」を書き込んでいる。 要するにそのデバイス(パーティション?)を先頭から512バイト分データを消去している。 echo "***** Starting to format $1 *****" 画面に「***** Starting to format 対象デバイス *****」と表示。 mkfs.xfs $1 -f デバイスをmkfs.xfsコマンド?でxfs形式にフォーマットしている。-fは上書きオプション。 if [ $? -eq 0 ] ; then 終了ステータスが0であれば、つまり上のmkfs.xfsコマンド?がエラーでなければ以下を実行。 echo "Format is succeeded without error." 画面に「Format is succeeded without error.」と表示。 else mkfs.xfsでエラーが発生すれば return 1 exit 1 fi 戻り値を1、終了ステータスを1に設定して終了。 return 0 戻り値を0に設定しFormat_XFS関数を抜ける。 } Format_XFS関数はここまで。 これら関数を使ってファイルシステムを導入する命令が以下。 Format_EXT3 ${DISK1_DEV}1 Format_XFS ${DISK1_DEV}2 Format_XFS ${DISK1_DEV}4 mkswap ${DISK_DEV}3 わかりやすく表にすれば デバイス フォーマット形式 /dev/sda1 ext3 /dev/sda2 xfs /dev/sda3 swap /dev/sda4 xfs という意味だが、 mkswap ${DISK_DEV}3 は上のパーティション?の様子からすると mkswap ${DISK1_DEV}3 でなければならないはずだ。開発用Linuxのfstabで/dev/sda3をswapでマウントしようとしても、フォーマットが完了していないため失敗するだろう。 /usr/local/sbin/SetupDevEnv.sh そして、/usr/local/sbin/SetupDevEnv.shを実行する。詳細はSetupDevEnv.shの項目で説明する。 その後、miconapl -a led_set_code_information clearを実行してInitDisk1.shを終了する。 /mnt/mtdにChangeMeDevHDDがない場合 else CHANGE_TO_DEVHDD_FILE(/mnt/mtd/にChangeMeDevHDD)が存在しなければ以下を実行。 fdisk ${DISK1_DEV} /usr/local/bin/PartitionDefinition1 /dev/sdaを/usr/local/bin/PartitionDefinition1に従ってパーティション?分割作業する。 パーティション? サイズ パーティションタイプ /dev/sda1 すべて Linux という内容だ。 Format_XFS ${DISK1_DEV}1 Format_XFS関数で/dev/sda1をxfs形式にフォーマット。 MountShare ${DISK1_DEV} ${DISK1_MPT} MountShare関数に 第1引数 /dev/sda 第2引数 /mnt/disk1 という引数を付けて実行させている。 ここで/usr/local/bin/kuro_lib内のMountShare関数を説明する。 MountShare関数 /usr/local/bin/kuro_lib内の関数。4つまでの引数に対応し、3つの戻り値を設定できる。 # $1 target device to mount. # $2 target mountpoint of $1. # $3 File system of target device(default is xfs). # $4 Mounted device permission(default is 777). MountShare(){ 第1引数にマウントする対象デバイス、第2引数に対象デバイスのマウント先、第3引数に対象デバイスのファイルシステム(初期値はxfs形式)、第4引数にマウントしたデバイスのパーミッション(初期値は777)、という解説。 # ret 0 this is no partition disk. # ret 1 this is nand share type partition # ret 2 this is developkit type partition (maybe) MountShare関数の戻り値ではない。IsHavePartition関数からの戻り値を説明している。 戻り値「0」で「パーティション?が存在しないディスクです」、「1」で「NANDフラッシュ共有時(つまり標準Linux時)のパーティション?です」、「2」で「(おそらく)開発用Linux時のパーティション?です」と、それぞれ意味する。 if [ "$1" = "/dev/sda" -o "$1" = "/dev/sdb" ] ; then 第1引数が/dev/sdaあるいは/dev/sdbであれば以下を実行。 IsHavePartition $1 /usr/local/bin/kuro_lib内のIsHavePartition関数に第1引数を付けて実行している。 ここでIsHavePartition関数を説明する。 IsHavePartition関数 # $1 target device to check partition 第1引数にパーティション状態をチェックする対象デバイス、という解説。 # ret 0 this is no partition disk. # ret 1 this is nand share type partition # ret 2 this is developkit type partition (maybe) 戻り値「0」で「パーティション?が存在しないディスクです」、「1」で「NANDフラッシュ共有時(つまり標準Linux時)のパーティション?です」、「2」で「(おそらく)開発用Linux時のパーティション?です」と、それぞれ意味する。 IsHavePartition(){ if [ -x ${HEXDUMP} ] ; then HEXDUMP変数(=/usr/bin/hexdump)に-xオプションを付けて条件としている。-xオプションは「存在し、かつ実行可能なら真」という意味なので、ここでは「/usr/bin/hexdumpが存在し、かつ実行可能なら次を実行」という意味になる。 DISK_1_PART_TAIL=`hexdump -s 446 -n 64 -e '8/1 "%02x " 2/4 "%10d " "\n"' $1 | sed -n "1p"|awk '{print $10}'` DISK_1_PART_TAILという変数を用意し、そこにhexdump -s 446 -n 64 -e '8/1 "%02x " 2/4 "%10d " "\n"' $1 | sed -n "1p"|awk '{print $10}'という内容を代入している。 パイプで3つの命令がつながっているが、それぞれに分けて考えてみる。 hexdump hexdump -s 446 -n 64 -e '8/1 "%02x " 2/4 "%10d " "\n"' $1 hexdumpコマンドを使っている。先頭から446バイト読み飛ばした所から64バイト分だけを読み込み、それを「8/1 "%02x " 2/4 "%10d " "\n"」というフォーマットで第1引数のデバイスを表示する、という意味になる。 HDDの先頭512バイトはMBR領域となっており、その中の先頭446バイトから64バイトはパーティションテーブルが4エントリ分(1エントリ16バイト)ある。 つまりここでは4つのパーティションテーブルを読み込んだことになる。 次に、詳細はhexdumpコマンドで説明するが、「繰り返し回数/バイト数 "フォーマット"」の羅列がhexdumpコマンドのフォーマット形式なので、この場合は 8回繰り返し/1バイト "フィールド幅2(2桁表示で満たない桁は0で表示)で16進数変換" 2回繰り返し/4バイト "フィールド幅10(10桁表示で満たない桁は空白で表示)で10進数変換" 改行 という内容になる。 つまり、「1バイトづつ8回、4バイトづつ2回、計16バイトを10回にわけて読み込み、それを4行に出力」という内容だ。 パーティションテーブルを1つ読み込んでは改行し、64バイト分すべてを16バイトづつ4行10フィールドで表現している。 4つのパーティション?を切ったHDDで試してみると以下の結果を得た。 00 01 01 00 83 fe 3f 06 63 112392 00 00 01 07 83 fe 7f 74 112455 5879790 00 00 41 75 82 fe 7f 85 5992245 273105 00 00 41 86 83 fe ff ff 6265350 150031035 sed sed -n "1p" 「-n」オプションでhexdumpコマンドから受け取った結果の1行目(pが行を表す)だけを抽出している。 ここの「1p」が「2p」「3p」「4p」と変化していくのは、それぞれパーティションテーブルを1から4まで読み、該当パーティションテーブル以外を破棄している。 先ほどの例で試すと 00 01 01 00 83 fe 3f 06 63 112392 という結果を得る。 awk awk '{print $10}' sedコマンド?から受け取った行の第10フィールドの値を出力している。 第10フィールドはLBAのパーティション?総セクター数(4バイト)を意味する。 つまり、最終的にDISK_1_PART_TAIL変数に代入したい値とは、各パーティション?の総セクター数であることがわかる。これはhexdumpコマンドで10進数にされている。 DISK_2_PART_TAIL=`hexdump -s 446 -n 64 -e '8/1 "%02x " 2/4 "%10d " "\n"' $1 | sed -n "2p"|awk '{print $10}'` DISK_3_PART_TAIL=`hexdump -s 446 -n 64 -e '8/1 "%02x " 2/4 "%10d " "\n"' $1 | sed -n "3p"|awk '{print $10}'` DISK_4_PART_TAIL=`hexdump -s 446 -n 64 -e '8/1 "%02x " 2/4 "%10d " "\n"' $1 | sed -n "4p"|awk '{print $10}'` 先ほどと同様な処理を各パーティション?ごとにDISK_パーティション番号_PART_TAILという変数に代入している。 例で試すと 112392 という結果。 総セクター数が0であればそのパーティション?は存在しない、という意味になる。 if [ "${DISK_1_PART_TAIL}" -ne 0 -a "${DISK_2_PART_TAIL}" -eq 0 -a "${DISK_3_PART_TAIL}" -eq 0 -a "${DISK_4_PART_TAIL}" -eq 0 ] ; then 第1パーティションの総セクター数が0ではない かつ第2~4パーティションの総セクター数が0 の場合に以下を実行する。 return 1 戻り値「1」を設定し関数を抜ける。 つまり「this is nand share type partition」ということになる。 elif [ "${DISK_1_PART_TAIL}" -ne 0 -a "${DISK_2_PART_TAIL}" -ne 0 -a "${DISK_3_PART_TAIL}" -ne 0 -a "${DISK_4_PART_TAIL}" -ne 0 ] ; then 第1~4パーティションの総セクター数が0ではない の場合に以下を実行。 return 2 戻り値「2」を設定し関数を抜ける。 つまり「this is developkit type partition (maybe)」ということだ。 else それ以外の場合、つまり 第1パーティションの総セクター数が0 の場合に以下を実行。 return 0 戻り値に「0」を設定し関数を抜ける。 つまり「this is no partition disk.」ということになる。 fi パーティション?総セクター数の条件分岐を終了する。 else 「/usr/bin/hexdumpが存在し、かつ実行可能」ではない場合は以下を実行、という意味。 return 0 戻り値に「0」を設定し関数を抜ける。 つまり「this is no partition disk.」ということになる。 fi 「/usr/bin/hexdumpが存在し、かつ実行可能」という条件分岐を終了する。 return 0 いずれにもあてはまらなかった場合、戻り値に「0」を設定し関数を抜ける。 つまり「this is no partition disk.」ということになる。 } IsHavePartition関数はここまで。 ここからまたMountShare関数に戻る。 RET=$? RETという変数を用意し、そこにIsHavePartition関数の戻り値を代入。 [ "${RET}" -eq 1 ] TARGET_DEV=${1}1 [ "${RET}" -eq 2 ] TARGET_DEV=${1}4 [ "${RET}" -eq 0 ] TARGET_DEV=${1} 戻り値が1ならば、TARGET_DEV変数にMountShare関数に付けた第1引数(if文の関係上、/dev/sdaか/dev/sdb)の第1パーティション?を代入する。 戻り値が2ならば、TARGET_DEV変数にMountShare関数に付けた第1引数(if文の関係上、/dev/sdaか/dev/sdb)の第4パーティション?を代入する。 戻り値が0ならば、TARGET_DEV変数にMountShare関数に付けた第1引数(if文の関係上、/dev/sdaか/dev/sdb)を代入する。 というように処理している。 else MountShare関数に付けた第1引数が/dev/sdaでも/dev/sdbでもなければ以下を実行。 TARGET_DEV=$1 TARGET_DEV変数にMountShare関数に付けた第1引数を代入。 fi MountShare関数に付けた第1引数が/dev/sdaか/dev/sdbか、という条件分岐を抜ける。 IsMounted ${TARGET_DEV} IsMounted関数に第1引数としてTARGET_DEV変数を渡す。先ほど説明したとおり、戻り値「1」で「device is mounted.」、戻り値「0」で「device $1 is not mounted.」という意味になる。 if [ $? = 1 ] ; then 戻り値が「1」ならば、つまり「device is mounted.」という意味ならば次を実行。 echo "${TARGET_DEV} is already mounted." 画面上に「対象デバイス is already mounted.」と表示。 return 1 戻り値「1」を設定しMountShare関数を抜ける。 fi IsMounted関数の戻り値による条件分岐を抜ける。 if [ "$3" = "" ] ; then MountShare関数の第3引数が何もなければ以下を実行する。 FS=xfs FSという変数を用意し、そこにxfsを代入する。 else MountShare関数の第3引数に何かあれば以下を実行する。 FS=$3 FSという変数を用意し、そこにその第3引数を代入する。 fi MountShare関数の第3引数の有無の条件分岐を抜ける。 if [ "$4" = "" ] ; then MountShare関数の第4引数が何もなければ以下を実行する。 PERMISSION=777 PERMISSIONという変数を用意し、そこに777を代入する。 else MountShare関数の第4引数に何かあれば以下を実行する。 PERMISSION=$4 PERMISSIONという変数を用意し、そこにその第4引数を代入する。 fi MountShare関数の第4引数の有無の条件分岐を抜ける。 echo "Mounting ${TARGET_DEV} on $2 as a ${FS} file system." 画面上に「Mounting 対象デバイス(MountShare関数の第1引数) on マウントポイント( MountShare関数の第2引数) as a ファイルシステムタイプ(MountShare関数の第3引数) file system.」と表示する。 mount -t ${FS} ${TARGET_DEV} $2 実際に設定した変数の値をもとにmountコマンドでマウントする。 case $? in mountコマンドの終了ステータスをもとに実行内容を変える。 0) 終了ステータス「0」(正常)の場合 chmod ${PERMISSION} $2 echo "Success." ;; chmodコマンド?で設定したパーミッションでマウントポイントのデバイスを指定し、画面上に「Success.」と表示してcase文を抜ける。 *) 終了ステータス「1」(異常)の場合 echo "Failed." return 1 ;; 画面上に「Failed.」と表示して、戻り値「1」を設定しMountShare関数を抜ける。 esac case文はここまで。 echo "" return 0 画面上を改行して戻り値「0」を設定しMountShare関数を抜ける。 } MountShare関数はここまで。 fi CHANGE_TO_DEVHDD_FILE(/mnt/mtd/にChangeMeDevHDD)の有無の条件分岐を抜ける。 miconapl -a led_set_code_information clear LEDの点滅を止める。