MobaXtermというX-Windowアプリを表示するためのXサーバ機能を含んだSSH/moshクライアントソフト


最近、Windows上でX-Windowアプリを表示させる場合、VcXsrvというXサーバソフトを使用している。(紹介記事:Windows上でX-Windowアプリを表示するためのXサーバ VcXsrv)

それ以外に、「MobaXterm」というソフトもあるというので確認してみた。

無償で利用できるHome Editionと、1ユーザ69ドルのProfessional Editionがあるという。

で・・・
このソフトは、Windowsから、Linux/UNIX系サーバにアクセスするための統合ソフトウェア、という位置づけと言えます。

現状、下記のプロトコルに対応しています。
・SSH
 SSHトンネル/SSHポートフォワーディングも対応
・telnet
・RSH
・XDMCP(X-Window)
 OpenGLも対応
・RDP(Windowsリモートデスクトップ)
・VNC
・FTP
・SFTP
Mosh(mobile shellというSSH代替プロトコル)

また、MobaXtermをインストールしたWindows上にCygwin相当の環境をセットアップし、cygwinのコマンドを利用することができます。
cygwinを使いやすく仕立て直した感じ、といえばいいでしょうか?

ざっと使ってみた感想

・Portable versionのバイナリを実行するとインストールしないでそのまま使える
  11.5MBのMobaXterm_Personal_8.6.exeを実行するだけでXサーバも動く!
  日本語表示も可能!
・puttyのsessions設定をそのまま利用できる
・ssh接続時、UTF-8の日本語表示は普通に出来る
・ssh接続時、scpによるファイルブラウザ機能も同時にオープンされる
・ssh接続時、標準設定でSSH圧縮とX11フォワーディングとDISPLAY設定がされている
・Xアプリ表示時、タイトルバーの日本語表示が出来る
・Xアプリ表示時、起動してくるアプリが最前面に表示されないので気がつきにくい

Xmingより良い感じで使えます。

お気軽に使ってみたい、moshを使いたい、とか、操作用ターミナルソフト含めて乗り換えてもいいのなら「MobaXterm」
普段使ってるTeraTerm, puttyなどはそのままにXサーバだけを追加したいのであれば「VcXsrv」という感じですね。

qmailの情報収集 2016/03/31


新しい情報があったので「qmailの情報収集 2019/08/26」で更新しました。


2012年に作成した「いまさらqmailのパッチ情報収集 2012/02/17」という記事に、いまでも時々アクセスがある。

あれから4年。何か変わったところがあるか調べてみた。

・新星 s/qmail登場
なんと「s/qmail」という新作が登場。

これまで普通のqmail向けに、SMTP Authentication, Spamcontrol(4年前の記事でも紹介)などを作成してきた開発者が提供するqmail 2016年版、的なもの。
IPv4,IPv6にちゃんと対応し、vpopmailなどのqmailを使用するソフトウェアがそのまま使用できるものとなっている。

SSL/TLS対応はs/qmail自身ではなく「ucspi-ssl」が提供しているようだ。
SPF,DKIMには対応していない。

・IndiMail
qmail, serialmail, qmailanalog, dotforward, fastforward, mess822, daemontools, ucspi-tcp, Courier IMAP/POP3, Bogofilter – A Bayesian Spam Filter, Fetchmailをまとめてパッケージングしている「www.indimail.org」にアーキテクチャ図あり
SPF,DKIM対応
各ディストリビューション用のレポジトリーが用意されている。(RHEL/CentOS5~7,Debian7~8,Ubuntu12.04~15.10,OpenSuSE11.4など)
安定版:http://download.opensuse.org/repositories/home:/indimail/
開発版:http://download.opensuse.org/repositories/home:/mbhangui/

基本的にパッケージとして使うためものであるため、qmail単独で使うにはちょっと厳しい感じがある。
vpopmailと組み合わせて使えるか、というと、結構謎。

qmail-isp
qmail-1.03に対するパッチをまとめたもの。netqmail-1.06相当のパッチも含まれている。
2013年6月に更新版が出ていた。
こいつはvpopmailと一緒に使えるらしい

