RFC1055 Serial Line Internet Protocol 日本語訳

はじめに

PPPの前身としてSerial Line Internet Protcolの名前を時々見る。いまさら実装する人がいるとも思えないが、メモとして書き出しておく。

 

本文

Network Working Group J. Romkey
Request for Comments: 1055 1988年7月

 

イントロダクション

このTCP/IPプロトコルファミリは、様々なネットワーク媒体を通して実行される: IEEE 802.3 (イーサネット) and 802.5 (トークンリング) LAN's, X.25 lines, 衛星通信、そしてシリアル通信である。これらのネットワークにおいては様々なカプセル化の標準があるが、シリアル通信にはない。SLIP、Serial Line IPは現在の事実上の標準で、TCP/IPを実行するポイント・ツー・ポイントのシリアル接続に一般的に使われている。これはインターネットの標準ではない。このメモの再配布は制限されない。

 

歴史

SLIPは1980年代初頭の3COM UNETのTCP/IPの実装に起源をもつ。これは単にパケットをフレーム化するプロトコルである: SLIPはIPパケットをフレーム化するシーケンスを定義し、それ以外は何もしない。アドレッシング、パケット型の定義、エラー検出/訂正や圧縮方式を提供しない。プロトコルが非常に小さいため、通常は実装が非常に簡単である。

1984年頃、RIck Adamsは4.2 Berkeley UnixとSum Microsystemsのワークステーションに対してSLIPを実装し、世界に公開した。これはすぐにシリアル通信でTCP/IP ホストやルータに接続する簡単で信頼性のある方法として人気を博した。

SLIPは時にはダイヤルアップの目的のために専用のシリアル接続で使われ、一般に1200bpsから19.2kbpsの間の回線速度で使われている。これは複数のホストとルータが相互に接続できるようにするために有用である(ホストとホスト、ホストとルータ、ルータとルータはすべて一般的なSLIPネットワークの構成である)。

 

可用性

SLIPは多くのBerkeley Unixベースのシステムで利用できる。これはバークレーの標準的な4.3 BSDリリースにに含まれている。SLIPはUltrix、Sun UNIXや他の多くのBereley派生のUNIXシステムで利用できる。複数の終端集線装置やIBM PCの実装でも利用できる。

Berkley UNITのSLIPはpub/sl.shar.Z内にあるuune.uu.netからの匿名FTPから入手できる。必ずバイナリモードでファイルを転送してから、UNIXの解凍プログラムを実行すること。結果のファイルを入手して、UNIX/bin/shシェルスクリプトとして実行する(/bin/sh sl.shar のように)。

 

プロトコル

SLIPプロトコルは2つの特殊文字を定義する: ENDとESC。ENDは8進数で300(10進数で192)、ESCは8進数で333(10進数で219)で、ASCIIのEscapeと混同しないようにする: 議論を避けるため、ESCはSLIP ESC文字を示すことにする。パケットを送るとき、SLIPホストは単にパケット内のデータを送り始める。もし、あるデータバイトがEND文字と同じコードであれば、2バイトのESCと8進数334(10進数で220)を代わりに送る。パケット末尾のバイトを送ってから、END文字を送信する。

Phil Karnは、パケットの終わりと同様にEND文字で開始する、アルゴリズムの簡単な変更を提案している。これは回線のノイズによって引き起こされた誤ったバイトを除去することを意図している。通常のケースでは、レシーバには単に連続したEND文字に見えると予想されるが、これは間違ったIPパケットを作り出す。もしSLIPの実装が長さ0のIPパケットを破棄しないならば、IPの実装がおそらくそうするだろう。もし配線ノイズがあっても、受信されたデータは後のパケットに影響を与えることなく破棄されるだろう。

SLIPには'標準的な'仕様がないために、最大のパケット長は定義されない。Berkley UNIX SLIPドライバで使われている最大のパケットサイズを受け入れることが最良であろう: これはIPと通信プロトコルのヘッダを含み1006バイトである(フレーミング文字を含まない)。したがって、新規のSLIP実装では1006バイトのデータグラムを受け入れられるように用意して、1つのデータグラムを1006バイトを超えて送らないようにするべきである。

 

不足

多くのユーザーがSLIPに実装してほしいと思っているがそうではない機能が多くある。公平のためにいうならば、SLIPはそれらの問題があまり重要でなかったくらいずっと前に設計された、単にとても単純なプロトコルである。以下は既存のSLIPプロトコルに対するよく知られた欠点である。

アドレッシング:

SLIP接続の両端のコンピュータはルーティングのためにお互いのアドレスを知る必要がある。また、ルータにダイヤルアップするホストでSLIPを使う場合、アドレッシングの方法は非常に動的になってしまい、ルータはダイヤルしてきているホストにIPアドレスを通知する必要があるだろう。現状のSLIPは、SLIP接続を通してホストにアドレッシングの情報を伝える方法を提供していない。

 

