Posts

Showing posts from 2018

NetBSD/amd64-currentをAmazon Web Service EC2 c5インスタンスで動かしてみる

Image
この記事は、 NetBSD Advent Calendar 2018の23日目の記事です。 はじめに もう1年以上前の話だと思うのですが、Amazon Web Service (AWS) EC2にc5という Linux KVMをAmazonが独自拡張したと言うインスタンスのタイプが追加されました。 その後、同じような仕組みのm5インスタンスと言うもの追加されているようです。 c5インスタンスでは、Elastic Network Adapter (ENA)と言うEthernetアダプター を利用できることが必須になっているようです。 NetBSD/aarch64では、a1インスタンスでena(4)がFreeBSDから移植されていて 無事に動いていますが、 c5インスタンスでのNetBSD/amd64の動作確認結果は聞いたことはありませんでした。 そもそもc5インスタンスで起動できるAMIの作り方も良く分かりませんでした。 今回は、カーネルパニックでena(4)は動かせるまで至りませんでしたが、 c5インスタンス用のAMIの作成をまとめておくことは意味があるかもしれません。 AMIファイルの作り方を調べてみる AWS EC2のAMIは、直接ダウンロードしてみることはできないようです。 裏にはスナップショットと言うものがあるようですが、Amazonが公開している Amazon LinuxのAMI用のスナップショットを見ることはできないようです。 今回は、FreeBSD/amd64 12のAMIからc5インスタンスを作成し、そのディスクの 構造を見てみました。それを見ると、NetBSDで言うと、GPTパーティションからの BIOSブート(UEFIブートではない)であることが分かりました。 かつて、UEFIブートができないことにGPTを使っていたやり方を思い出せば良さそうです。 ここで、カーネルは、 ena* at pci? dev ? function ? # Amazon Elastic Network Adapter の行をGENERIC設定ファイルに追加した追加したGENERIC_ENA設定ファイルでビルドします。 ; 3GBのディスクイメージファイルを作成します $ dd if=/dev/zero of=./netbsd-c5-…

NetBSD/amd64でChisel HDLからVerilogを生成してシミュレーションしてみる

この記事は、 NetBSD Advent Calendar 2018の20日目の記事です。 はじめにMIPSの 命令セットアーキテクチャーと実装が オープンソースになるような時代が来るとは思っていませんでした。 これもRISC-Vへの期待に影響があるのかもしれません。 Chiselと言うハードウェア記述言語は、そのRISC-Vの代表的な実装である Rocket chip の多くの部分を書くのに使われているものです。 今回は、Rocket chipは大規模過ぎるので、Chiselのチュートリアルである Chisel TutorialsのChiselコードをVerilogに変換して、 verilatorでのシミュレーション実行もしてみたいと思います。 私はこれからChiselで書いてみたい回路があるのですが、 NetBSDで生活して良くあるのは、そもそも環境が整わない、整ったと思ったら誤作動している と行ったことなので、既存の正しく動くことの分かっているものが、同じように動くことを 確認するのは大切です。 Chiselの環境の準備 Chiselは、ScalaというJava Virtual Machine (JVM)で動く処理系で書かれています。 Chisel自体が、Scala言語のドメイン固有言語(DSL)になっています。 Chiselの処理系は、sbt (pkgsrc/lang/scala-sbt)を使って各環境ごとに それぞれ用意します。 ですので、/usr/local以下にインストールしておくといったことは 一般的ではないようです。 まずは、pkgsrc.lang/scala-sbtのインストールですが、 NetBSD/amd64のネイティブなOpenJDK 8ではうまく動きません。 Java Native Access (JNA)がサポートされていないのが いけませんし、他にも理由はありそうです。 pkgsrc/lang/openjdk8をちゃんと直さないといけません…。 ですが、ここでは先を急いでpkgsrc/lang/oracle-jdk8を 使うことにしてしまいます。 java.sun.com からLinux/x86_64用のJREとJDKの配布物をダウンロードして$DISTDIR に配置した上で、以下のように実行すれば良いでしょう。 #…

NetBSD/amd64-current上でIntel Quick Sync Videoを使ってみる