ASUS U24EにWindows10をインストールし、メモリを16GB(8GB*2)にしてみた


2022/08/14追記

ASUS U24EをUEFIモードにしてみると、UEFIモードだとLinuxでは音が鳴るのにWindowsではならない、という問題が発生していました。

BIOSのバグなのかなぁ、と思ってtwitterに書いたところ、BIOS設定にある「Play POST Sound」を設定すれば行ける、というリプライがついた。

確認してみると[Advanced]にある「Play POST Sound」が「No」となっていた。

そこで「Yes」にしてみたところWindows起動後に正常なサウンドデバイスとして動作するようになりました。ただ、電源が入ったあと、起動音がする、という副作用があります。

また、Windows 10 21H2だとWindows10の標準ドライバだけでは全てを認識しない状態になっていた。

ASUS U24Eドライバダウンロード」のWindows8 64bit版のページから以下を追加インストールする必要があった。(Windows8.1のページにはないので注意)

・Card Reader→Realtek Multi-Card Reader Driver
・VGA→Intel Graphics Driver

また、Windows Updateの「オプションの更新プログラム」にある「ドライバー更新プログラム」で以下を適用する必要があった。

・「Intel driver update for Intel(R) Management Engine Interface」
・「Intel Corporation – Bluetooth – 4/17/2019 12:00:00 AM – 20.100.5.1」

うまく音が鳴らなかった時にドライバをいろいろと追加してたので、必須かどうか分かりませんが、下記のドライバをインストールしていました。
その結果、認識したデバイスではこのドライバが使用されていました。

Realtek* High Definition Audio Driver for Legacy Intel® NUC


ジャンク屋でASUS U24Eがメモリ/HDD無しだけど7800円で売ってたので入手した。
裏面にあるWindows7 Homeのキーで、Windows 10 Homeのインストールも出来て、とりあえず稼働を確認。
Windows10の標準ドライバ以外に、「ASUS U24Eドライバダウンロード」のWindows8 64bit版のページから以下を追加インストール必要があった。
 ・Card Reader→Realtek Multi-Card Reader Driver
   これを入れないとデバイスマネージャにはてなマークが残る
 ・ユーティリティ→ATKACPI driver and hotkey-related utilities
   Fnキーによる音量コントロールなどを行いたい場合、これをインストールする必要がある
これ以外は特にインストールする必要がないと思います。


2017/07/06追記:ディスク交換したのでWindows10 1703で再インストールしたところ、オーディオが正常動作しなかったため、追加で「オーディオ→Realtek Audio Driver」をインストールしました。

2018/02/20追記:Windows10 1709で再インストールしたところオーディオも含めて正常動作しました。
Fnキーによる音量コントロールやWiFiオンオフも、追加ドライバ無しで動作しました。
しかし、UEFIモードで再インストールしたところオーディオが動作しませんでした

公式スペック的にはメモリは4GB*2の計8GB、というのが最大スペックらしい。
でも、いろいろ調べてみると、8GBのSO-DIMMが載り、計16GBが可能らしいので、試してみた。

丁度いいタイミングでセールをやっていたので、シー・エフ・デー販売 Elixir ノートパソコン用メモリ DDR3-SODIMM PC3-12800 CL11 8GB 2枚組 LowVoltage(1.35v) W3N1600Q-L8Gを買ってみた。

その結果、CPUがCore i5-2430MのASUS U24Eでは正常に動作することを確認しました。

ついでに、以前買ったCore i5-520M のDynaBook RX3 SM240Eで試したところ、動きがおかしくてちゃんと使えませんでした。
電源は入り、画面も映るんだけど、Windowsが起動が最初のロゴのところで止まる、という感じでした。

まぁ、目的とする機種で動いたからいいんですけどね


2021/07/08追記

Windows 11 Insider Previewはシステム要件外ということで直接インストールはできなかった。

WIndows 10 21H1をUEFIモードでインストールしたところデバイスがいくつか認識されなかった。

1つ消えた

1つ消えた

これではなかった

再起動要求された、どうか?

ダメでした

ぐぐったら不明なデバイスの8087 07dc はbluetoothらしい

