EMFSは、読み出し専用のファイルを、ルーターのコマンドとして保存できるファイルシステムです。ファイルの内容が内蔵不揮発性メモリーに保存される点ではRTFSと同じですが、RTFSとは異なりファイルの内容がコマンドとしてconfigの中に保存されているので、他の設定と同様に一つのconfigファイルとして扱えることが大きな違いです。
ヤマハルーターでは以下の機種およびファームウェアで、EMFSをサポートしています。
機種 | ファームウェア |
---|---|
vRX VMware ESXi版 | すべてのリビジョン |
vRX Amazon EC2版 | |
RTX3510 | |
RTX1300 | |
RTX1220 | |
RTX830 | Rev.15.02.03以降 |
NVR510 | Rev.15.01.13以降 |
NVR700W | Rev.15.00.14以降 |
RTX1210 | Rev.14.01.26以降 |
RTX5000 | Rev.14.00.26以降 |
RTX3500 |
EMFSは、読み出し専用のファイルをルーターのコマンドとして保存できるファイルシステムです。ファイルは、embedded fileコマンドで作成、保存され、その他の設定と同様にshow configコマンドで表示されます。EMFS上のファイルシステムはTFTPやSCPを使ってconfigファイル内のコマンドの一部として送受信が可能です。読み出し専用のファイルとして、Luaスクリプトファイルを保存したり、callコマンドで呼び出すマクロを保存するのに利用できます。
EMFSは読み出し専用のファイルシステムであり、LuaスクリプトのAPI等からはファイルを読み出すことしかできず、ファイルの作成、変更、削除は行えません。また、あまり大きなファイルは保存できないことや、ディレクトリは作成できないことに注意が必要です。
EMFS上のファイルを読み出すためには、パスの先頭に"emfs:"を指定します。また、EMFSにはディレクトリの概念がないため、すべてのファイルはEMFSのルートディレクトリ上に存在することになります。
show file listコマンドでEMFSを表示する場合、このコマンドを実行した時点の日時が表示されます。
# embedded file test.txt <<EOF This is a test file. EOF # show file list emfs:/ 2018/01/01 16:26:49 21 test.txt # # embedded file cat <<EOF f=io.open(arg[1]) for l in f:lines() do print(l) end f:close() EOF # show file list emfs:/ 2018/01/01 16:32:32 65 cat 2018/01/01 16:32:32 21 test.txt # # show config ... login password * ip lan1 address 192.168.100.1/24 ... embedded file test.txt <<EOF This is a test file. EOF embedded file cat <<EOF f=io.open(arg[1]) for l in f:lines() do print(l) end f:close() EOF # # lua emfs:/cat emfs:/test.txt This is a test file. # # set PWD=emfs:/ # lua cat test.txt This is a test file. # # alias cat='lua emfs:/cat' # @cat test.txt This is a test file. #
EMFSのファイル名には、半角文字での英大文字、英小文字、数字、ハイフン(-
)、アンダースコア(_
)、ピリオド(.
)が使用できます。その他の文字は使えません。英大文字と英小文字は区別されます。また、ファイル名の長さに制限はありませんが、入力するコマンドの文字数がコマンドラインの最大長(4095文字)を超えることはできません。
EMFSのファイルに保存できるのは、コマンドラインから入力できる文字のみです。したがって、バイナリーファイルを保存する場合は、BASE64形式で保存する必要があります。
# embedded file -b cert1.p12 <<EOF MIIKYQIBAzCCCicGCSqGSIb3DQEHAaCCChgEggoUMIIKEDCCBw8GCSqGSIb3DQEHBqCCBwAwggb8 AgEAMIIG9QYJKoZIhvcNAQcBMBwGCiqGSIb3DQEMAQYwDgQIBVoyOiRil50CAggAgIIGyEBby8bZ ... ZdM61lXlMSUwIwYJKoZIhvcNAQkVMRYEFPOEFIlwBvnvsoTfUDuWphr8gdfcMDEwITAJBgUrDgMC GgUABBQOD2ZRWqCcWC5sEwwhwFw46zkN+AQIcwN9T98mMc4CAggA EOF #
-b | ... | BASE64形式を指定 |
FILENAME | ... | ファイル名 |
EOF_STRING | ... | EOF文字列 |
embedded file
コマンドを投入すると、コンソールはファイルの内容を入力するモードとなる。EOF_STRINGで指定したEOF文字列が入力されるまでが、ファイルの内容となる。no embedded file
コマンドでファイルを削除できる。
-b
オプションを指定した場合は、入力されたファイルの内容はBASE64形式であるものとして処理される。BASE64形式として不正な内容の場合はエラーとなる。バイナリーファイルを保存する場合は、BASE64形式でなければならない。-b
オプションが省略された場合は、入力された内容がそのままテキストファイルとして保存される。
EOF文字列として利用できる文字種は、半角英数字(A-Z、a-z、0-9)のみである。英大文字、小文字は区別される。
Luaスクリプトのrt.command()で複数行からなるコマンドを実行する場合には、各行を改行文字('\n'
)で連結した文字列をコマンドとして渡す。改行文字は'\n'
でなくてはならず、'\r'
や'\r\n'
ではエラーとなる。
rtn, err = rt.command("embedded file x <<EOF\necho This is x\nEOF")