この記事は、 NetBSD Advent Calendar 2018の10日目の記事です。 はじめに IntelのCPUに内蔵されているGPUには、Intel Quick Sync Video (QSV)というビデオのデコードとエンコードをする仕組みが入っています。 今回は、KabylakeなIntel Core i7なチップの搭載されているHP Spectre x360 ae019TUで、NetBSD/amd64 8.99.27上で、 H.264のビデオのデコードとエンコードをQSVでさせてみました。 エンコードには、pkgsrc/multimedia/ffmpeg4を使い、 デコードには、pkgsrc/multimedia/mpvを使います。 比較のためにfmpeg4でCPUを使ってH.264を利用しますが、 これには本来はライセンスが必要なはずです。 CPUを使ってH.264のデコード/エンコードをしてはいけないと思います。 Intel QSVを使用する準備 NetBSDでIntel QSVを使うためには、pkgsrc/multimedia/libva (VA API)を使うのが一番良いようです。 Intel Media SDKはもしNetBSDで使えたとしても相当苦労するのが明らかですし、 VDPAUは、2015年以降のコミットは2018年11月の2件のみです。 NetBSD/amd64 8.99.27で必要なものをpkgsrcからインストールします。 pkgsrc/multimedia/ffmpeg4も pkgsrc/multimedia/mpvもNetBSD/amd64 8.99.27ではpkgsrc/multimedia/libva に依存するのが既定値になっています。 本当に自分の環境でlibvaサポートが有効になるかを確認したい場合にが、 make show-optionsの出力にvaapiが含まれているかを確認すれば良いでしょう。 libvaからIntel QSVを使うには、pkgsrc/multimedia/intel-vaapi-driverが必要です。 また、libvaの動作確認をするには、pkgsrc/multimedia/libva-utilsがあると良いです。 # cd /usr/pkgsrc/multimedia/ffmp…

Amazon Web Service EC2のa1インスタンスでNetBSD/aarch64を動かしてみる

Image
この記事は、 NetBSD Advent Calendar 2018の9日目の記事です。 はじめにport-armメーリングリストに、 jmcneill@さんが、 NetBSD on AWS EC2 ARM instances と言う投稿をされました。 AmazonがAmazon Web Service (AWS) EC2にa1インスタンスという64ビットARM (aarch64)を追加していますが、 その上でNetBSD/evbarm64が動くという話です。 今回は、jmcneill@さんが、用意してくれたAMIを使って、a1.middleインスタンス を作り、pkgsrcを使ってみました。 AWS EC2 a1とは AWS EC2 a1は、Amazonの独自に開発した64ビットARM CPUである AWS Gravitation Processorで動くインスタンスのようです。 jmcneill@さんが、 us-east-1(N. Virginia)にAMIを用意してくれていますので、 us-east-1であれば何の苦もなくインスタンスを用意できるはずです。 今回は、a1.middleインスタンスを使ってみますが、これはCPU: 1基、RAM: 2GiBの インスタンスです。最大構成のa1.4xlargeですと、CPU: 16基、RAM: 32 GiBです。 a1.middleインスタンスを用意する a1インスタンスだからと言って、特に特別なことはありません。 普通にAWSのインスタンスを作成していきます。 まずは、Community版のAMIで、ami-0c7624c662581e8faを検索して 選択します。ログイン用のssh鍵も生成し、ダウンロードしておきます。

次には、EBSディスクを割り当ててインスタンスを起動させます。
a1.middleインスタンスへログインする ログインについては、NetBSD Wikiの記事に書かれている通りです。 生成したssh鍵の秘密鍵をダウンロードしてあると思います。それを使って、以下のようにログインします。 $ chmod 600 a1-privatekey.pem $ ssh -i a1-privatekey.pem root@aws-hostname-address a1.middleインスタンスの初期…

pkgsrcでのクロスコンパイル方法 2018年版