無事消えた

残るはaudio

デバイス PCI\VEN_8086&DEV_1C20&SUBSYS_102B1043&REV_05\3&11583659&0&D8 の開始中に問題が発生しました。

ドライバー名: hdaudbus.inf
クラス GUID: {4d36e97d-e325-11ce-bfc1-08002be10318}
サービス: HDAudBus
下位フィルター: 
上位フィルター: 
問題: 0xA
問題の状態: 0xC0000001

変わらないと思うけど念のため

CentOS5などの古い環境でLet’s Encryptを使う(2017/02/21更新)


フリーで90日有効のSSL証明書を取得できる「Let’s Encrypt

90日毎に更新する必要があるため、プログラムを実行して証明書の取得ができるようになっている。

公式のプログラム(クライアント)は「https://github.com/certbot/certbot」にあるが、CentOS6以降やUbuntu向けに作られており、古いPythonの環境であるCentOS5では動作させるのが大変である。

公式以外のクライアントを探すと、「List of Client Implementations」に互換クライアント一覧がある。

いろいろある中で、2016年1月時点では唯一のbash環境用のスクリプトだった「Shell script client: dehydrated (旧名letsencrypt.sh) 」を選択。(なお、2017年2月現在では他にも3つ出ている。)

dehydratedは、「opensslコマンド」「curlコマンド」「sedコマンド」「grepコマンド」があれば動作する。

— 2018/07/20 追記開始 —
CentOS7環境で公式のcertbotを使って運用しようとしたのですが、alias FQDNを増やす際に別の設定が作られてしまうとか、管理性があまりよろしくなかったので、CentOS7環境でも制御しやすいdehydratedを使ってます。
— 2018/07/20 追記終わり —

(1) 「git clone https://github.com/lukas2511/dehydrated.git」でプログラム取得

(2) SSL証明書発行時に使用する一時ディレクトリの設定

SSL証明書発行時、Let’s Encryptサーバから「http://ドメイン名/.well-known/acme-challenge/~」というアクセスが行われる。その際のファイルを置く場所を用意する。

ここでは/var/www/dehydratedディレクトリに置くことにする。

1. /var/www/dehydratedディレクトリ作成
2. Aapacheの設定で「/etc/httpd/conf.d/dehydrated.conf」を作成

Alias /.well-known/acme-challenge /var/www/dehydrated
<Directory /var/www/dehydrated/>
</Directory>

3. Aapacheの再起動

(3) configを作成

docs/examples/config を元にconfigを作成する。

基本的には初期状態のままで良いが、2で/var/www/dehydrated以外を指定した場合に下記の記述を変更する

WELLKNOWN="/var/www/dehydrated/"

(4) domains.txtを作成

SSL証明書を発行したいドメインをスペース区切りで列挙する。

blog.osakana.net blog2.osakana.net

(5) dehydratedを実行して、まずはアカウント登録

# ./dehydrated --config /~/dehydrated/config --register --accept-terms
# INFO: Using main config file ./config
+ Generating account key...
+ Registering account key with ACME server...
+ Done!
#

実行すると下記の様にaccountsディレクトリが作成される。

# ls -F
CHANGELOG  README.md  config       docs/        test.sh*
LICENSE    accounts/  dehydrated*  domains.txt
# ls -F accounts/
~~~/
#

(6) もう一度、dehydratedを実行してSSL証明書を発行

# ./dehydrated --config ./config --cron
# INFO: Using main config file ./config
Processing ~ ~ ~
 + Signing domains...
 + Creating new directory ./certs/blog.osakana.net ...
 + Generating private key...
 + Generating signing request...
 + Requesting challenge for ~...
 + Requesting challenge for ~...
<略>
 + Responding to challenge for ~...
 + Challenge is valid!
 + Responding to challenge for ~...
 + Challenge is valid!
 + Requesting certificate...
 + Checking certificate...
 + Done!
 + Creating fullchain.pem...
 + Done!
#

下記の様にcertsディレクトリ以下にファイルが作成される。