型識別:

SLIPには型識別のフィールドがない。そのため、1つのSLIP接続を通して1つのプロトコルしか実行できず、TCP/IPとDECnetの両方を実行している2台のDECコンピュータの構成では、SLIPを用いる限りTCP/IPとDECnetが1本のシリアル通信を共用する余地はない。しかしながら、SLIPは"Serial Line IP"であるから、もしシリアル通信がマルチプロトコルのコンピュータ2台間を接続しているのであれば、回線を通して複数のプロトコルを使用できるべきだろう。

 

エラー検出/訂正:

ノイズの多い電話回線では、通信の途中でパケットが破損するだろう。おそらく回線速度が非常に低い(2400ボーのように)ために、パケットの再送は非常に高コストである。どんなIPアプリケーションでも破損したパケットを検出しなければならないから、エラー検出はSLIPレベルでは絶対に必要とはいえないが、NFSのようないくつかの一般的なアプリケーションではチェックサムを省略し、破損したパケットの検出をネットワーク媒体に頼っている。回線ノイズによって引き起こされるパケット再送は非常に長い時間を要するため、SLIP自体に一種の単純なエラー訂正の機構があれば効率化されるだろう。

 

圧縮:

ダイヤルイン回線は非常に低速(一般に2400bps)であるために、パケット圧縮はパケットスループットを大きく改善するだろう。一般に、単一のTCP接続における一連のパケットではIPとTCPヘッダにはほとんど変化がないため、単純な圧縮アルゴリズムでは完全なヘッダの代わりにヘッダの変化した部分だけを送るかもしれない。

 

これらのいくつかまたはすべての問題に対処したSLIPの後継を設計、実装するために、様々なグループによって複数の活動が行われています。

 

SLIPドライバ

以下のC言語の関数は、SLIPパケットを送受信する。これらは、2種類のsend_char()とrecv_char()というシリアル回線を通して1文字を送受信する関数に依存している。

(以下コードのため省略)

Hyper-Vでisoマウントができない

メモ。

 

環境: Windows8.1

 

症状: Bittorrentを使ってDLしたUbuntu18.04のISOをインストールしようと、SCSIコントローラーに追加しようとしたら「このバージョンはこのバージョンのファイル形式をサポートしていません Hresult 0xc03a0005」と出てきて起動できない。

 

解決策:

https://support.microsoft.com/ja-jp/help/2993573/you-don-t-have-permission-error-message-when-you-try-to-mount-an-iso-i

の通り。ファイルを別のフォルダにコピーする。SparceFile(?)になっているのが原因らしい。

Windows Media Playerで生成したWAVEファイルのメタデータをちゃんとする

Windows Media PlayerリッピングしたWAVEファイルのメタデータSJISで保存されているらしく、ffmpegに出変換すると文字化けする。

ffmpeg側で修正する方法もあるにはあるっぽいが、再コンパイルとかめんどくさいの極みなのでスクリプトでどうにかする。

 

github.com

python3.5 make_metadata.py ${FILENAME}

ffmpegに与える引数が出力される。

 

でもなんかうまく書きこまれてない気もするんだよなぁ。

 

 

python3.5 make_metadata_file.py ${FILENAME} > metadata.ini

ffmpeg -i ${INPUT} -i metadata.ini -map_metadata 1 ${OUTPUT}.m4a

 

でiniファイルを経由したほうがよさそう

 

参考にしたサイト:

wav ファイルフォーマット

WAVフォーマットについて - 脳内メモ++

ffmpeg でメタデータを加える | ニコラボ

Libav documentation : :

Mastodon with Dockerインストール(2018/6)

なんかエラーいっぱい出るのでまとめ

環境

Mastodon v2.4.2rc3
AWS EC2 t2.micro

参考にしたページ

qiita.com
yukota.hatenablog.com
qiitadon.com

Docker+Docker-Composeインストール

して

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository        "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
       $(lsb_release -cs) \
       stable"
sudo apt-get update
sudo apt-get -y install docker-ce
sudo usermod -aG docker ${USER}
sudo service docker start

sudo curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chown ubuntu:ubuntu /usr/local/bin/docker-compose

Mastodonダウンロード

cd
mkdir mstdn
cd mstdn
git clone  https://github.com/tootsuite/mastodon.git
cd mastodon
git checkout -b v2.4.2rc3

いい感じの作業

いい感じに

cp .env.production.sample .env.production
emacs .env.production
docker-compose build

つまったとこ1