この記事は、 NetBSD Advent Calendar 2018の8日目の記事です。 はじめにpkgsrcには、今目の前にあるマシンとは違うアーキテクチャーの マシンで動くNetBSDのためのバイナリーパッケージを作る仕組みがあります。 基本的には、 pkgsrc/doc/HOWTO-use-crosscompile にあるようにすれば良い訳ですが、実際にやってみた経験のある方は 多くはないかもしれません。 今回はNetBSD/amd64 8.99.25で、 NetBSD/evbearmv7hf-el用 8.99.25のバイナリーパッケージを作成してみます。 クロスツールチェインを用意する NetBSDはクロスビルドをするためのツールチェインを簡単に作ることができます。 具体的には、以下のようにします。 $ cd /usr/src $ ./build.sh -U -T /usr/world/9/earmv7hf-el/tools -O /usr/world/9/earmv7hf-el/obj -D /usr/world/9/earmv7hf-el/destdir tools $ ./build.sh -U -T /usr/world/9/earmv7hf-el/tools -O /usr/world/9/earmv7hf-el/obj -D /usr/world/9/earmv7hf-el/destdir build これで、/usr/world/9/earmv7hf-el/tools以下にクロスコンパイラーなどが、 /usr/world/9/earmv7hf-el/destdir以下にユーザーランドが用意されます。 このクロスコンパイラーなどを使い、このユーザーランドにパッケージをインストールしつつ パッケージをビルドしていくことになります。 /etc/mk.confの設定pkgsrcの設定は、NetBSDがホストのであって別段bootstrap pkgsrcを 実行していない場合は、/etc/mk.confに設定を書くことになります。 ここでは、以下のように実行した場合にevbearmv7hf-el用に クロスビルドするようにしてみます。 $ cd /usr/pkgsrc/www/http-parser $ make USE_CROSS…

pkgsrcでGo言語で書かれたソフトウェアをパッケージにする方法

この記事は、NetBSD Advent Calendar 2018の7日目の記事です。 はじめにpkgsrcのパッケージは、オフラインでビルドできることが求められています。 ですので、ビルドの準備段階や最中に依存するソースコードをダウンロードするのは 避けなくてはいけません。 今日はGo言語で書かれたソフトウエアであるHugo と言うスタティックサイトジェネレーターを例にして、Go言語で書かれたソフトウエアの場合の buildlinkの仕組みを体験してみたいと思います。 依存するソフトウエアの準備方法pkgsrcでは、configureステージ(典型的には GNU autoconfのconfigureスクリプトを実行する段階で、ビルドの1つ前の段階)の前に WRKSRC(デフォルトではそのパッケージのディレクトリー内にwork ディレクトリー)以下に、依存するパッケージのヘッダーファイルやライブラリファイルを用意して おきます。 このような処理をする場合には、例えば以下のように パッケージのMakefileから buildlink3.mkファイルをインクルードしておきます。 (snip) .include "../../devel/go-locker/buildlink3.mk" .include "../../www/go-toml-burntsushi/buildlink3.mk" .include "../../www/go-urlesc/buildlink3.mk" .include "../../devel/go-purell/buildlink3.mk" .include "../../textproc/go-chroma/buildlink3.mk" (snip) ヘッダーファイルやライブラリーファイルをWRKSRC以下に配置すると 書きましたが、Go言語の場合には、ちょっと事情が異なり、ソースコードとスタティックライブラリーが 配置されます)。 実際に依存先のソースコードとスタティックライブラリーが格納されるのは、 work/.buildlink/gopkgディレクトリー以下です。 pkgsrc/www/hugoの場合の中身を少し確認してみ…

NetBSD/amd64-current on HP Spectre x360 ae019TU (デスクトップ環境構築編)

Image
この記事は、NetBSD Advent Calendar 2018の6日目の記事です。 前回の補足前回のインストール編で 書き忘れていた点が2点ありました。 最近のNetBSD/amd64-currentだと、acpibat(4)の認識のところで止まってしまいます。ですので、boot -cで起動させて、disable acpibatを入力してやるか、事前に/boot.cfgファイルを書き換えて、userconf disable acpibatを足しておく必要があります。附属の可視光/赤外線用のビデオカメラの認識の際にカーネルパニックします。PR kern/53734が正しいかは分かりませんが、uvideo(4)を無効にするか、このPRのパッチを当てておく必要があります。はじめに 前回インストールしたNetBSD/amd64 8.99.26では、以下の機能が使えます。 オーディオ出力Synaptics製タッチパッドmicroSDカードリーダー無線LANNVMe SSDストレージIntel製内蔵GPUによるアクセラレーションUSB Aコネクター経由でのUSB 3デバイスの利用 以下の機能は、パッチを当てれば使えます。 タッチスクリーンのペンによる操作 以下の機能は使えません。 内蔵の可視光/赤外線のウェブカメラタッチスクリーンの指による操作指紋認証USB Type-Cコネクター経由でのUSB 3デバイスの利用ディスプレイの輝度調整ACPIで電源を切る(shutdown -p nowが働かない)ACPIで内蔵バッテリーのステータスを取得するハードウェアボタンによるオーディオ音量調整 細かい所は不便ですが、生活するのに困るほどではありません。 ここでは、快適にFirefoxウェブブラウザー(pkgsrc/www/firefox)で ウェブブラウジングができるようにする、Blender(pkgsrc/graphics/blender)で3Dモデリングができるまでを説明して行きます。 必要なパッケージのインストール 快適なX Window Systemの環境を容用意するには、残念ながらxsrcから 生成されたXでは不十分なことは前回も触れました。 ここでは、pkgsrcでも不十分ですので、lpkgsrc-wip も利用します。 pkgsrc-wipは、pkgsrc…

