トップ 最新 追記

KeN's GNU/Linux Diary


2018年07月01日

_ [cooking] 豚肉とナスの味噌炒め

_ [reviewml] Re:VIEW 3.0.0preview1リリース

終盤の猛烈なtakahashimさんの追い上げで、Re:VIEW 3.0.0preview1を6月30日にリリースしました。

preview1という名のとおり、正式版とするにはいくぶん躊躇するところがあるため、Rubygems経由のインストールは「gem install review:3.0.0preview1」のようにバージョン指定する必要があります。→「gem install review --pre」を使うべき、というtakahashimさんのご指示がありました。gemのオプション、マジムズい。

ただ、近日にはこのpreview1をベースに正式版としていくことは決定していますので、まったく誰にも使っていただけないまま次期正式版になって問題が噴出というのは避けたいところです。ということで、クリティカルでない範囲で試して、問題があればissue報告をお願いします(たとえば入稿が来週なのに……みたいなときにやるべきではないですね!)。

特に、

  • config.ymlで「review_version: 2.0」のプロジェクトバージョンになっているのに、TeX PDFの結果が変わってしまった
  • 「review_version: 3.0」でのTeX PDFの新レイアウトを試してみたらおかしなことが起きた
  • 以下の新機能や非互換の変更で奇妙な挙動がある

あたりは重点的に収集・解決したいところです。

3.0.0preview1のニュースリリースには多くの新機能・変更記載がありますが、端的でよくわからない部分もあるかと思いますので、ちょっと解説してみます。

contentdirパラメータで、reファイルをサブフォルダに配置してそのフォルダを指定できるようにしました

たとえば原稿reファイル群を「genko」サブフォルダに入れて、config.ymlで

 contentdir: genko

と指定する、という感じです。注意点として、画像の置き場所であるimagesは作業フォルダ/genko/imagesに変わるわけではなく、作業フォルダ/imagesであり続けます。

//graph命令でPlantUMLをサポートしました

Java実装のPlantUMLというUML描画ツールからの生成をサポートしてみました。//graph内にPlntUMLの記法で書いておくと、EPUBやPDFのビルド時にPlantUMLで描画されて画像として埋め込まれます。

javaコマンドへのパスが通っていて、plantuml.jarが作業フォルダ直下にあることを前提としています。

CSV形式の単語ファイルから指定キーに対応する値を展開する、@<w>および@<wb>命令を追加しました

チームのコミッタでもある角さん謹製のもともと翻訳向けに使われていた命令を取り込みました。本来はもっといろいろ機能が細かかったのですが、使い方を選びすぎるきらいがあったので簡略化しています。

作業フォルダにCSV、たとえばwords.csvという名前で中身は

 "LGPL","Lesser General Public License"
 "i18n","""i""nternationalizatio""n"""

のように書いておいて、config.ymlに

 words_file: words.csv

としておくと、

 @<w>{LGPL}, @<wb>{i18n}

というインライン記法で@<w>や@<wb>の内容が展開されます。wbは太字扱いになります。展開は文字列のエスケープをするくらいで多重展開をするわけではないので、あくまでも単純な文字列置換としての使い方に留めましょう。角さんは人名や判断の割れる語の展開に使っていることが多かったです。

words_fileは絶対パスで書くこともできるので、プロジェクトを横断して使うといった用途もできるでしょう。

catalog.ymlにある*.reファイルが存在しない場合エラーになるようにしました

とりあえず仮で書いておく、ができなくなったけどまぁ存在しないまま通ってしまうのも気持ち悪いか、という感じです。

LATEXBuilder: LaTeXでルビを表現できるようpxrubricaパッケージを読み込むようにしました

TeX PDFのみに関係します。これまでもルビについてはlayout.tex.erbでコメントで入れてはいましたが、pxrubricaパッケージは標準的なTeXLiveに収録されているので、後述する「バージョン3のTeXレイアウトを使う」場合はデフォルトで有効にしました(バージョン2設定のプロジェクトの場合は、引き続きlayout.tex.erbなりreviewmacro.styなりに書く必要があります)。

1点注意として、pxrubricaパッケージ自体にバージョンによる差異があり、Debian Stretch+TeXLive2016ベースのvvakame/review Dockerだと古いpxrubricaパッケージになります。ルビの配置の仕方のセットアップとして新しいpxrubricaなら「\rubysetup{J}」、古いpxrubricaなら「\rubysetup{g}」とすることでエラーを回避していますが、TeXLiveあるいはpxrubricaのバージョンによって若干の結果差異が生じることにはなります。

LATEXBuilder: 複数のLaTeXレイアウトファイルから選択できるようにしました

これもTeX PDFのみに関係します。今のところ、用意しているレイアウトは「review-jsbook(旧来互換性重視・jsbookベース)」「review-jlreq(実験実装、jlreqベース)」です。 review-initでプロジェクトを作成する際に「--latex-template review-jsbook」「--latex-template review-jlreq」のようにオプションを付けて指定します。何も付けない場合はデフォルトのreview-jsbookが使われます。

review-jsbookは2系への互換性保持用としての提供としてほぼ現状で固定させ、新たな改良は入れない予定です。今後jsbookベースの新たなものを作るとしても、別のレイアウト名を付けることになるでしょう。

review-jlreqは「日本語組版の要件」に従ったjlreq.clsというTeXレイアウトを使ったもので、古いTeXLiveだとこれがそもそも入っていません。GitHubからインストールするのが妥当です。

review-jlreqもあくまでも実験的なもので、まだ不具合・実装していない機能など多数あります。ただ、これまでのreview-jsbookで引きずっていた古い実装などを捨ててもう少しモダンなやり方にしてみるなどの挑戦があるので、独自のレイアウトを作る際の参考にはなるかもしれません。詳細はtemplates/latex/review-jlreq/README.mdを参照してみてください。

@<balloon>を標準サポートタグとしました

目的としては、コードに説明を加える(ふきだしなり線をひっぱるなり)ためのものです。もともとInDesignで紙面デザインに応じて上書き・スクリプトで調整を行うことを前提としており、TeXやHTMLにおいてもデフォルトの実装は単に「←〜」とするだけです。

後工程なりreview-ext.rbなりで上書きしていただければと思います。

LATEXBuilder: @<uchar>でUnicode文字を直接出力できるようにしました

というか、upLaTeXでuchar使うと余計に困ることになるので、コンパイラ設定を見て直に出すかを判定するようにしました。

しかし、upLaTeXだと文字によっては見た目が悪くなって

 gsub('ç', "\\c{c}").gsub('č', '\\u{c}').gsub('í', "\\\\'{i}")

みたいな後処理が必要になることもありますね……。このあたりは必ずしも一括でそうすることが適正とは言えないこともあるので難しいです。

RakefileのオプションでCONFIG_FILEを上書きできるようにしました

リリース直前につっこまれた機能です。以下の環境変数で、右の既定値を置き換えられます。

  • REVIEW_BOOK: book(book.pdfとかbook.epubになる)
  • REVIEW_CONFIG_FILE: config.yml
  • REVIEW_CATALOG_FILE: catalog.yml
  • REVIEW_WEBROOT: webroot

特にconfig.ymlからinheritさせてconfig-epub.ymlとかconfig-ebook.ymlとか作っているときにわざわざRakefileにルール加えなくて済むのでよさそうです。

review_versionの値が3以上のときには、LaTeXの@<m>によるインラインの数式の前後にスペース文字を入れないようにしました

そもそもなんでこれ前後に入れていたんだっけ……という感じですが、旧来だと「@<m>{式}。」が「式<スペース>。」となってまずい、ということに気付きました。こういうケースでない限りは、ちょうどグルー調整になるのであまり変わった気がしないかもしれません。

HTMLビルダにおいて、//list, //listnumで識別子に基づくハイライト言語の自動検出をやめました(ハイライト言語は命令の3つめのオプションで指定してください)

ハイライトはもともといろいろと危険な実装だったのですが、list系だけ識別子から変にがんばってハイライタを決めるという実装になっているのは、メリットよりもデメリットが上回っていると判断しました。

個人的にはハイライトは@<b>などのインライン命令との相性がとても悪い(ハイライトしてから戻そうにも、インライン命令の文字がハイライタを混乱させるし、位置判定も困難)ので、何か抜本的な策はないものかと悩んでいます。

お仕事で作っているのはすごくがんばってこのあたりの処理をしたりしていますが、完全カスタムで汎用性がまったくないので取り込めない……。

LATEXBuilder: layout.tex.erbを整理・再構成しました

ここで「複数のLaTeXレイアウトファイルから選択できるようにしました」などでの話と絡んできますが、review_version: 3が指定されているときに、新しいlayout.tex.erbを使うようになりました。

正確には、review_versionが2以下の場合には互換性のためのreview/templates/latex-compat2/layout.tex.erbが使われ、3以上の場合は新しいreview/templates/latex/layout.tex.erbが使われます。

新しいlayout.tex.erbでは、config.ymlのパラメータを文字列あるいはフラグの形でTeXのマクロ表現に変えたもの(これはreview/templatex/latex/config.erbが処理)を取り込み、あとはすべてerbではなくそのTeXマクロに基づいて表示や条件分岐などを行います。

また、layout.tex.erb自体は表紙、大扉、前付、本文、付録、後付などに対応するマクロを呼び出すだけにして、マクロ実体はreview-jsbook等のレイアウト定義スタイルファイル側に委ねる形としました。これまでerbでベタにさまざまに条件分岐などをしていたのに比べると、layout.tex.erbはかなりすっきりした形態になっています。

 \documentclass[<%= @documentclassoption %>]{<%= @documentclass %>}
 <%= latex_config %>
 <%- if @config['texstyle'] -%>
 <%-   [@config['texstyle']].flatten.each do |x| -%>
 \usepackage{<%= x %>}
 <%-   end -%>
 <%- end -%>

 \begin{document}

 %% coverpage
 \ifdefined\reviewcoverpagecont
 \reviewcoverpagecont
 \fi
  ...
 %% mainmatter hook
 \ifdefined\reviewmainmatterhook
 \reviewmainmatterhook
 \fi

 %% chapters body
 \ifdefined\reviewchapterfiles
 \reviewchapterfiles
 \fi
  ...
 \end{document}