# ls -F
CHANGELOG  README.md  certs/  dehydrated*  domains.txt
LICENSE    accounts/  config  docs/        test.sh*
# ls -F certs/
~/
# ls -F certs/~/
cert-xxxxxxxxxx.csr  chain-xxxxxxxxxx.pem      privkey-xxxxxxxxxx.pem
cert-xxxxxxxxxx.pem  chain.pem@                privkey.pem@
cert.csr@            fullchain-xxxxxxxxxx.pem
cert.pem@            fullchain.pem@
[root@niselog dehydrated]#

(7) Apache設定内のSSLファイルの指定では、作成されたファイルのうち、fullchain.pemとprivkey.pem,chain.pemを指定する。

SSLCertificateFile /~/certs/~/fullchain.pem
SSLCertificateKeyFile /~/certs/~/privkey.pem
SSLCertificateChainFile /~/certs/~/chain.pem

なお、最近は問題無いが、バージョンアップしていない古いブラウザでは、「SSLCertificateChainFile /~/certs/~/chain.pem」を抜いた2行で設定するとエラーが発生する場合があるので注意が必要。

(8) httpsアクセスをして問題無いことを確認

ブラウザからhttpsアクセスを行い、想定通りにアクセスできることを確認。

(9) crontabに、dehydratedを定期的に実行する設定を追加

毎月1日と15日に実行する処理

# crontab -l
0 3 1,15 * * /~/dehydrated/dehydrated --config /~/dehydrated/config --cron >> /tmp/ssl-update.log 2>&1
#

以下は旧バージョン

 


フリーで90日有効のSSL証明書を取得できる「Let’s Encrypt

 

90日毎に更新する必要があるため、プログラムを実行して証明書の取得ができるようになっている。
公式のプログラム(クライアント)は「https://github.com/letsencrypt/letsencrypt」にあるが、CentOS6以降やUbuntu向けに作られており、古いPythonの環境であるCentOS5では動作させるのが大変である。

公式以外のクライアントを探すと、「List of Client Implementations」に互換クライアント一覧がある。

いろいろある中で、一番制約が薄そうな「Shell script (and a little Perl) client: https://github.com/lukas2511/letsencrypt.sh」を選択。
「opensslコマンド」「curlコマンド」「sedコマンド」があれば動作する。
perlはこの一覧が作られた当初は必要だったようだが、2016/01/04時点では不要。公式のletsencryptコマンドから移行する場合に使用するimport-account.plコマンドを使う時だけ必要なようだ。

1. 「git clone https://github.com/lukas2511/letsencrypt.sh」でプログラム取得
2. SSL証明書発行時に使用する一時ディレクトリの設定
 SSL証明書発行時、Let’s Encryptサーバから「http://ドメイン名/.well-known/acme-challenge/~」という
 アクセスが行われる。その際のファイルを置く場所を用意する。
 ここでは/var/www/letsenryptディレクトリに置くことにする。
 (1) /var/www/letsencryptディレクトリ作成
 (2) Aapacheの設定で「/etc/httpd/conf.d/letsencrypt.conf」を作成

Alias /.well-known/acme-challenge /var/www/letsencrypt
&lt;Directory /var/www/letsencrypt/&gt;
&lt;/Directory&gt;


 (3) Aapacheの再起動

3. config.shを作成
 config.sh.exampleを元にconfig.shを作成
 といっても、下記の行を書くだけ
 

WELLKNOWN="/var/www/letsencrypt/"

4. domain.txtを作成
 SSL証明書を発行したいドメインをスペース区切りで列挙する。
 

blog.osakana.net blog2.osakana.net

5. letsencrypt.shを実行

# ./letsencrypt.sh --config /~/letsencrypt.sh/config.sh --cron
Using config file /~/letsencrypt.sh/config.sh
Processing blog.osakana.net with SAN: blog2.osakana.net
 + Signing domains...
 + make directory /~/letsencrypt.sh/certs/blog.osakana.net ...
 + Generating private key...
 + Generating signing request...
 + Requesting challenge for blog.osakana.net...
 + Responding to challenge for blog.osakana.net...
 + Challenge is valid!
 + Requesting challenge for blog2.osakana.net...
 + Responding to challenge for blog2.osakana.net...
 + Challenge is valid!
 + Requesting certificate...
 + Checking certificate...
 + Creating fullchain.pem...
 + Done!