docker-compose build
docker-compose run --rm web rake secret
>Starting mastodon_redis_1 ... done
>Starting mastodon_db_1    ... done
>rake aborted!
>Gem::LoadError: You have already activated rake 12.0.0, but your Gemfile requires rake 12.3.1. Prepending `bundle exec` to your command may solve this.
>/mastodon/config/boot.rb:3:in `<top (required)>'
>/mastodon/config/application.rb:1:in `require_relative'
>/mastodon/config/application.rb:1:in `<top (required)>'
>/mastodon/Rakefile:4:in `<top (required)>'
>(See full trace by running task with --trace)
docker-compose run --rm web bundle exec rake secret
>Starting mastodon_redis_1 ... done
>Starting mastodon_db_1    ... done
>2db5b...

いい感じに

emacs docker-compose.yml

つまったとこ2

docker-compose run --rm web rails db:migrate
>Starting mastodon_redis_1 ... done
>Starting mastodon_db_1    ... done
>[FATAL tini (5)] exec rails failed: No such file or directory
docker-compose run --rm web ./bin/rails db:migrate

つまったとこ3

docker-compose run --rm web ./bin/rails assets:precompile
>Starting mastodon_db_1    ... done
>Starting mastodon_redis_1 ... done
>rails aborted!
>Errno::EACCES: Permission denied @ rb_sysopen - /mastodon/public/assets/.sprockets-manifest-da082c35f6ba14???5fe????d3dddff64c.json.469923422420880.5.571411
docker-compose run --rm -u root web sh -c "rails assets:precompile && chown -R mastodon:mastodon public"

とりあえずここまで

FreeRTOSのライセンス

FreeRTOSのライセンスがよくわかんなかったので調べた訳した。

 

ライセンス本文(2017/10/04 アクセス)

http://www.freertos.org/license.txt

 

後半はGPLv2だからいいとして、除外条項に書いてあることだけ訳してみる。

当然ながら訳の正確さは保証しない。

 

Any FreeRTOS *source code*, whether modified or in it's original release form, or whether in whole or in part, can only be distributed by you under the terms of the GNU General Public License plus this exception. An independent module is a module which is not derived from or based on FreeRTOS.

いかなるFreeRTOSのソースコード、それが修正されているか、オリジナルのままか、全てか一部かに関わらず、GPLとこの例外の下に配布することができます。独立したモジュールとはFreeRTOSから派生したか基にしていないモジュールのことです。

 

Clause 1:

Linking FreeRTOS with other modules is making a combined work based on FreeRTOS.
Thus, the terms and conditions of the GNU General Public License V2 cover the
whole combination.

As a special exception, the copyright holders of FreeRTOS give you permission to
link FreeRTOS with independent modules to produce a statically linked
executable, regardless of the license terms of these independent modules, and to
copy and distribute the resulting executable under terms of your choice,
provided that you also meet, for each linked independent module, the terms and
conditions of the license of that module. An independent module is a module
which is not derived from or based on FreeRTOS.

節1:

FreeRTOSを他のモジュールと結合することはFreeRTOSに基づいてリンクされた製品を作ることです。したがって、GPLv2の利用規約は全ての組み合わせを含みます。

特別な例外として、FreeRTOSの著作権者は独立したモジュールの利用規約に関わらず、その独立したモジュールとFreeRTOSを実行可能なように静的リンクしたものを生成すること、また生成された実行可能物をあなたの選択した利用規約の下で複製や配布すること、独立したモジュールを、あなたの要求を満たすような、そのモジュールのライセンスの利用規約に従い提供することを許可します。独立したモジュールとはFreeRTOSから派生したか基にしていないモジュールのことです。

 

Clause 2:

FreeRTOS may not be used for any competitive or comparative purpose, including the publication of any form of run time or compile time metric, without the express permission of Real Time Engineers Ltd. (this is the norm within the industry and is intended to ensure information accuracy).

節2:

FreeRTOSは、Real Time Engineers Ltd.の明示的な許可なしに、いかなる形式でも実行時間やコンパイル時間の公表を含む、競争または比較の目的で使用することはできません(これは業界内の規範であり、 正確さを担保するためことを意図しています)。

 

以上

 

まぁWikipedia(FreeRTOS - Wikipedia)に書いてある通りだよね。

ソースコードに手を加えてなければ実行ファイルとかあなたの書いたコードにはコピーレフト他の制限は加えないよ!って話。

 

2節がよくわかんないんだけど、たぶん「他社の製品を名指しで自社製品との比較に使ったりは普通しないよね?これ商業製品として売ってもいるから配慮してね!」ぐらいの感じだと思う。

 

趣味のプロジェクトで使ってちょっとだけ販売したいかな~って場合でも使えそうだね。