NetBSD/amd64-current on HP Spectre x360 ae019TU (インストール編)

この記事は、 NetBSD Advent Calendar 2018の5日目の記事です。 はじめに 2018年7月のJapan NetBSD Users' GroupのBoFの際には、いろいろ動かないものばかり だったのだが、2018年12月現在では、HP Spectre x360 13-inch ae019TUも多くの 機能がちゃんと動くようになっている。 今日から2日間は、HP Spectre x360 13-inch ae019TUで、快適にNetBSDデスクトップを 使用する方法について書いていきたい。 ちなみにこの記事は、おおしまさんのU-EFI bootで起動するNetBSD USBメモリを作ってみるの記事を 読んだ方にはほぼ不要だと思います。 NetBSDのインストール このマシンには、当然のようにDVDドライブなどは内蔵されていない。 それにUEFIな環境で使用したい。 と言うことで、今日の時点で最新なNetBSD-8.99.26-amd64-uefi-install.img.gz をnycdn.NetBSD.orgから ディスクイメージをダウンロードして USBスティックに書き込み、インストールに使用することにする。 NetBSDの環境があれば、そこでddコマンドで書き込むのが良いのだが、 今回は、Windows 10 Proの環境で書き込んでみた。rawrite32.exeを使う。 rawrite32.exeは、a href="https://www.netbsd.org/~martin/rawrite32/"> lNetBSD.orgにあるmartin@のウェブページからダウンロードすることができる。 ちなみに、既にGPTなパーティショニングがされていると、rawrite32.exeでは どうやってもエラーになってディスクイメージを書き込めないことがある。 どうにかしたいのだが、何も行動できていない。 実際のインストールは、インストーラーであるsysinstは使用しなかった。 おそらくsysinstは、GPTパーティショニングな環境へのインストールに まだ対応していないのではないかと思う。これについても何もできていない。 今回は、sysinstが起動したら、すぐにCtrl-Cを押して シェルに移行し、そこ…

pkgsrc/security/acmeshでLet's EncryptのTLS/SSL証明書を使う

この記事は、NetBSD Advent Calendar 2018の4日目の記事です。 自分のウェブサイトをLet's EncryptでTLS/SSL化したいと思っていて、 過去にはpkgsrc/security/py-certbotを試すために pkgsrc/sysutils/py-psutilのNetBSDへの移植に 取り組んだこともあったのだが、なかなか継続的に利用し続けるのは大変だった。 NetBSD blogの Using acme.sh for Let's Encrypt certificates on pkgsrc.org servers を読んで、acme.sh を試したいと思ったのだが、そもそもpkgsrcには収録されていないし、DNSによる認証は ちょっと遠慮したいので、そのまま適用はできないでいた。 やっと重い腰を上げてpkgsrcに追加して設定した話を書きたい。 ちなみに、ワイルドカード証明書が発行できるようになっているが、今回はワイルドカード証明書 は発行を受けない。 インストール インストールは、pkgsrc/security/acmeshを使えば良い。 # cd /usr/pkgsrc/security/acmesh # make install 以上のように実行すれば良い。このようにインストールすると、 ▽usおそらくHTTPでの認証で ウェブサーバーをインストールしないでもTLS/SSL証明書を発行できるように pkgsrc/net/socatもインストールされる。 今回はsocatは使わないがインストールされてしまう。 TLS/SSL証明書の発行を受ける TLS/SSL証明書の発行を受けようというサーバーのホスト名はwww.example.com であることにしよう。 このFQDNでアクセスできるようにDNSを設定しておくのが必要なのは言うまでもない。 私は、このサーバーでpkgsrc/www/nginx-develをhttpdとして 使用する予定なので、TLS/SSL証明書の発行を受ける際にも、これを使用することにする。 以下のようにインストールし、設定しておく。 # cd /usr/pkgsrc/www/nginx-devel # make install # vi /usr/pkg/etc…