#

下記の様にcertsディレクトリ以下にファイルが作成される。

# ls -F
certs/             domains.txt          import-certs.sh*  private_key.pem
config.sh          domains.txt.example  letsencrypt.sh*   README.md
config.sh.example  import-account.pl*   LICENSE           test.sh*
# ls -F certs/
blog.osakana.net/
# ls -F certs/blog.osakana.net/
cert-xxxxxxxxxx.csr  chain-xxxxxxxxxx.pem      privkey-xxxxxxxxxx.pem
cert-xxxxxxxxxx.pem  chain.pem@                privkey.pem@
cert.csr@            fullchain-xxxxxxxxxx.pem
cert.pem@            fullchain.pem@
#

Apache設定内のSSLファイルの指定では、作成されたファイルのうち、fullchain.pemとprivkey.pem,chain.pemを指定する。

SSLCertificateFile /~/certs/~/fullchain.pem
SSLCertificateKeyFile /~/certs/~/privkey.pem
SSLCertificateChainFile /~/certs/~/chain.pem

ちなみに、「SSLCertificateChainFile /~/certs/~/chain.pem」を抜いた2行で設定するとChromeやIEでは問題無いが、Firefoxでのみ「sec_error_unknown_issuer」のエラーがでる。
(なお、fullchain.pemとprivkey.pemを指定しているのは、標準のletsencryptを使った場合に生成されるapache用cocnfigファイルで使われていたから)


おまけ:CentOS4で使用する場合に必要になること

 

・curlの証明書問題
 → /usr/share/ssl/certs/ca-bundle.crt を更新する
  → OpenSSLが古いためにエラーが発生
   「curl: (35) error:0D0890A1:asn1 encoding routines:ASN1_verify:unknown message digest algorithm」
・OpenSSLが古い
 → /usr/local/openssl1とかに新しいバージョンをインストールして回避
  letsencrypt.shの冒頭に、PATHとLD_LIBRARY_PATHを定義して、こちらを優先するように設定
 → こっちのOpenSSLを使うcurlをコンパイル
・trコマンドが古い
 letsencrypt.shを実行すると「tr: オプションが違います — _」というエラー
 → 新しいバージョンのtrが含まれるcoreutilsを/usr/localにインストール
・bashコマンドが古い
 環境変数操作で「SAN+=~」ということをやってるがCentOS4のBASHでは非対応
 letsencrypt.shを修正して、CentOS4でも使える操作に変更
 「SAN+=”DNS:${altname}, “」→「SAN=”${SAN}DNS:${altname}, “」

・下記のエラーでうまく行かない

# ./letsencrypt.sh --cron --config /~/letsencrypt.sh/config.sh
Using config file /~/letsencrypt.sh/config.sh
Processing xxxxxx with SAN: xxxxx
 + Signing domains...
 + Generating private key...
 + Generating signing request...
 + Requesting challenge for xxxxxx...
  + ERROR: An error occurred while sending post-request to https://acme-v01.api.letsencrypt.org/acme/new-authz (Status 403)

Details:
{"type":"urn:acme:error:unauthorized","detail":"No registration exists matching provided key","status":403}  + Error: Can't retrieve challenges ()
#


 → 失敗した時のcertが悪さをしていた
  certsディレクトリの中身とprivate_key.pemを削除して再実行したところ成功

apt-get実行中にディスクがフルになったせいでapt-getができなくなった



apt-get upgrade中にディスクフルになってしまったために、
それ以後、apt-get upgradeが失敗するようになってしまった。

root@orangepiplus:~# apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
5 not fully installed or removed.
Need to get 0 B/91.1 kB of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n]; y
dpkg: error processing package gvfs-libs:armhf (--configure):
 package is in a very bad inconsistent state; you should
 reinstall it before attempting configuration
dpkg: dependency problems prevent configuration of gvfs-daemons:
 gvfs-daemons depends on gvfs-libs (= 1.24.2-0ubuntu0.1); however:
  Package gvfs-libs:armhf is not configured yet.