この新しいlayout.tex.erbの仕掛けに合わせて、review-jsbookなどの新しいレイアウト群は以下のポリシーに従って作業フォルダのstyサブフォルダにコピーされるようになっています。

  • reviewmacro.sty: 以下を束ねるスタイルファイル。よってconfig.ymlのほうは従来どおり「texstyle: reviewmacro」(あるいはtexstyle: ["reviewmacro"])でよい
  • review-base.sty: layout.tex.erbが要求するマクロに対応する基本定義
  • review-style.sty: 見た目に対する定義(定義上review-base.styと区分しきれていないものあり)
  • review-custom.sty: ユーザーが必要に応じて定義(空の内容)

今後新しいレイアウトを作る、Re:VIEW 3系に移植する、というときには、review-base、review-styleを参考にerbではなくTeXマクロを参照したり定義したりする形で作っていくことになります。LuaLaTeXなどupLaTeX以外のTeXエンジンを使うことが楽になったり、挙動書き換えが簡単になったりというメリットもあれば、TeXのマクロおよび挙動についての知識がそれなりに必要になるのでハードルが上がったデメリットもあるかとは思います。

config.ymlからの変換については単純文字列でよいのかどうか、情報渡しが不足していないかなど、検討の余地はありますので、レイアウト作成をしてみている方々の意見をお待ちしています。

なお、従来どおり、作業フォルダに独自のlayouts/layout.tex.erbを置くことで上書き可能です。erbが呼び出すのはlayout.tex.erbのみ、と覚えておいてください。

今のところスタイルファイルのコピーはreview-init時のみですが、既存プロジェクトの更新についても今後考えていくことにはなっています。とはいえ、作業フォルダにコピーしたというのはRe:VIEWのスタイルがいろいろ変わっていったとしても、ローカルの作業プロジェクトは固定しておけるという意図もあったりはするので、無闇な追従を勧めるものではない、となりそうです。

LATEXBuilder: LaTeXのコードリストをreviewlistblock環境で囲むようにしました

review_version: 3の場合に有効にしている機能です。今のところjsbook・jlreqのどちらのRe:VIEWレイアウトでも環境定義は空っぽにしている(つまり何もしない)のですが、今後の展開としてはたとえばキャプション付き/キャプションなしのリストがあったときに、その前後のアキを現状のような気味の悪いやり方をせずとも対処できるようになります。

LATEXBuilder: LaTeXのコードリスト環境をjlistingからplistingsパッケージに変更しました

日本語を含むリストのハイライトに、ライセンスがMITで使いやすいplistingsを採用しました。挙動的にはさほど変わった感じがしないかもしれません。

LATEXBuilder: PDF生成時にリンクの枠線について、標準では消すようにしました

技術書典で使う人が多くなって、紙印刷の用途がほとんどだなーということで、TeX PDF内のハイパーリンクの赤い囲みを消すようにしました。戻したい方はreview-custom.styに\hypersetupの定義を書いていくことになります。

review-jlreqのほうではdocumentclassのパラメータに書けるようにしたいなぁと妄想中。

LATEXBuilder: インライン文字装飾のLaTeXへの変換結果を\textbfではなく\reviewboldのように抽象化した名前にしました