OpenGLのサポート状況を確認する

HP Spectre x360のIntel Kabylake Refreshな環境で、NetBSD/amd64-currentを使うと OpenGLも有効になって、Blenderも使えて嬉しく思っていたのだが、 OpenGLのサポートするバージョンを確認する方法が分かっていなかった。 Debian wikiのMesaのページを 見ていたら書かれていた。 glxinfoコマンドは、pkgsrc/graphics/MesaDemosから glxinfo_mesademosを使う。 $ glxinfo_mesademos|grep "OpenGL core profile version string" OpenGL core profile version string: 4.5 (Core Profile) Mesa 18.2.0 以上のようだと、OpenGL 4.5に対応している。

ffmpegのx11grabデータソースから30 fpsで取得する

自分の作業を記録しておくのに、スクリーンの内容をビデオとしてキャプチャーしておきたいと思った。 しかし、今使用しているHP Spectre x360 qe019TUは、USB Type-Cによる ビデオ出力はあるはずだが、NetBSDでは動かない。 調べてみると、ffmpegのx11grabデータソースでビデオキャプチャーできることが分かった。 とりあえず、以下のようにすると、30 fpsでMP4ビデオにできた。 $ ffmpeg4 -f x11grab -r 30 -s 1920x1080 -i :0.0+0,24 -vcodec libx264 capture.mp4 ここで、ffmpeg4コマンドは、pkgsrc/multimedia/ffmpeg4を xcbオプションを有効にしてビルドしたバージョン4.1である。

mupdfでPDFファイルをPostScriptファイルに変換する

PDFファイルをNetBSD上で読むのに、長らくMotifベースのxpdf (pkgsrc/print/xpdf)を使ってきたが、文字化けしてしまうPDFファイルがあるのが悩みだった。 思い切ってmupdf (pkgsrc/print/mupdf)に乗り換えてみた。 これまでにmupdfで文字化けしてしまうPDFファイルには遭遇していない。 PostScriptプリンターで印刷するには、PDFファイルからPostScriptファイルに変換する必要がある。 mupdfでもPDFファイルをPostScriptファイルに変換できるはずと思って試してみた。 具体的には、pkgsrc/print/mupdfパッケージに含まれているmutoolコマンドが使用できた。 実際の操作は以下のようである。 $ mutool convert -o output.ps input.pdf ビューアーとコンバーターの挙動が違うとトラブルの元なので、この方法を使って行きたい。

pkgsrcのpLaTeX (pkgsrc/print-platex)で作ったdviファイルをdvipdfmxでPDFファイルに変換する

