Posts

Showing posts from September, 2018

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…