dpkg: error processing package gvfs-daemons (--configure):
 dependency problems - leaving unconfigured
dpkg: dependency problems prevent configuration of gvfs:armhf:
 gvfs:armhf depends on gvfs-daemons (&gt;= 1.24.2-0ubuntu0.1); however:
  Package gvfs-daemons is not configured yet.
 gvfs:armhf depends on gvfs-daemons (&lt;&lt; 1.24.2-0ubuntu0.1.1~); however:
  Package gvfs-daemons is not configured yet.
 gvfs:armhf depends on gvfs-libs (= 1.24.2-0ubuntu0.1); however:
  Package gvfs-libs:armhf is not configured yet.

dpkg: error processing package gvfs:armhf (--configure):
 dependency problems - leaving unconfigured
dpkg: dependency problems prevent configuration of gvfs-backends:
 gvfs-backends depends on gvfs (= 1.24.2-0ubuntu0.1); however:
  Package gvfs:armhf is not configured yet.
 gvfs-backends depends on gvfs-daemons (= 1.24.2-0ubuntu0.1); however:
  Package gvfs-daemons is not configured yet.
 gvfs-backends depends on gvfs-libs (= 1.24.2-0ubuntu0.1); however:
  Package gvfs-libs:armhf is not configured yet.

dpkg: error processing package gvfs-backends (--configure):
 dependency problems - leaving unconfigured
dpkg: dependency problems prevent configuration of gvfs-fuse:
 gvfs-fuse depends on gvfs (= 1.24.2-0ubuntu0.1); however:
  Package gvfs:armhf is not configured yet.

dpkg: error processing package gvfs-fuse (--configure):
 dependency problems - leaving unconfigured
Errors were encountered while processing:
 gvfs-libs:armhf
 gvfs-daemons
 gvfs:armhf
 gvfs-backends
 gvfs-fuse
E: Sub-process /usr/bin/dpkg returned an error code (1)
root@orangepiplus:~# 

解決方法
「apt-get –reinstall install 問題となってるパッケージ名」を実行する。

今回の場合、エラーとなったパッケージを全部指定すればいいのかな、と「apt-get –reinstall install gvfs-libs:armhf gvfs-backends gvfs-daemons gvfs:armhf gvfs-fuse」を実行してみたもののエラー

root@orangepiplus:~# apt-get --reinstall install gvfs-libs:armhf gvfs-backends gvfs-daemons gvfs:armhf gvfs-fuse
Reading package lists... Done
Building dependency tree
Reading state information... Done
0 upgraded, 0 newly installed, 5 reinstalled, 0 to remove and 0 not upgraded.
5 not fully installed or removed.
Need to get 0 B/91.1 kB of archives.
After this operation, 0 B of additional disk space will be used.
E: Internal Error, No file name for gvfs-daemons:armhf
root@orangepiplus:~#

では、と「apt-get –reinstall install gvfs-libs:armhf」と実行してみると、今度は成功。

root@orangepiplus:~# apt-get --reinstall install gvfs-libs:armhf
Reading package lists... Done
Building dependency tree
Reading state information... Done
0 upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 0 not upgraded.
5 not fully installed or removed.
Need to get 0 B/91.1 kB of archives.
After this operation, 0 B of additional disk space will be used.
(Reading database ... 111013 files and directories currently installed.)
Preparing to unpack .../gvfs-libs_1.24.2-0ubuntu0.1_armhf.deb ...
Unpacking gvfs-libs:armhf (1.24.2-0ubuntu0.1) over (1.24.2-0ubuntu0.1) ...
Setting up gvfs-libs:armhf (1.24.2-0ubuntu0.1) ...
Setting up gvfs-daemons (1.24.2-0ubuntu0.1) ...
Setting up gvfs:armhf (1.24.2-0ubuntu0.1) ...
Setting up gvfs-backends (1.24.2-0ubuntu0.1) ...
Setting up gvfs-fuse (1.24.2-0ubuntu0.1) ...
root@orangepiplus:~#

で、これ以降は、エラー無く、「apt-get upgrade」が実行できるようになりました。