本当に久しぶりにLaTeXでPDFファイルを作成したくなって、pkgsrcに日本語対応のLaTeXがあるか探してみたところ、 pkgsrc/print/tex-platexというのが 収録されていた。 pkgsrc/print/tex-jsclassesを使ってDVIファイルを作ってみて、pkgsrc/print/dvipdfmxで PDFファイルに変換しようとすると、以下のようなエラーになってPDFファイルを生成できない。 current-situation-of-coal-industry-in-the-world.dvi -> current-situation-of-coal-industry-in-the-world.pdf [1 kpathsea: Running mktexpk --mfmode / --bdpi 600 --mag 1+359/600 --dpi 959 rml /usr/pkg/bin/mktexpk: gsftopk: not found mktexpk: don't know how to create bitmap font for rml. mktexpk: perhaps rml is missing from the map file. kpathsea: Appending font creation commands to missfont.log. dvipdfmx:warning: Could not locate a virtual/physical font for TFM "rml". dvipdfmx:warning: >> There are no valid font mapping entry for this font. dvipdfmx:warning: >> Font file name "rml" was assumed but failed to locate that font. dvipdfmx:fatal: Cannot proceed without .vf or "physical" font for PDF output... Output file removed. …

RubyのURI.parseでプロキシーサーバーを設定する際にパスワードとして使えない文字

ユーザー認証付きのHTTPプロキシーサーバーを経由しないと、どこにも行けないネットワークで生活しないといけないことがある。 そんな環境でもRubyスクリプト(実際にはJRubyで動かすことが多い)でWWWにアクセスしなくてはいけないことがある。 RubyのURI.parseが呼ばれると、 URI::InvalidURIError: bad URI(is not URI?) とエラーになってそもそもWWWにアクセスしに行かないことがある。 これは、ユーザー認証付きのHTTPプロキシーサーバーのパスワードに使えないはずの文字が設定されているためである。 私の環境の場合にはWindowsのActive Directoryの認証情報と連携しているので、Windowsのログオンパスワードとして 良かれと思って記号を使っていると、遭遇してしまうことがある。 では、どのような文字をパスワードとして使用するのを避ければ良いのだろうか? RFC2396であるUniform Resource Identifiers (URI): Generic Syntaxによると、 以下のように書かれている。 The user information, if present, is followed by a commercial at-sign "@". userinfo = *( unreserved | escaped | ";" | ":" | "&" | "=" | "+" | "$" | "," ) つまり、セミコロン、コロン、アンパサンド、イコール、プラス、ダラー、カンマ以外は使えないようだ。 いまいちescaped = % hex hexの場合がどうなるのか分からないが…。 とりあえずは、これら以外の記号は避けてActive Directoryにパスワード登録するのが良さそうだ。

NetBSD/amd64上で動かすFirefox 61.0.2でのDNS over HTTPSを使う

オーディオやウェブカメラをFirefoxから使うと言う話ではないので、 NetBSDだからと言って特別な事はあるはずもないのだが、 DNS over HTTPSをmozilla wikiのTrusted Recursive Resolverを参考に設定して使ってみた。 Firefoxのprofileディレクトリーにあるprefs.jsに以下のように設定されるように、about:configで 設定すれば良い。Firefoxを再起動することなく、設定直後から反映される。 user_pref("network.trr.bootstrapAddress", "1.1.1.1"); user_pref("network.trr.mode", 3); // DNS over HTTPSしか使わない。通常のDNSにfallbackする場合には2にする。 user_pref("network.trr.uri", "https://mozilla.cloudflare-dns.com/dns-query");

仮想マシンハードディスクイメージファイルの形式

仮想マシンのハードディスクイメージファイルについて、いつもどれがどれか分からなくなってしまうので、その種類を書いておく。 Appleのdmg形式は除いている。 RAW物理ディスクのダンプqcow昔のqemuの形式qcow2今のqemuの形式FVD (Fast Virtual Disk)IBMの開発したqemu用の形式QEDqemu用だが既に互換性のためだけに残っている状態。VDI (Virtual Disk Image)VirtualBoxの形式VMDK (Virtual Machine Disk)VMwareの形式VHD (VIrtual Hard Disk)Microsoft Virtual PCの形式VHDX (Virtual Hard DIsk v2)Microsoft Hyper-Vの形式bochsBochsのbximageコマンドで作る形式 他にもあるだろうが、普段目にするのはこの程度なように思う。

NetBSDのpkgsrcから導入したXでAccelMethodを設定する

FreeBSDのX.orgでCaps lockキーをCtrlにするで書いたことと基本的に同じではあるのだが、 NetBSD上でpkgsrcから導入したmodular-xorg-server-1.20.1を導入した場合の設定例を書いておく。 やりたいことは、Toshiba dynabook R63/PSというIntel Broadwell世代のラップトップでIntelのinternal GPUのアクセラレーション方式をSNAからUXAに切り替えるということである。 以下のようにすれば良い。 ; まず/etc/X11/xorg.conf.dディレクトリーがないので作成する。 # mkdir /etc/X11/xorg.conf.d ; 以下のような内容を用意する。 # cat /etc/X11/xorg.conf.d/20-intel.conf Section "Device" Identifier "Intel GPU" Driver "intel" Option "AccelMethod" "UXA" # Option "NoAccel" "True" # アクセラレーションを無効にする場合 EndSection

JRubyのRestClientで、認証付きHTTPプロキシーサーバーを経由してアクセスする方法

いつの頃か覚えていないのだが、とある認証付きHTTPプロキシーサーバーを経由して、 JRubyのRestClientを使ったプログラムが動いていたはずである。 プロキシーサーバーの情報は、この環境は、Windows 10の環境であるから、 > set http_proxy=http://username:password@serveripaddress:portnumber のように設定してある。 しかし、何かが変わったようで、今日になると404 Proxy Authentication Requiredの エラーが、net/httpから返されて認証付きプロキシーサーバーを越えることができない。 パスワードは英数字のみで構成されているので、パスワードの値が問題ではないはずである。 いろいろ試した結果、 RestClient.proxy = ENV['http_proxy'] を書いておくことで解消できた。 net/httpの仕様がいまいち理解できず気持ちが悪いが、 いずれまた、はまりそうな気がするので書いておく。

FreeBSDのX.orgでCaps lockキーをCtrlにする

最近のX.orgでは、xorg.confは用意しておかなくても良いのだが、その時にctrl:nocapsを指定する方法を書いておく。 FreeBSDでPortsからxorg-server-1.18.4_9,1を導入した時に使用している。 $ cat /usr/local/etc/X11/xorg.conf.d/10-capslock.conf Section "InputClass" Identifier "keyboard0" Driver "kbd" MatchIsKeyboard "on" Option "XkbOptions" "ctrl:nocaps" EndSection

PowerShellのSend-MailMessageで外部コマンドの標準出力を電子メールを送る際に改行を維持する

PowerShellを使うと良い所は、電子メールを簡単に送付できるSend-MailMessageと言う命令があるところである。 これを使って、外部コマンドの標準出力を電子メールとして送るとすると、以下のようになる。 ## 管理者権限のPowerShellコンソールで、Set-ExecutionPolicy remotesignedを実行しておく必要がある。 ## 使い方: ## powershell -NoProfile -ExecutionPolicy Unrestricted .\send-notification-email.ps1 # 送信する電子メールの本文はUTF-8にする。 $utf8 = ([System.Text.Encoding]::UTF8) # 差出人 $fromaddress = "fromuser@example.com" # 宛先として2つの電子メールアドレスを設定する。 $toaddress1 = "touser1@example.jp" $toaddress2 = "touser2@example.jp" # 電子メールのSubject $subject = "件名です" # 本文は外部コマンドの標準入力から受け取る $body = C:\jruby-9.2.0.0\bin\jruby.exe .\output-to-stdout.rb if ($LASTEXITCODE -ne 0) { $email = @{ From = $fromaddress To = "$toaddress1","$toaddress2" Subject = $subject Body = $body -join "`r`n" SMTPServer = "smtp.example.com" Encoding = $utf8 } send-mailmessage @email } ここで、外部コマンドの標準出力が複数行存在する場合には注意が必要である。 つまり、-join "`r`n"を付けてお…

NetBSD 8 on さくらのVPS V4

お名前VPSをずいぶんと長く使って来たのだが、我慢できないほどにディスクアクセスが遅くなってしまい、他に乗り換えることにした。 最近のVPSサービスは、ディスクがSSDであまり容量の大きくないものばかりなので、手頃な価格で200 GB程度のディスク容量のものとなると、 さくらのVPSくらいしかなさそうだった。 さくらのVPSは、ブートセクターが壊れることはあるとか言う話を聞いたことがあって心配していたのだが、私の使うことにした石狩データセンター収容のV4の仮想マシンは、 とりあえず初回からNetBSDが起動しないと言うことはなかった。 Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The NetBSD Foundation, Inc. All rights reserved. Copyright (c) 1982, 1986, 1989, 1991, 1993 The Regents of the University of California. All rights reserved. NetBSD 8.0 (GENERIC) #0: Sat Jul 21 13:49:48 JST 2018 xxx@xxx.xxx:/usr/world/amd64/8/obj/sys/arch/amd64/compile/GENERIC total memory = 2047 MB avail memory = 1964 MB rnd: seeded with 128 bits timecounter: Timecounters tick every 10.000 msec Kernelized RAIDframe activated running cgd selftest aes-xts-256 aes-xts-512 done timecounter: Timecounter "i8254" frequency 1193182 Hz quality 100 QE…

Log-structured File System (LFS) について書かれている文献

Log-structured File System (LFS)というファイルシステムがあって、NetBSDもサポートしている。 しかし、私の知る限りNetBSDではちゃんと動いたことはないように思う。 それでも、どうにかして動かしたいと思う人は私以外にもいるようで、時折何かの修正がコミットされている。 もうHDDにストレージのアクセス速度を求める時代ではないのかもしれないが、SSDにも応用できる考え方はあるのではないかとも思う。 mount_lfs(8)のmanページと、英語版Wikipediaの参考文献にあげられている文書を書いておく。 Wikipediaの方はリンクがあるが、mount_lfs(4)の方はそうではないので、後で読む時にはここからたどるようにしたい。 mount_lfs(8)のmanページよりBeating the I/O Bottleneck: A Case for Log-Structured File SystemsThe Design and Implementation of a Log-Structured File SystemFile System Performance and Transaction SupportAn Implementation of a Log-Structured File System for UNIX英語版WikipediaのLog-structured file systemの記事より mount_lfs(8)のmanページの分と重複する物は割愛した。 Log-Structured File SystemsDon't stack your Log on my Log 最初は教科書の一章であるLog-Structured File Systemsを読むのが分かりやすそうだ。

LLVM/clangでビルドできるNetBSDのアーキテクチャー

LLVM/clangでビルドできる(試みることのできる)アーキテクチャー(MACHINE_ARCH)をちゃんと把握しておかないといけないと思っていた。 src/share/mk/bsd.own.mkによると、以下の各MACHINE_ARCHであるようだ。 aarch64aarch64ebearm*i386powerpcpowerpc64sparcsparc64x86_64 また、LLVM/clangでビルドしたNetBSDを用意するには、/etc/mk.confに以下のように書いておけば良いはずである。 MKGCC=no MKLLVM=yes HAVE_LLVM=yes しかし、build.shにこれを自動的に設定してくれるオプションがないのが不便だ。

FreeBSD Portsで、オプションを選択するダイアログボックスを逐次出さないようにする

FreeBSDを使うことがあるので、そこではFreeBSD Portsを使いたいと思う。だが、いつもオプションを選ぶダイアログボックスでビルドが途中で止まってしまい、 いつまで経っても目的を達せないので、あきらめてpkgsrcを使っていた。 以前、FreeBSD Workshopに出席した際に、最初に指定しておくことのできるmakeターゲットがあると聞いたので、やっとports(7)のman ページを読んでみた。 config-recursiveというのが、それだった。 # cd /usr/ports/x11-wm/jwm # make config-recursive (ここで必要なオプションを設定する) # make install のようにすることで、目的は達成できた。 私としては、デフォルトのオプションから変えることは基本的にないと思うので、デフォルトの値を自動的に設定するmakeターゲットがあると便利なのだが、 ports(7)には記載されていないようだった。一度、ports/Mk以下をちゃんと読まないといけないように思う。

NetBSD上でのBitVisorのビルドと、BitVisor上でのNetBSDの起動

はじめにこの記事は、Japan NetBSD Users' Group BoF 2018で発表した内容を整理し直したものです。NetBSDでBitVisorをビルドしてみる話と言う 記事があって、ここでは、NetBSD上でBitVisorのUEFIブートローダーはビルドできなかったという結果が掲載されている。 最近は、UEFIブートローダーも含め、一式をちゃんとNetBSD上でビルドできるようになっているので、このことについて書いておく。 また、私は、BitViorをUEFIな環境で既に構築されているNetBSDを起動させるために使用するので、NetBSD/amd64l-current (8.99.24)以外でのビルドは試していない。 準備 最初に述べたように、NetBSD/amd64 8.99.24でビルドするので、x86_64用のCコンパイラーはGCC 6.4.0が既に用意されている。 これにより、UEFIブートローダー以外のものはビルドができる。 UEFIブートローダーは、mingw-w64によるx86_64用のクロスコンパイラーが必要となる。 まずはこのクロスコンパイラーをpkgsrcからインストールする。以下のように実行すれば良い。 $ cd /usr/pkgsrc/cross/mingw-w64-x86_64-gcc $ make install ここで、mingw-w64-x86_64-gcc-bootstrapというパッケージもインストールされるが、 これはmingw-w64-x86_64-gccをビルドするために一時的に必要になるパッケージなので、 mingw-w64-x86_64-gccが正常にインストールされたら、make deinstallしてかまわない。 GNU makeも必要なので、pkgsrc/devel/gmakeをインストールしておくことになるが、 このパッケージをインストールしていない人はいないだろう。 ビルドする 以下のように実行することで、bitvisor.elfとbitvisor/boot/uefi-loader/loadvmm.dll、 bitvisor/boot/uefi-loader/loadvmm.efiを生成できる。 $ cd ~/ $ hg clone ssh://hg@bitbucket.o…