これもreview_version: 3の場合に有効な機能です。review-jsbookのデフォルトでは\reviewbold→\textbfに展開しているので、今までと変わりません。たとえば

 \renewcommand\reviewbold[1]{\textsc\textgt #1}

みたいにreview-custom.styで上書きできます。同様に\reviewit、reviewtt、reviewtti、reviewttb、reviewcodeなどがあります。

LATEXBuilder: LaTeXの表紙(coverパラメータ)と大扉(titlepageパラメータ)は独立した設定となりました

もともとEPUBでは独立だったんですが、TeXのlayout.tex.erbでcoverを指定しないとtitlepageも出ない、というロジックで書かれていたのをやっぱり独立させることにしました。実際の影響は少ない……と思いたい。

review-preproc: --finalオプションを削除しました

まぁ使わないよねということで。

LATEXBuilder: キャプションブロックの出力についてreviewminicolumnを使わずreviewnote等を使うようにしました

review_version: 3で有効化する機能です。

仕事だと全部再定義していたのであまり気にしていなかったけど、実際汎用のものを作ろうとするとやっぱり困りますよね。

Ruby 2.3以下で実行時のログ表示が冗長になるのを修正しました

loggerを実装いただいて以来、ちょっと冗長になったなーと思ってたのは、実はバグだったらしいという衝撃の真実。

Version 2.5.0で削除したusepackageパラメータを、互換性のために戻しました

クリーンアップはありがたいのですが、昔のlayout.tex.erbをローカルで使っている人の互換性を派手に壊してしまったのでrevertしました。

HTMLBuilder: @<m>や//texequation{...//}でのログ出力を抑制するようにしました

式作成に成功しても延々ビルドログが流れるのは邪魔なので抑制に。

LATEXBuilder: リストのキャプションが空の場合の出力を修正しました

キャプションが空なのになぜ指定するんだろう、と疑問だったのですが、自動補完だったり、ハイライトを使ったりすると余分な空行が入ってしまうという話。対策としては「空」の判定を変えただけ。

MeCabのロードパスを修正しました

Debian Stretchだと'MeCab'なのだけど、gemなどでは'mecab'という非互換がある模様。両方試すようにしました。

Windowsでも//graph命令が動作するようにしました

Re:VIEW開発検証用にWindowsマシンを買ったので、このほかにもいろいろ改良をしています。しかしファイルロックまわりが謎いところがありますな……。

画像ファイルやフォントファイルの拡張子が大文字・小文字どちらでも利用できるようにしました

なぜ大文字拡張子を付けるのか……。主張?

review-pdfmaker: pdfmakerで実行したコマンド情報を出力するようにしました

とりあえず「INFO: 〜」で出してみています。

IDGXMLBuilder: =[notoc]および=[nodisp]をサポートしました

なぜかこのビルダだけ実装を忘れていました。最近制作した書籍でエラーになって気付いたもの。

PDFMaker: psdファイルもコピーするようにしました

コピーはしますが、今のところまだ具体的にTeX PDF内に取り込むようにはしてません。なので、psdしかないとエラーになっちゃうと思います。graphicxpsdというパッケージと、ImageMagickかmacOSのsipsが必要。

具体的なアクションは、次のDebianバージョンでgraphicxpsd入りのTeXLiveが収録されるまで待つ、かもしれません。しかしどっちにしても--shell-escapeを付けないと動かないとなるとちょっと腰が引ける……。

PDFMaker: config.ymlのtexoptionsのデフォルト値を変更してLaTeX実行中に入力待ちにしないようにしました

これまではTeXコンパイル時にエラーになったときに即座に止まっていたのですが、「texoptions: -interaction=nonstopmode -file-line-error」にしたことで、ひとまず無停止で進めてエラーを返却、という挙動にしました。実際、入力待ちにしたところでユーザーにはどうしようもないですし。

LATEXBuilder: LaTeXなどのログメッセージを正常時には出力しないようにしました

これまでpdfmakerを実行するとひたすらビルドログが出ていたのですが、上記のいろいろな出力抑制と併せて、エラー時のみの出力となりました。

debugパラメータがtrueでも何も出さないのは若干わかりにくいかも……とは思いつつ、今の実装ロジックだと抑制有無をするのが難しそうだな(全然別の2つの方法を併記することになる)という印象です。

MARKDOWNBuilder: サポートするコマンドを追加しました

実際Re:VIEWからMarkdownを吐きたい、という人はどれだけいるのかというのはさておき……。dtpインライン命令のコメント挿入、noteなどの囲みやflushrightのdiv表現、sub・sup・u・kw・iconのインライン表現、//noindentのnoindent属性付きp化、かな。

ほとんどMarkdownではなくてHTMLなのではという気もして参ります。

image_finder.rb: シンボリックリンクされたディレクトリをサポートしました

imagesの探索にシンボリックリンクがあると駄目らしい(実ファイル・実ディレクトリを使っているのが普通なので気付かなかった)ので、その修正です。

Rakefileの依存関係にcatalog.ymlなどのファイルを追加しました

「rake」でビルドするときにreファイルだけでなくいろいろなファイルの更新を見てくれるようになりました。

//graph命令の各外部ツールについての説明を追加しました

PlantUMLのサポートを記していたらほかのものもいろいろ扱いが難しいな、ということでgraph命令がサポートしているツールや注意事項などをdoc/format.ja.mdおよびdoc/format.mdにまとめてみました。

@<w>, @<wb>命令の説明を追加しました

前掲のwとwbの説明もdoc/format.ja.mdおよびdoc/format.mdに記載しました。

LaTeXから生成するPDFの圧縮レベルオプション指定(-z 9、最大圧縮)をconfig.ymlのサンプルに記載しました

dvipdfmxで遅い場合は、サイズは大きくなるかもだけど値を小さくしてみると効果があるようです。

dvicommandパラメータの文字列でdvipdfmxクラスオプションを付けるかどうか判定するようにしました

ニュースリリースから漏れてたんですが、#1065の修正。

これまではdvipdfmxを常にドキュメントクラスオプションに明示指定したlayout.tex.erbでしたが、これだとそれは不必要なlualatexなどで困ります。そこで、新しいlayout.tex.erbではドキュメントクラスオプションは完全にconfig.ymlから取るようにしました。とはいえ、このままでは既存のupLaTeX系のプロジェクトでエラーが起きてしまいます。

そこで、config.ymlのdvicommandに「dvipdfmx」が含まれていたら「dvipdfmx」をドキュメントクラスオプションに加える、という挙動にしました(当然ながらすでにdocumentoptionにdvipdfmxがあったら重複しないように何もしません)。

逆に、lualatexなどでdvipdfmxを使いたくない、という場合はお手数ですが「dvicommand: null」などを設定してもらうことになります。

では、Re:VIEW 3.0.0preview1の使用報告、お待ちしております。


2018年07月03日

_ [cooking] 豚肉のソテー



2018年07月17日

_ [cooking] ゴーヤと鶏肉のナンプラー炒め


2018年07月18日

_ [cooking] ソーセージとナスのぺぺロンチーノ


2018年07月19日

_ [cooking] サーモンの刺し身と切り干し大根


2018年07月20日

_ [cooking] パプリカの肉詰め


2018年07月22日

_ [cooking] 今年の梅干しは多分成功


2018年07月23日

_ [travel] バルカン旅行 (1)ベオグラード

夏休みの旅先として、セルビアのベオグラード、クロアチアのドヴロブニクを回ってきた。

もともとはパートナーの希望で「生のバルカンブラスを聞きたい!」ということだったのだが、実は現地ではそんなに流行ってなくて、活動しているアーティストはほぼ海外、集まるのは8月にセルビアのグチャ村で開催されるグチャフェスティバルくらいとのことで、残念ながら生バルカンブラスに立ち会うことはできずじまい。

しかし、旧ユーゴスラビアの複雑さを改めて知るとともに、この地域の豚肉と乳製品の美味さと、海の素晴しさを堪能できた旅でもあった。

photo photo


成田。ほぼ最終の夜便のため、チェックイン後のゴハンどころもほぼ閉店モードで、ギリギリ遅くまでやっていた「おぼんでごはん」で夕食。

photo photo

最近この遠いゲートエリアに行くことが多いな。カタール航空でまずはドーハまで飛ぶ。3-4-3のB777、設備は整っているんだが足元が窮屈で足が痛くなってしまい、うまく眠れなかった。『メイズランナー3』はひどい話だった。『ピーターラビット』は別の意味でひどい話だった。

夕食はうどんが出たけれども空港で取ったのでスキップ。朝食はおかゆが出てわりとよい味。

photo

早朝のドーハ着。バス移動になってしまったのだが、降りた途端にものすごい湿気に見舞われ、カメラもパートナーの眼鏡も結露で真っ白に。海に囲まれていて昼間40度超えなので、朝方に全部霧になって戻ってくるというわけか……。

photo photo

ドーハでお迎えするのは狂気の表情の熊。ヤバい。

photo photo photo photo photo photo photo

ドーハ空港はとても綺麗かつ設計が凝っていて面白い。ターミナル移動のための自動運行の列車が用意されているのはよくあることだが、空港から外に出ることなく完全に建物内で完結して走るのは初めて見た。アトラクションのようで楽しい。

photo photo photo

プラパスのラウンジ。空港中央に位置するので、遠いゲートだとわりと辛い、というか実際遠くてあまり長居もできなかった。切り替え時間帯で食事の種類も少ないので、ディルマーのおいしい紅茶と、豆のスープをいただく程度に。ただ、シャワーを浴びることができたので、だいぶさっぱりできた。

photo photo photo photo photo

予想どおり、ゲートからはバス移動。朝日が出てきてじわじわ暑くなっている(32度。ここから42度まで上がるらしい)。A320は3-3配列で狭く、何もないのでぼんやり寝るしかない。朝食のオムレツと鶏団子はわりとおいしかった。が、狭すぎてトイレに行くのもタイミングが難しい。

4時間ほどでベオグラード到着。入国は特に記入するものもなく、さして並ぶこともなくてすんなり終わり。

というところで突然電話が鳴り、宿泊予定のアパートメントのオーナーから「送迎行けなくなっちゃったんで、タクシーで来てね。20ユーロ内でいけるはずだから!」という連絡。マジか。

荷物エリアにSIMが売っていたけれども、10ユーロはだいぶお高いので、市内で入手することにする。ATMでお金を引き出し、空港にはほかにSIMを買えそうなところは見当たらなかったので、タクシーカウンターでバウチャーを買って(1,800ディナール)アパートへ向かう。セルビアディナールはおおむね1ディナール1円換算でいけるので、物価の換算はしやすい。

40分ほどでベオグラード中心部のアパートに到着し、オーナーに電話して合流。「エレベータの照明が切れちゃってて……」とだいぶオンボロの真っ暗なエレベータの箱でガタピシ上がるのはなかなかのスリルがある。

photo photo photo photo photo photo photo photo

アパートメントDositejeva13。広い2ベッドルームで、最上階、バルコニーからの市街の眺めは良い感じ。共和国広場などの中心から徒歩わずかながら、大通りに面しておらず近くにうるさいナイトクラブもないので静かめ、という好立地。「他の居住者はリタイヤした老人や子持ち家族だから騒ぐな、特にこの時間帯は絶対に静かにせよ」という注意書きがあった。

設備の細部のほうはあまり大事にメンテナンスされているとは言い難く、家具は全部IKEAだったり、お湯や水圧が弱かったり、時計が止まっていたり(電池切れではなくて針が歪んでいた)、ガスでもIHでもなく電熱器だったり、皿が汚いままだったり、とマイナスポイントは多め。ただ宿泊費は安かったので、値段なりということだな。

photo photo

昼食に出ようとしたら天気雨が降ってきた。遠くに見えるは北のドナウ川。

photo photo photo photo photo photo

雨が止んだのでガタピシエレベータに乗って出発。近くのチェバピ屋DRAMA Cevapiに行ってみる。Cevapiはケバブが派生したものでスティック状になっている。バルカンでポピュラーなご飯。ここでは牛肉100%がウリだった。生クリームのカイマク、パプリカペーストのアイバルを付け合わせに。ただ、ここのアイバルはネギが入っていてちょっと怪しい。

スペシャルバーガーのほうはハンバーグのほうを想定していたのだが、ビーフシチューのように柔らかく煮込まれた肉だった。

photo photo photo photo photo photo photo photo photo photo photo

SIMを探しつつベオグラードの街歩き。共和国広場を中心に賑っている。スマートフォンショップを見つけて聞いてみたところ、結局SIMはその辺のキオスクで買えばいい、らしい。キオスクでmtsのSIMを1枚300ディナールで購入した。安い……!

設定は簡単で、刺した後に「*100#」に電話して、表示されるメニューからBONUSを選べばいいだけ(しかしメニューがセルビア語なのでわからず、最初苦戦)。ボーナスの日数は忘れたけれども、我々の滞在中はずっとデータ無料でSMSも送れて便利に使えた。速度は3G。

photo photo photo

夕食はスーパーで買ってきたもので簡単に。ミートボールは鶏団子のアイバルソースで、日本のお弁当の味がする。サラダはエンサラータルサ(マヨネーズあえのジャガイモサラダ)。どちらもまぁまぁの味。

スイカはちょっと水気が少なくパサつき気味、モモはまだ熟してなくて固かった。この日は移動疲れで寝落ち。

photo photo photo photo photo photo

朝ご飯。電熱器は熱くなる/冷えるの時間差が大きくて扱いがなかなか難しい。ベーコン切り落とし(たっぷり入って218ディナール!)を炒め、ミニトマトを加えて。脂がこってりしてうまい。だいぶ固いのでもう少し刻みたかったのだが、包丁が完全なナマクラで大変だった。今度からキッチンばさみを荷物に入れていこうと思った。

サラダはワイルドルッコラ。だいぶ辛い。オイルよりマヨネーズソースをかけたほうがよかったか。

生クリームのカイマクは、パッケージを見る限りではまさかの乳脂肪分70%!?(別の数字かもだが……) 水気の少ないバニラアイスのようで、少し塩気があり、パンにつけてもよし、肉につけてもよし、サラダにつけてもよし、と万能。これはうまい。

photo photo photo

雨上がりのお出かけ。7月上旬のベオグラードは毎日雨がよく降って、晴れれば30度以上になるところが20度ちょいしか上がらず、涼しいというよりもむしろ寒いほど。

photo photo photo photo

レストランが並ぶスカダルリヤ通り。朝なのでまだ人は少ない。夜になったら賑やかになりそうだな、という雰囲気はある。

photo photo

3日間の公共交通パスKartu za tri danaをキオスクで購入。1枚700ディナールでトラム、バス、トロリーバスに乗り放題となる。たまに走っているミニバンは私営なので駄目らしい。

乗り放題でも、トラムやバスの機械にはいちおうピッと当てる必要があり、たまに機械の調子が悪くて前なり後ろなりの別の機械で再チャレンジが必要なことも。検札はそれなりにやってくるらしく、実際滞在中に1回遭遇した。キセルと見なされたら外国人でも容赦なく罰金とか。

地上をゆっくり走る・停車場所が決まっている・市民が使っているという特徴を持つトラムは、その街の生活を知るのに最高の乗り物。

photo photo photo photo photo photo photo photo

やってきたのはニコラ・テスラ博物館。セルビアが生んだ天才発明家で、交流電気、無線、蛍光灯など数々の発明を持ち、100ディナールにも刷られている。

自由見学かと思ったら時間固定のツアーのみだそうで、ほかの人たちと一緒に外でしばし待機。イランからの大人数の家族旅行者に誘われて、割引グループ料金になった(500→300)。

一番の目玉のテスラコイル放電は故障中とのことで残念だったけれども、ほかにもいろいろなデモンストレーションや体験があり、なかなか面白い。ガイドさんが早口で、内容はほとんど追えず想像で補うしかない。最初のムービーを観る場所の冷房が強くて寒かった。

ツアーの後はテスラの家族やテスラ電灯社のゆかりの品の本物だったりレプリカだったりを眺める。さほど大きな展示スペースもないので、あくまでもツアーが中心。そして驚くことにトイレがない。

photo photo

近くの噴水がアクリル板で囲まれていて奇妙に思っていたのだが、もしかしてトイレにされちゃったのでブチ切れたんだろうか……。

photo photo photo photo photo photo

ごはんを探してスラヴィヤ広場周辺をウロウロした末、地元の客が多そうな、よい雰囲気のお店RESTAURANT Slavijaを発見。

小さなカップに入っているのはラキヤ酒。果実蒸留酒で、アルコール度は50%以上の爆弾、イタリアでグラッパと呼ばれるやつ。頼んだのは洋ナシのラキヤ。最初は近くに置いてあるだけでアルコール臭が強烈だが、段々となじんできて、少し梅酒のようで香りよく、おいしい(ただし、本当にチビチビしか飲めない)。

豚肉とトマト、パプリカの煮込みは、塩豚とパプリカをグリルしてから煮込んでいるのかな。豚の旨味と塩味、パプリカの甘味が絶品。マッシュルームのポタージュも、さまざまなキノコのダシとたっぷりの生クリームが絶妙だった。

全面喫煙なのが唯一難点だけれども、そもそもセルビアは喫煙天国で、男女・室内外問わず喫煙しまくっている。JTも日本はもう市場として広がりがないので、今後の市場としてアプローチをかけているらしいとか。

photo photo photo

おいしいものを食べてハッピー元気になったので、トラムに乗り、ショッピングモールUsice Shopping Centerへ。今後の電子タバコ市場を獲らんとiQOSが特設スポットを出していた。期待どおり地下には大きなスーパーが入っていたので、食材などを買い込み。

バスで共和国広場に戻ってInformationで地図を貰おうとするが、示された場所にInformationは見当たらず……。見つけたときには時間も遅く、すでにクローズだった。だいぶ疲れたのと昼が遅めかつ多かったので、夕食はなしに。ワールドカップのクロアチア-ロシア戦の前半1-1まで見て寝る。

(その後2-2までもつれた末、PK戦でクロアチアが進出したので、ドヴロブニクでは準決勝の雰囲気に立ち会えることになることが決定した。うひょー)

バルカン旅行 (2)ベオグラードへ続く。


2018年07月24日

_ [cooking] 紅生姜焼きそばとゴーヤスープ

_ [travel] バルカン旅行 (2)ベオグラード

バルカン旅行 (1)ベオグラードより。

photo photo

朝。やっぱり雨め。シャワーのお湯がなかなか安定してくれなくて難儀する。

朝ご飯はベーコンとマッシュルームのオムレツ……のつもりがフライパンと火加減が微妙でやむなくスクランブルエッグに。ホワイトチーズと一緒に食べるとおいしい。

ソーセージは袋に「袋のまま茹でてもいい」と書いてあったので、そうしてみる。セルビア産の安いソーセージだったが、これが超うまい。袋のまま茹でることで蒸したのと同じ効果が得られ、味が逃げずに閉じこめられる。帰国後に日本で売っているソーセージのパッケージは「調理時は必ず取り出してください」ばかりで、そのまま茹でられるものは見当たらなかった。

photo photo photo photo

共和国広場からバス。行き先や方向によってバスの停留所が違う場所にあったりするのが難しい。Google Mapsはバス停情報はあるけどバス経路は探索できない、Ewayというアプリはなかなか良い経路探索をしてくれるがバス停の位置がいい加減、なので両方を併用しながら確認する必要がある。バスはトラムよりスピードが速く、道が悪いのか運転が悪いのかかなり揺れる。また、意外と停留所間が長いので逃すと痛い目にあう。

photo photo photo photo photo

聖サヴァ大聖堂という正教会系では最大のカテドラル。1935年以来、戦争による中断もあり長年建造中。信者の寄付によって少しずつ作られている。外観はできたけれども中はまだまだ。

photo photo photo photo photo

ここの最大の魅力は、地下。豪華な広間が広がり、「アンダーグラウンド」「シャンデリア」「柱」「装飾」とパートナーの大好物。パートナーが撮影している間、私はほかの何人もの観光客に撮影をお願いされていたり……。ともあれ、美しい空間でmust see。

photo photo photo

ユーゴスラビア内戦時にNATOの爆撃を受けた、軍事省の建物。記憶建造物としてなのか、一部がそのまま残されている。

photo photo photo photo photo photo

レストランZavicaj。鶏肉のスープ、豆とソーセージの煮込み。及第点ではあるが劇的においしいというほどではなく……と微妙なところ。コーヒーについていたお菓子(vanilice)がおいしかった模様。

photo photo photo photo photo photo photo photo photo photo photo

「花の家」と呼ばれるチトーの墓を訪れる。第二次世界大戦でドイツへの抵抗軍・パルチザンを指揮し、戦後は米ソの間でバランスを取りながらユーゴスラビアをまとめた政治家。カリスマでまとめたが故に死後に民族間の地獄の内戦・分裂になってしまったというのが悲しい。

墓は山の上にあり、階段でいくのがしんどい。

photo photo photo photo photo photo photo photo photo photo photo photo

誘導路に進んでチトー記念館へ。日本を含め各国から贈られた民芸品や切手、チトーの共産党時代の品々や趣味のハンティング、ナチスやウスタシャの拷問、あとはその後の分裂に至る民族主義政党のポスターなのかな?と思われる展示が。段差が多くて途中からだいぶ疲れる……。

photo photo

近くのユーゴスラビア博物館は特設展のみオープンとのことで、このときは閉館中。

photo photo photo photo photo photo

共和国広場へ戻るバスから外を眺めていると、素敵な教会が目に入り、途中下車。聖マルコ教会。アーチや色使いは、スペインコルドバのメスキータを彷彿とさせる。中はわりとフツーだけれども、七五三のような家族写真撮影が開催されていた。

photo

共和国広場にてオレンジとレモンのアイスクリームで一息。

photo photo photo photo photo photo photo

今日こそマップをもらうぞと昨日間に合わなかった共和国広場のInformationに入ってみると、「ここでは扱ってないので56番までまっすぐ歩いていってね」というお返事。実際歩いてみたら、商店街通りを1km歩くはめになり、死んだ目になった。カレメグダン公園というベオグラードの北にある大きな城塞公園のすぐそば。ショッピングモールで水を飲んで一休みする。

この辺りはオシャレなカフェが並び、セルビア大正教聖堂もある(ただここはカメラ禁止で中もさほど面白くもなく)。

眼下にはベオグラードの西方、サヴァ川が流れ、夜には喧噪となるであろうダンスパーティー船が停泊中。この時間帯はむしろ演歌っぽいのが流れている。

ゴロゴロ雷が鳴る中、アパートに帰ったところで豪雨。危ない危ない。

photo photo photo photo photo photo photo photo

雨が止んだところで夕方の散歩。カレメグダン公園の丘の城壁跡が中世のような雰囲気を漂わせている。ドナウ川とサヴァ川の分岐点を眺めたりしていると天気がまた怪しい雰囲気に……。

photo photo photo photo photo

日も落ちてきて暗くなってきているので、足早にサヴァ川を下る。だいぶ南に進むと若者向けのコジャレなレストランバーが川沿いに並んでいる。船内でのパーティーも開催されていた。

ここからトラムに乗ることを考えたものの、行こうと考えていたレストランとは全然別の方向になってしまい、むしろ歩いたほうがいい、というナビのお知らせ。

photo photo photo

しかし、歩いた末に目指していたお店は休業日……。ひたすら歩いて疲労困憊。結局、一応候補の1つとしていた別のお店Walterへ。

クリームチーズ・トマト・キュウリのセルビアサラダはシンプルながら美味。チェバピサンドはトッピングを何も付けなかったので、ひたすら肉! 肉! という感じでちょっと食べにくい。玉葱とカイマクを頼むべきだったか。

photo photo

朝食はベーコンとマッシュルーム炒め、目玉焼き。肉も卵もキノコもうまいぞー。

SMSで翌日の空港送迎を依頼しておく。

photo

ゼムンという、ベオグラードとは別の発展をしてきたサヴァ川西岸地域に行ってみることに。廃墟っぽく見えるけど単にこういう剥き出しな構造のマンション。

photo photo

ドナウ川と白鳥おじさん。

photo photo photo

広場まで出ると何やら朝市の準備中。籠に入ったマルコという猫にご挨拶。

photo photo

大きなスイカがごろごろ。プルーンがおいしそう。

photo photo photo

ベオグラードとは屋根など少し雰囲気や文化圏が違う……ということだけれども、やはりヨーロッパではあるので、さほどめぼしいものもないし天気も悪いので引き上げ。

photo photo photo photo

Usice Shopping Centerでおみやげを買った後、お昼はSlavija再訪。今回は完全に昼時なので人もさらに多く……つまりタバコの煙もきつめ……。セルビアにいる限りは逃れようがないね。

今度のラキヤは最もポピュラーなスモモ。慣れてきたので最初からおいしい。セルビアサラダはチーズなしを選んだが、キュウリの味がしっかりしていて美味。

そしてグリル盛り合わせは……半端ないな。肉をベーコンで巻く時点で意味がわからないがうまい。ありがとうお肉フォーエバー。ソーセージもやはりうまい。

photo photo photo photo

北東側はムスリムが集まっているのか、モスクもある。トルコ料理屋でバグラワを買いたかったのだけど売り切れで次のができるまではだいぶ時間がかかるとのこと。代わりのパイ菓子を買って戻る。

photo photo

また雨が降ってきた。アパートで紅茶とトルコ菓子。あんずの餡で、あまり甘くなく酸っぱい。

photo photo photo photo photo photo

雨が止んだ。バルコニーから見える風呂屋の煙突みたいなのが気になって行ってみたのだが、スカダルリヤ通りの建物に囲まれていることはわかったものの、近づくことはできなかった。なんだったんだろう……。

ベオグラードは落書きは多いけれども、別段治安が悪いというわけでもない。危なさはまったく感じなかった。

photo photo photo photo photo

ベオグラード最後の夕食だけれども、セルビア料理の肉やパンの基調はだいたい同じなので、さすがに少々飽きてきた。イタリア料理のEtalianへ。

カプレーゼはバジルがおいしかった。トマトの枚数と同じくらいバジルがほしかったよ……。ボロネーゼソースのタリアッテレ、きのこのスパゲッティは、どちらも「あと1分だけでも茹で時間を追加してくれればアルデンテになるのに……」と感じる固さで惜しかった。ソースの味は悪くなかったんだけど。外の吹きさらしのテーブル席は夜になるとだいぶ寒い。

photo photo photo photo photo photo photo photo

食後の散歩。

photo photo photo photo photo

夜のスカダルリヤ通りに行ってみたら、「ここにいたのか!」というくらい観光客密度100%だった(ほかで見たのは国立博物館の行列くらい)。レストランを回るジプシーミュージック系のライブミュージシャンも多い。

photo photo photo photo

夜のベオグラード。共和国広場やミハイロ通りなど、本来はとてもエネルギッシュで賑やからしいのだけれども、今回の滞在中は雨がちだったせいかその辺りを歩いても喧噪には遠い静かな印象だった。

photo photo

朝ご飯。生ハムは燻製の香りが強くて美味。モモも熟しておいしい。

photo

近年まれに見る爽快な天気じゃないですかー。もう数日早くこれが見たかった……

オーナー旦那さんが送迎としてやってくる。夫婦で子育てしながら副業としてアパートメント経営をしているらしい。「ワールドカップのジャパンチーム、(ベルギー戦)すごかったねー」とか。本業は土地の測量士で、「日本語で何ていうんだ」「ソクリョウシ」「ソクジョーシ?」「ノーノー、ソクリョーシ」と発音講座。「リョーシ」は発音しづらいらしい。

photo photo

ベオグラード空港はちんまりした空港。セルビア航空のカウンターが開いたので荷物を預け入れ、出国。

photo photo

ここのラウンジはとてもよかった。落ちついていて、ラキヤもあるし、キノコのピラフ、マヨネーズソースのペンネ、オリーブ、と料理がうまい(スープは微妙だった)。

photo photo

ベオグラード-ドヴロブニク間はエアセルビアで1時間のフライト。小さなATR-72で飛ぶ。

搭乗開始は定刻どおりだったが、乗ったバスの扉が閉まらず、代車待ちで20分遅延に……。しかもそのバスが向かった先は50mも行かない駐機場所で、これには皆も苦笑い。絶対歩いたほうが早いけど、保安上しょうがないよね。2-2の狭い座席で、頭上手荷物もかなり小さなサイズに限られる。皆ドヴロブニクにバカンスかな。

バルカン旅行 (3)ドヴロブニク へ続く。

_ [cooking] セルビア風豚肉とパプリカのトマト煮込み


2018年07月25日

_ [travel] バルカン旅行 (3)ドヴロブニク

バルカン旅行 (2)ベオグラードより。

photo photo photo

1時間のフライトは20分遅れで到着。ドヴロブニクの入国はスムーズで、ちょっと行列ができてきたかなと思うとすぐスタッフが増員されて、余裕がある印象。ATMでお金(クーナ)を引き出し。

頼んでいた送迎の運転手は熊のように大きく、車も2人には無駄に大きかった。最初ドヴロブニクの同じ名前の宿と間違えていたようで、旧市街真ん前で降ろされそうになってしまい、いろいろ確認して正しいところへ。帰りの送迎もどう?と聞かれ、お願いしておく。

ベオグラードもドヴロブニクも空港-市内間のバスはあるにはあるのだが、時間がかかるのと、停留所が宿との位置関係で大荷物を持った状態で動くに不向きという背景があり、送迎の額もタクシーに比べてさほど盛っているわけではない。

photo photo photo photo

アパートメントCity Break Apartmentに到着。こちらはベオグラードのアパートメントと比較するのはだいぶ失礼なほどに充実。値段も倍なので当たり前か……。綺麗でキッチン設備が整っており(こちらはIH)、給湯器もパワー十分。便利な調味料がストックされているし、布巾やタオルもたくさんある。

photo

そしてバルコニーからはアドリア海。ギリシャみたいだ。

有名な旧市街からは少し離れるが、ベルビュービーチという小さなビーチのすぐそば、評判のいいレストランやスーパーも至近で、旧市街などへのアクセスもしやすい。ただ、バス通りに面しているため、車やバイクの音はだいぶ大きい。

photo photo photo photo photo

建物自体はそれなりに年数が経っているようだが、リノベーションされている。同じように旅行者向けアパートメントルームにしているところもあれば、居住しているところもあるようだ。隣の部屋はバルコニーに自家製ラキヤの瓶が置いてあった。

真っ青な快晴の中、海沿いを歩いてバス停まで。パン屋がすぐそばにある。スーパーはかなり小さいのが1つ。眼下に見える海の誘惑が強い(泳いでいる人がいる)。

photo photo photo photo photo

到着早々ではあるのだけれども、これから旧市街は混む曜日周り(大きなクルーズフェリーが入港すると、7,000人以上がどっと旧市街になだれ込む)なので、この日のうちに旧市街を回っておくことにした。

キオスクでバスの10回券(1回12クーナ。1クーナ18円)を購入し、旧市街に到着。本当にみっちりと観光客だらけだー。

旧市街はもともと要塞でぐるりと石造りの壁に囲まれており、戦争で城壁や内部が大きく損壊したのを今も修復し続けている。

ピレ門という一番有名な門から中へ。この門は閉まることはなく、旧市街に入ること自体にお金は取られない。

photo photo photo photo photo photo photo photo photo photo

修道院、宮殿、教会など峻厳な建物が存在感を示し、細い路地にはレストランや雑貨屋が軒を並べる。なお、レストランなどの料金は滅茶苦茶高い……。

石畳がピカピカなのが印象的。

SIMを探したのだが売っているところが見当たらず。後で調べるとキオスクでよかったらしいが、滞在日数とあまり遠出しないことからアパートのWiFiとオフラインマップのMaps.meで十分と判断してSIM購入は見送ることにした。

photo photo photo

旧市街はすりばち状になっており、城壁付近は急激にせり上がった丘になっている。階段が急で大変なのに、登ってみた南側には居住している杖をついたご老人もよく見かけた。買い物やゴミ出しはどうやっているんだろう……。

photo photo photo photo photo photo photo photo photo photo

壁に囲まれているので海はあまり見えないけれども、たまにぽっかり空いているところもある。 猫がたくさん。デデッポーもたくさん。

photo photo photo photo photo photo photo

高低・遠近が組み合わさり、フォトジェニックな街。そのぶん段差や回り道が多いので、歩くのはけっこう大変! まじめに見回っていると1日必要そう。

photo photo photo photo photo

城壁に登ることもできるが、150クーナ、2,700円。混んでいるし疲れているので挑戦はやめておくことにする。

photo photo

大きめのスーパーで買い物。物価の高いドヴロブニクなので、全面的に自炊の構え。野菜の計り売りって少量の料理を作るときに本当に便利なので、日本でもやってくれないだろうか。

photo photo

ワールドカップのフランス・ベルギー戦を見ながら夕食作り。鳥むね肉のピカタ、パプリカの炒め煮、マッシュルームとじゃがいものスープ。バターが安いのはいいことだ。パンも高級めなところで買ってみたらおいしかった。

photo

旧市街でお祭りがあったのか、花火が上がっていた。しかも23時頃。

photo photo

朝の海。美しい。

photo

朝食を作る。昨日のスープにカイマクを入れてみたらとてもおいしくなった。

ソーセージはパプリカ風味。トマトとパルメザンチーズのサラダもいける。

食後はベルビュービーチで海遊び。行き方がGoogleマップではさっぱりわからないのだが、Maps.meだと細かく載っていてわかりやすい。ビーチは存外に素晴しいところだった。海遊びはほどほどの予定だったのだけれども、毎日通うことが約束される。写真は後出。

photo photo photo photo photo photo photo photo

遅めの昼食は近くのレストランカフェMagellanへ。Light Lunchというコースがあったのでこれを頼んでみる。

クロアチア白ワイン、コーヒー。パンはヒマワリの種みたいなのが入っていておいしい。

カリフラワーのスープが絶品中の絶品。これは真似したい、がカイマクのレベルの生クリームがないと無理そう……。

ツナのゴマ風味とクスクスサラダ、ツナは固めでゴマあえという最初不思議な味だったものの、慣れてくるとおいしく感じるようになった。クスクスはミントなどが入った中東風でとても良い。

鶏ソテーのデミグラスソースは、鷄もおいしいがマッシュポテトが特においしかった。これも生クリームの差か……。

デザートの桃とアイスはおいしかったものの、すでにお腹はだいぶ重くて目を白黒させながら平らげる羽目になった。

お値段は看板に書いてあったのよりも税金(消費税25%!)だのチップのいろいろとかかって、400クーナ、7,200円ナリ。セルビアからくると「高!」となるけれども、白金でランチとかいうとそのくらいかな、という気もする。なお、旧市街だと、もっと格下のレストランでも倍くらいするという恐しい話があるようだ。

外食で安くあげるならケバブなりパンなりを買って道や宿で食べる、ということになりそう。実際、テイクアウェイのドネルケバブ屋さんが近くにあり、階段で食している旅行者を見かけた。

photo photo photo photo photo photo photo photo photo photo photo photo

食後にカメラを持ってベルビュービーチの撮影。日がちょっとかげり気味になって、昼間ほど青さはなくなってしまったものの、それでも美しい。岩場が多いことで変に開発されすぎず、中心部から外れているので人も多くなく、隠れ家のように適度なサイズ感。

そして岩場には魚の群れも多く、シュノーケルを持っていったのは大正解だった。直前に「魚も少しいるらしいよ」という断片的な情報だけで普通の水中メガネと交換で入れた荷物(シュノーケルとグラスでだいぶ圧迫)だったけれども大活躍。

このままこの環境が守られるといいなぁ。囲われているのは水球のコートっぽい。旧ユーゴ圏では水球やバスケ、そしてサッカーが人気スポーツの模様。

photo photo

アパートの庭を根城にしている猫たち。

photo photo photo photo photo

買い物。この日はいよいよワールドカップ準決勝、クロアチア対イングランドで、紅白チェッカー模様のクロアチア国旗を掲げたり国旗模様の服を着た人たちが街中にたくさんいる。こんなに旅行者以外の在住の人がいたのかとちょっと驚き。

せっかくなので我々もテレビで観戦。アパート周辺あちこちからも同じ音声が聞こえてくる。

国歌斉唱のときはさぞかし盛り上がるのかと思ったけど、トイレタイムなどにされていたようで静かだった。意外。

photo photo photo photo

試合はゲキ熱! イングランドに先制されてうめき声、そこからクロアチアが同点弾。バルコニーにTVを出して観戦していた隣の家では、おっちゃんが発煙筒を掲げて喜びを表していた。

そして延長戦で逆転、どっかで花火が上がる。そのまま守り切ってついに勝利!!

photo photo photo

道路はピーピーパーパーと大騒ぎ。正月初日の出暴走ですか、というくらいのハコ乗り旗振り、バスもタクシーも一緒に喜びのクラクションを鳴らし、「こうしちゃいられねぇ、さっそく○○に集合だ!」といわんばかり。動画で撮っておけばよかったな。

photo photo

ピレ門前あたりは一晩中祭りだろうなーと思いつつ、さすがに歩いていくのは遠いし、ハイになった車やバイクに突っ込まれるかもしれないし、バスは道路が大変そうだし、ということでほどほどに夜景と喧噪を楽しんで戻る。

バルカン旅行 (4)ドヴロブニク へ続く。


2018年07月26日

_ [travel] バルカン旅行 (4)ドヴロブニク

バルカン旅行 (3)ドヴロブニクより。

photo

朝。マッシュルームと皮付きベーコン、紫玉葱をバターで炒める。素材からおいしいなぁ。

photo photo photo photo photo photo photo photo photo photo

泳ぐ前に朝のベルビュービーチを撮影。やはり素晴しい。前日に比べると波はあるが水温がやや高めで、シュノーケルにぴったり。遊んだ遊んだ。

photo

お昼はピッツァ屋に行ったものの、満席で入れず。仕方がないのでパン屋でパイ。あまり甘くない。

photo
ピッツァが食えず悔しいので、「最強のカルボナーラ」を作ることにした。クロアチアの濃い味のベーコンと卵、圧倒的密度の生クリーム、イタリア産パルメザンチーズ、クロアチア白ワイン、そして生フィトチーネ。うむ、これぞカルボナーラだ。卵の味が違うなー。

photo photo photo photo photo photo photo photo

ベルビュービーチが素晴しかったので、ほかのビーチも同じくらい素晴しいのかな?ということでバスに乗ってバビンクックという高級なホテルが点在する北西エリアへ行ってみる。

ビーチはこの公園を抜けていけ、とな。

photo photo photo photo

ビーチは見えるものの、どこもホテル系のプライベートビーチばかりで全然近寄れない。

photo photo photo photo photo

結局パブリックなところとしては北のカバナビーチまで歩かされることになった。ズンドコ音を響かせるカフェと、有料のテントにパラソル、造成された浜。これは「量産型ビーチ」だ……。何の面白みもない。人が多いせいか、海もさして綺麗でもなく。

photo photo photo photo

バスで移動して西側ラパド地区のビーチエリア。新ホテル街として今開発が進んでいる。しかし、こちらもまた海岸沿いにサンセット系カフェが並び、ビーチは芋洗い……。これも量産型だ。

photo photo photo photo

岩場の水は綺麗だし、夕暮れは美しいけれどもねー。バスに乗って引き上げ。結局ベルビュービーチ最高では!?という結論だった。ラパド地区は宿泊地の候補だったので、こっちにしなくてよかった。

photo

夜ご飯。ブレクというパイを買ってきた。1つはほうれん草とチーズ、もう1つはチーズのみ。ラードで焼いたパイみたいで、最初はギョウザのような食感と風味を覚えた。1つでけっこうな腹持ちがある。

マッシュルームのオムレツ、鷄とジャガイモのスープはどちらも良い出来。

photo photo

朝。目玉焼きとパプリカ炒め。卵がやはりうまい。

photo photo

ドヴロブニクの最後のフリー日はどうしようかと考えたたけれども、「旧市街の城壁歩きをせずにドヴロブニクを語るなかれ」だそうなので、朝一番の空いているときを狙うことにした。

photo

アイス屋から覗く名状しがたきもの。ああ!窓に!窓に!

photo photo photo photo

朝8時なのでピレ門もガラガラ。しかしトイレも開いてないのが地味に困る。公衆トイレはあるが、コインしか受け付けない。

photo photo

1人150クーナの城壁登りチケットを買い、上へ。ここから1周2km、一方通行の城壁巡り開始。

photo photo photo photo photo photo photo photo

おぉ、これは楽しいぞ。空いていてまだ暑くない時間帯なので、さくさく歩ける(これをピーク時に灼熱渋滞は死にそう……)。

赤い屋根、青いアドリア海。洗濯物や学校がこの中に普通の生活があることを主張する。

photo photo photo photo photo photo photo photo photo photo photo photo photo photo

チェックポイントの半周を越え、1周。途中のトイレは壊れていて使えず。

photo photo photo photo photo photo photo

スタート地点のほうを見るとじわじわ混みつつある。最後にミンチェタ要塞の高台から眺めてゴール。かなり撮影して回ったものの、終わってみれば70分程度だったので相当空いていたようだ。

photo photo photo photo photo

宿に戻り、ランチは前日に入れなかったピッツァ屋Vita Bellaへ。早い時間なので今度はさすがにガラガラ。

チーズ盛りとペパロニのハーフハーフのピッツァ、ホワイトチーズもりもりのグリークサラダ。まぁまぁおいしかったけれども、ピッツァは期待をかけすぎたかもしれない(これだと自分で作るほうがいいかな……というところ)。Tripadvisorではバジェットクラスとのお店だが、飲み物込み200クーナ+チップで4,000円弱なので、だいぶお高い。

photo photo photo

おみやげを買いにスーパーへ。カイマクを持って帰りたい……(無理)。

photo photo

ドヴロブニク最後の晩餐。豚肉ソテーをビーフストロガノフ風に生クリームで煮込み。ブロッコリーのほうは蒸したくらいでは全然固くてダメだったので茹で直してリカバリー。

photo

朝ご飯。サラミとパルミジャーノ、きゅうりとミニトマトのサラダ。皮が固くて中身が肉厚のきゅうり、日本でも普及しないかな。

photo photo photo photo photo

チェックアウトの時間まで少しあったので、パートナーは最後の海の撮影に。入りてー。

photo photo

部屋にお別れ。とてもいいところだった。

photo photo photo

送迎の車に乗って空港へ。ドライバーのほかにその同僚も乗っていて「クロアチア勝利は最高だったよ! 次勝って優勝したいね!」とのこと。しかしベオグラードでもそうだったが、「talk me!」と言われても、知らない人といきなり世間話するって日本語でも困るだいぶ高レベルのコミュ力要求なんだよ……。

空港の外には猪みたいな犬がおった。

photo

ラウンジはこじんまり。パンがけっこうおいしい。

photo photo

ドヴロブニクからまずはイタリアローマに飛び、そこからドーハ、そして成田と飛ぶ。リスク要因になるので乗り継ぎ2回は避けたかったのだが、飛んでいないものは仕方がない。

ドヴロブニク-ローマ間はLCCのVueling。「Vueling…スペイン…セビーリャからバルセロナ…機材トラブル…大幅遅延…パートナーの体調悪化…」とトラウマが表出したが、普通に時間通りに搭乗。一応カタール航空のコードシェア便なので、荷物は成田までスルーだし、乗り継げなかったとしてもカタール航空になんとかしてもらえる。ただVuelingではローマから先の搭乗券は発券できないので、ローマのカタール航空のカウンターを探して発券してもらう必要がある。

photo photo photo

A320、3-3席。狭いけど短距離なので。イタリアのカカトから入りローマへ。

photo photo photo photo photo

ローマフィウミチーノ空港着。カタール航空のトランスファーカウンターがわからなかったのだけれども、空港中央のアリタリアのカウンターで尋ね、遠くのEゲートへ移動。カタール航空カウンターで無事に成田へのボーディングパスを入手する。

パートナーはコーヒーショップ、私はラウンジへ。スプマンテは大変よかったけれどパンがおいしくなかった。大量に取ったもののほぼ全部残してしまっていた人がいたけれど、さもありなん……。チーズとハムだけにしておくんだった。

photo photo

カタール航空で一路ドーハへ。B777、3-4-3席。『パシフィックリムUPRISING』はけっこう面白かった。『Welcome to Lebanon』は微妙。食事のペンネアラビアータが美味しかった。さすがイタリア。

photo photo photo photo photo photo photo photo photo

ドーハ着。今度はボーディングブリッジだった、やったー。

やはり絵になる空港。バグラワも買っておく。

photo

行きと同じラウンジに行ってみると、深夜にもかかわらずめちゃ混み(むしろこの時間に飛行機が集中して混むのか)。別ラウンジのバウチャーを受け取る。

入ったラウンジはファーストクラス系が使うものらしく、どんなすごいところなのだろう……とワクワクしていったものの、ちょっと高級、なのかな?? というところだった。ラウンジに集中して混みすぎていたせいもあるかも。お酒や料理は少しだけ高級そうではあったが、機内食がたまっていたので紅茶をいただくだけで終了。

photo

成田行きのゲート。一度入ると洗面所がなく、パートナーによると出るのはいろいろ面倒があったらしい。

成田便はまたB777、3-4-3列。同じシステムだけれども、日本便のほうがローマ便よりもタッチスクリーンの質が良い。

『Commuter』を観たあと、なぜかインド映画を連続で『バーフバリI』と『BANG BANG』。朝食は蕎麦と牛肉煮込みでまぁまぁ、昼食はクレープでおいしかった。ペンネもそうだったが、つまりベジタリアンメニューだとおいしいんだろうか?

成田には定刻着。行きは指認証だったのに、帰りは顔認証が導入されてて驚き。ほとんどチェックしてるかどうかわからないくらいの状態であっさり通ったけど、これで本当に認証できちゃうんだ。

帰宅してからは遅いので早く寝ればよかったものの、ちょうどワールドカップ決勝のクロアチア-フランス戦で、時差ボケもあって2人でしっかり観てしまった。負けてしまったのは残念!

 

ベオグラード・ドヴロブニクそれぞれの良さを堪能できた旅だった。どちらの国も英語はよく通じるし、わりと聞き取りやすい気がする(観光客慣れしているということはありそう)。

肉やその加工品、乳製品、卵の品質の良さはとてもいい。自炊派には最高の環境。アパートメントはいっぱいあるし、毎日洗濯機で洗濯できるというのはホテルでできない贅沢(ただ今回はどちらも乾燥機は付いていなかった)。

ベオグラードのほうは、親日国セルビアとかお節介すぎるほどお節介、という感じはわからなかった。田舎のほうに行ったらまた違うのかも。晴れの中もう少し賑やかな風景も見られればよかったが、それはそれで暑くて熱射病になっていたかもしれない。時間があればもう少し回りたいところが多かったかな。

ドヴロブニクのほうはさすが世界から観光客が集まり、リピーターも多いだけのことはあった。旧市街を楽しむには自らの足で進むしかないので、歳を重ねて足腰が悪くなる前に行ったほうがよいところかなと思う(さらに旧市街内の宿に泊まるとなると、スーツケースを持って階段を延々登る羽目になる)。

そしてトーキョーの気温と湿度はタイやシンガポールを超えるレベルでマジ死ぬ日々だった。今日はちょっとベオグラードっぽい?

_ [cooking] 親子丼


2018年07月27日

_ [cooking] ロモサルタードを羊で作るとロモじゃなくてなんて言うんだろ


2018年07月28日

_ [debian] secure apt、再掲

常時SSL化が普及する中、Chromeの新しいバージョンでhttpsでないと「保護されていない」と怒られることが多くなったそうで、そういえばftp.jp.debian.orgなどのDebianのミラーで「保護されていない」と出ると心配になる人が多そうだな、と思った。

Debianのミラーは商業CDNで配布されているわけではなく、有志のHTTP/FTPサーバで運用されている都合上、IPアドレスもサーバ設定もバラバラで、すべてをDebianプロジェクトのメンバーが直接管理しているわけでもない。そのため、「Let's Encrypt使えばいいじゃん」と簡単にはいかないし、おそらくTLSの仕組み的にもできないのではと思う。

そこで、どうDebianではパッケージの整合性を保護しているか、ということについて2006年に別の日記に書いていた古い記事を拾い出して書き直してみた。以下はJoey HessがDebian Wikiに記したSecureAPTを参考にしている。

まずは基本概念から。Debianミラーには大量のパッケージがあるが、悪意を持つ者によって改変されるのを防ぐ必要がある。信頼できる組織のミラーを使うというのも1つだが、Debianプロジェクトがすべてのミラーに目を光らせるというわけにもいかない。

Debianの各パッケージは、パッケージメンテナがビルドした時点で、そのメタ情報ファイルにパッケージ内のファイルのMD5ハッシュ値が記載される。MD5自体には同じ値で中身が異なる「コリジョン」が発見されている弱いアルゴリズムだが、メンテナが悪意を持っているのでもない限りはパッケージの範囲内でコリジョンが起こることはまずないので、ここでは特に問題にならない。

このメタ情報ファイルと展開したファイルを比較すれば、パッケージファイルの破損、あるいは何らかの不正加工は発見できる(パッケージインストール時にこれが行われる)。インストールしたときに/var/lib/dpkg/info/に「〜.md5sums」というファイルがあるはずだ。たとえばapt.md5sumsは以下のようになる。

 71b58009120db0e61412f7610f27e8db  lib/systemd/system/apt-daily-upgrade.service
 6f1973de70bf3594436cc1a68adc441b  lib/systemd/system/apt-daily-upgrade.timer
 563ce75e507e1f6cc3f413e285651af5  lib/systemd/system/apt-daily.service
 57b964b4d70e49baf77ca7c971358acf  lib/systemd/system/apt-daily.timer
 724928d79215b0e199085bbcc04ddb4d  usr/bin/apt
 ...

次に、Packagesファイルがある。これは、大雑把に言えば、各パッケージのメタ情報ファイル内の情報(パッケージ名など)とパッケージファイル(.deb)のハッシュ値を合わせ、一覧にしてローカル側のデータベースとして使えるようにしたものだ(ソース用はSources)。通常は圧縮されているが「dists/{RELEASE}/{main/contrib/non-free}/binary-{ARCH}/Packages」という単位で存在する。

Packagesファイルは基幹となるデータベースのため、ハッシュ値に脆弱なMD5だけでは甚だ心許ない。そこで、異なるアルゴリズムでのハッシュ値も記載されている(通常ミラー側はMD5とSHA256、security.debian.orgはMD5、SHA1、SHA256)。

 Package: apt
 Version: 1.4.8
 Installed-Size: 3539
  ...
 Size: 1231676
 MD5sum: 4963240f23156b2dda3affc9c0d416a3
 SHA256: bc319a3abaf98d76e7e13ac97ab0ee7c238a48e2d4ab85524be8b10cfd23d50d

apt-get updateを実行すると、このPackagesがローカルにダウンロードされ、APTデータベースによって参照されるようになる。このPackagesが「信頼できるならば」、その情報にある各パッケージのハッシュ値をもとにパッケージが「信頼できる」ことを証明できる。

次に登場するのがReleaseファイルだ。実はReleaseファイルには2種あり、dists/{RELEASE}/Releaseと、dists/{RELEASE}/{main/contrib/non-free}/binary-{ARCH}/Releaseがある。後者はそのアーカイブがstable/testing/unstableのうちどれかやリリースバージョンなどが書かれているだけだが、前者はこれ以外に配下にあるPackagesファイル(圧縮したものやSources/Releaseも含む)のハッシュ値(Packages同様に通常ミラーではMD5とSHA256、security.debian.orgではMD5、SHA1、SHA256)とサイズを記述している。だんだんややこしくなってきたが、このReleaseファイルが「信頼できるならば」、Packagesファイルを「信頼でき」、その中に書かれているパッケージも「信頼できる」ということになるわけだ。

 Origin: Debian
 Label: Debian
 Suite: stable
 Version: 9.4
 Codename: stretch
 Changelogs: http://metadata.ftp-master.debian.org/changelogs/@CHANGEPATH@_change
 log
 Date: Sat, 10 Mar 2018 10:21:19 UTC
 Acquire-By-Hash: yes
 Architectures: amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el s390x
 Components: main contrib non-free
 Description: Debian 9.4 Released 10 March 2018
 MD5Sum:
  00216699f7cd377bd5532d38c2c4a390  1181375 contrib/Contents-amd64
  ...
  4c8923dcd9d71154f8eb067edcd2ec25  7121632 main/binary-amd64/Packages.xz
  ...
 SHA256:
  ...
  987a992a471a92af2bcdff2447e7604203d8b8568289edd25c34adb0486140a6  7121632 main/binary-amd64/Packages.xz

ということで、ようやくテーマであるRelase.gpgにたどりついた。dists/{RELEASE}/Release.gpgファイルは、Debianの自動FTPマネージャのGnuPG(PGP鍵暗号方式の実装の1つ)の秘密鍵を使って、dists/{RELEASE}/Releaseファイルを電子署名した結果値だ。

このGnuPG秘密鍵は、DebianプロジェクトのFTP管理者によって作成されたもので、Debianプロジェクトの極めて限定的なアクセス環境(ごく一部の選ばれたDebianプロジェクトメンバーだけがアクセスできる)の下、純粋にRelaseファイル署名のためだけに使われている。この秘密鍵に対応するGnuPG公開鍵、Releaseファイル、Release.gpgファイルの3つが揃っていれば、Releaseファイルが改ざんの行われていない、正当にFTPマネージャに署名されたものであることを証明できる。署名時から1ビットでもReleaseファイルが加工されていれば、Release.gpgの署名に対して不整合となり、エラーになる。Release.gpgを加工したらGnuPG公開鍵での署名検証に失敗し、やはりエラーとなる。

さて、残るはGnuPG公開鍵の信頼性である。ここが一番難しいところで、これが破綻したらここまでに築いてきたものが全部ダメになってしまう。公開鍵は、ftp-master.debian.org(ここはhttpsだ!)のWebサイト、およびPGPサーバーで配布されている(Stretch向けはE0B11894F66AEC98)。Debianプロジェクトの(本当に信頼できる)FTP管理者に直に話して、鍵が本物かどうか聞くのがベストではあるけれども、それは難しいので、こちらにせいぜいできるのはそのGnuPG鍵に付けられているsign(「署名」と語が似てしまうけど「この鍵は確かにこの人のものですよ」ということを示すもの。対面で会う機会にキーサインパーティなどをやる目的はこれで、友人関係を表すものではない)を見て、DebianプロジェクトFTP管理者のものだからまぁOKだろう、という判断になるだろう。自分で試すならこんな感じ。

 $ gpg --keyserver pgp.mit.edu --recv-keys E0B11894F66AEC98 ←鍵をPGPサーバーから取り込み
 gpg: 鍵E0B11894F66AEC98: 公開鍵"Debian Archive Automatic Signing Key (9/stretch) <ftpmaster@debian.org>"をインポートしました
 gpg: marginals needed: 3  completes needed: 1  trust model: classic
 gpg: 注意: アルゴリズム MD5 を用いた署名は拒否されました
 gpg: 深さ: 0  有効性:   1  署名: 149  信用: 0-, 0q, 0n, 0m, 0f, 1u
 gpg: 深さ: 1  有効性: 149  署名: 530  信用: 149-, 0q, 0n, 0m, 0f, 0u
 gpg: 次回の信用データベース検査は、2019-03-08です
 gpg:           処理数の合計: 1
 gpg:             インポート: 1

 $ gpg --list-sigs E0B11894F66AEC98 ←signを見てみる
 elemental{kmuto}% gpg --list-sigs E0B11894F66AEC98
 pub   rsa4096 2017-05-22 [SC] [有効期限: 2025-05-20]
       E1CF20DDFFE4B89E802658F1E0B11894F66AEC98
 sig    R     E0B11894F66AEC98 2017-05-22  Debian Archive Automatic Signing Key (9/stretch) <ftpmaster@debian.org>
 sig    R     E0B11894F66AEC98 2017-05-22  Debian Archive Automatic Signing Key (9/stretch) <ftpmaster@debian.org>
 sig    R     E0B11894F66AEC98 2017-05-22  Debian Archive Automatic Signing Key (9/stretch) <ftpmaster@debian.org>
 uid           [  不明  ] Debian Archive Automatic Signing Key (9/stretch) <ftpmaster@debian.org>
 sig          E7F6F29ECED41113 2018-06-08  [ユーザIDが見つかりません]
 sig          F14E580128030B19 2018-03-07  [ユーザIDが見つかりません]
 sig          11B4E5FF15B0FD82 2017-05-24  [ユーザIDが見つかりません]
 sig 3        7638D0442B90D010 2017-05-25  [ユーザIDが見つかりません]
 sig 3        9D6D8F6BC857C906 2017-05-25  [ユーザIDが見つかりません]
 sig          25ADF665CD2D5AEB 2017-08-05  [ユーザIDが見つかりません]
 sig          BB0E4759B633D17C 2018-02-18  [ユーザIDが見つかりません]
 sig          B0FBE415662EF139 2017-08-04  [ユーザIDが見つかりません]
 sig          E553E8B2DB568A08 2018-03-26  [ユーザIDが見つかりません]
 sig          BC372252CA1CF964 2017-05-23  [ユーザIDが見つかりません]
 sig 3        E0B11894F66AEC98 2017-05-22  Debian Archive Automatic Signing Key (9/stretch) <ftpmaster@debian.org>
 sig     P    DB16CF5BB12525C4 2017-05-23  [ユーザIDが見つかりません]
 sub   rsa4096 2017-05-22 [S] [有効期限: 2025-05-20]
 sig          E0B11894F66AEC98 2017-05-22  Debian Archive Automatic Signing Key (9/stretch) <ftpmaster@debian.org>

 $ gpg --keyserver keyring.debian.org --recv-keys BC372252CA1CF964 ←署名者の鍵をDebianの鍵サーバ(Debianプロジェクトの人のみが登録)から1つ取ってきてみる
 pg: 鍵BC372252CA1CF964: 公開鍵"Ansgar Burchardt <ansgar@debian.org>"をインポートしました
 gpg: marginals needed: 3  completes needed: 1  trust model: classic
 gpg: 注意: アルゴリズム MD5 を用いた署名は拒否されました
 gpg: 深さ: 0  有効性:   1  署名: 149  信用: 0-, 0q, 0n, 0m, 0f, 1u
 gpg: 深さ: 1  有効性: 149  署名: 531  信用: 149-, 0q, 0n, 0m, 0f, 0u
 gpg: 次回の信用データベース検査は、2019-03-08です
 gpg:           処理数の合計: 1
 gpg:             インポート: 1

 $ gpg --list-sigs BC372252CA1CF964 ←FTPマスターの1人、Ansgarの鍵に署名している人を確認
 pub   rsa4096 2009-05-12 [SC] [有効期限: 2019-05-23]
       80E976F14A508A48E9CA3FE9BC372252CA1CF964
 uid           [ 未定義 ] Ansgar Burchardt <ansgar@debian.org>
 sig          DBBE9D4D99D2A004 2011-07-23  [ユーザIDが見つかりません]
  ...
 sig          3A936196C095D941 2011-07-27  Bdale Garbee <bdale@gag.com>
  ...
 sig 3        587979573442684E 2011-07-28  Steve McIntyre <steve@einval.com>
  ...
 sig          5D328D082AAAB140 2011-08-07  Hideki Yamane (private) <henrich@iijmio-mail.jp>
  ...
 sig          32247FBB40AD1FA6 2011-11-22  Nobuhiro Iwamatsu <iwamatsu@debian.org>
  ...
 sig          00B45EBD4CA7BABE 2015-09-04  NIIBE Yutaka <gniibe@fsij.org>
  ...
 (知っている人たちがちゃんと署名しているので信頼できそうだ!)

まとめると、FTP GnuPG公開鍵を信頼できる→Release.gpg署名を検証できる→Releaseファイルを信頼できる→Packages/Sourcesを信頼できる→Packagesのハッシュ値を信頼できる→パッケージを信頼できる→パッケージ内のファイルを信頼できる、となる。

secure APT

やれやれ。ともかく、APTでの各パッケージの正当性の検証はハッシュ値とGnuPG署名にある、ということだ。

なお、apt-getなどは内部でGnuPG鍵を管理している(/etc/apt/trusted.gpg、/etc/apt/trusted.gpg.d/)が、制御するフロントエンドがapt-keyだ。

 $ apt-key list
 /etc/apt/trusted.gpg
 --------------------
 /etc/apt/trusted.gpg.d/debian-archive-stretch-automatic.gpg
 -----------------------------------------------------------
 pub   rsa4096 2017-05-22 [SC] [有効期限: 2025-05-20]
       E1CF 20DD FFE4 B89E 8026  58F1 E0B1 1894 F66A EC98
 uid           [  不明  ] Debian Archive Automatic Signing Key (9/stretch) <ftpmaster@debian.org>
 sub   rsa4096 2017-05-22 [S] [有効期限: 2025-05-20]

 /etc/apt/trusted.gpg.d/debian-archive-stretch-security-automatic.gpg
 --------------------------------------------------------------------
 pub   rsa4096 2017-05-22 [SC] [有効期限: 2025-05-20]
       6ED6 F5CB 5FA6 FB2F 460A  E88E EDA0 D238 8AE2 2BA9
 uid           [  不明  ] Debian Security Archive Automatic Signing Key (9/stretch) <ftpmaster@debian.org>
 sub   rsa4096 2017-05-22 [S] [有効期限: 2025-05-20]

 /etc/apt/trusted.gpg.d/debian-archive-stretch-stable.gpg
 --------------------------------------------------------
 pub   rsa4096 2017-05-20 [SC] [有効期限: 2025-05-18]
       067E 3C45 6BAE 240A CEE8  8F6F EF0F 382A 1A7B 6500
 uid           [  不明  ] Debian Stable Release Key (9/stretch) <debian-release@lists.debian.org>

  ...

最後に、メンテナが新たなパッケージをDebianプロジェクトにアップロードするときにも、パッケージのビルド時にパッケージファイルのSHA1とSHA256のハッシュ値がアップロード用情報ファイルに記載される。これにメンテナのGnuPG鍵による署名を行ってからアップロードすれば、あとはDebianプロジェクトのサーバが署名およびハッシュ値の検証をして正当であれば取り込まれる。

これで完璧だ!と言いたいところだけれども、実際のところ問題がなくもない。

  • (悪意の有無はともかくとして)通信途中に監視者が存在する場合、どのパッケージをダウンロードした、という情報はわかってしまう。これを避けるには、ftp.jp.debian.orgといったTLS化できない抽象名ではなく、httpsを提供しているサーバを使う。たとえば「https://dennou-k.gfd-dennou.org/debian/」はいける模様。
  • Debian以外のサードパーティの鍵をapt-keyを使って登録している場合、サードパーティのリポジトリ経由でパッケージのハイジャックをされる可能性がある。たとえばサードパーティのリポジトリがクラックされて「apt」の悪意あるバージョンが配布される、という可能性はあり得る。APT pinを使えば防げなくはないけれども手間なので、信頼性に欠けるサードパーティのものはインストールを終えたらsources.listからコメントアウトしたほうがよいかもしれない。必要なパッケージのインストール時にapt-keyでの鍵登録はせず、そのときだけ「信頼しないけどインストールする」で済ませるという手もある(postinstで入れられたらどうしようもないけれども)。
  • オリジナルのソフトウェア、あるいはパッケージメンテナに悪意がある場合に防げない。これは配布の問題ではないので……。

_ [cooking] ごーやーちゃんぷるー


2018年07月29日

_ [cooking] てきとうオーブン焼き


2018年07月30日

_ [cooking] ガッパオ


2018年07月31日

_ [cooking] ソーセージ、ナス、ガルバンゾのパスタ