2019年6月27日木曜日

イケてるncコマンド

先日Linuxで疑似チャットする方法として
ptsへのリダイレクトを紹介しましたが、
更にイケてるツールを発見しました。ncです。

このncコマンド、TCPやUDPでの送受信の出来合いの
テストツールを探していて見つけました。
ある端末でncをサーバとして立ち上げておき、
別の端末からサーバの宛先を指定してクライアントとして立ち上げると、
チャットツールになります。チョー便利。

具体的にはサーバ側で
$ nc -lu <ポート番号>
を実行しておき、クライアントで
$ nc -u <サーバのIPアドレス> <ポート番号>
を実行すると、お互いにメッセージ入力待ち状態になり、
メッセージがやり取りできます。
ここでオプションの'l'はサーバであることを示しており、
また'u'はUDPでの通信を表していて、
UDPなら1つのサーバに対して複数のクライアントから
メッセージを受信できたり、クライアント同士でも
チャットできることを期待してしまいますが、
残念ながらサーバとクライアント間の1対1の通信しかできません。
たくさんの人とチャットしたければポート番号を変えながら
相手の数だけncを実行しなければなりませんし、
それでも当然グループチャットにはなりません。

ちなみにオプションの'u'を外すとTCPでの通信となります。
TCPなのでUDPのときのような期待はしませんが、
UDP同様にサーバとクライアント間の
1対1の通信はしっかりできます。
ローカルで使う分にはUDPのほうがお手軽でしょう。
それならなぜTCPに対応しているのかって?
ncはチャットツールではなくて汎用の通信ツールですから。

それにしてもUNIX系のコマンドってまだ知らないものも多い。
奥の深い世界です。

2019年6月26日水曜日

LXCのコンテナ内からホストのUSB機器を使う

仮想環境ってほんと便利で、
ホスト環境に影響を与えることなく
ゲスト環境を好き勝手に構築できます。
lxcのコンテナは軽くて資源の融通もうまく、
ホストとの透過感もあり使いやすい。
滅多に使う必要ありませんが、
GUIアプリケーションも'-X'オプション付きで
sshでログインした上で実行すれば、
ログイン元にウィンドウが表示されしっかり使えます。

そんな中最近困ったのはコンテナ内から
ホストのUSBデバイスにアクセスすること。
がしかしこれも簡単。
ホスト側で例えば
# lxc-device add -n <コンテナ名> /dev/ttyUSB0
と実行すると"/dev/ttyUSB0"がコンテナ側に現れ、
これにアクセスするとホスト側の"/dev/ttyUSB0"が扱えます。
問題はホスト側に"/dev/ttyUSB0"が
存在する時でなければだめっぽいこと。
コンテナのconfigファイルに"lxc.cgroup.devices.allow ="で
ノード番号ごとに許可を与え、
コンテナ内でデバイスファイルを予め作っておけば
なんとかなりそうな気はするのですが、
とりあえず必要はないのできちんと調べていません。
誰か設定方法とかまとめてないかなぁ。

2019年6月25日火曜日

Ubuntu 18.04のWebDAVクライアント

Ubuntu 18.04からWebDAVサーバにアクセスしたく、
使えるWebDAVクライアントを探したところ
davfs2に行き着きました。
ということで使ってみることに。
まずはインストールから。以下を実行します。
なお、最初の2行はエラー回避のためのワークアラウンドです。
# apt install libneon27=0.30.2-2build1
# apt-mark hold libneon27
# apt install davfs2
最後の実行時に
特権を持たない (root 以外の) ユーザによる WebDAV リソースのマウントを許
可する場合は、ファイル /sbin/mount.davfs に SUID ビットを設定しなければ
なりません。

この選択肢を選ばない場合は、root だけが WebDAV リソースをマウントできま
す。この動作は後から 'dpkg-reconfigure davfs2' を実行することで変更でき
ます。

root 以外のユーザが WebDAV リソースをマウント可能にしますか?
                   <はい>                      <いいえ>     
のようなメッセージが表示されるので、
デフォルトの[いいえ]を選ぶほうがセキュリティ的にいいのでしょうが、
私はとりあえず[はい]を選んでおきました。

さて実際に使用してみます。以下を実行します。
# cd /mnt
# mkdir webdav
# mount -t davfs <WebDAVサーバのURL> /mnt/webdav
最後のコマンド実行時に、アクセス権限を得るための
ユーザー名とパスワードの入力を求められ、
さらにサーバ証明書の受け入れを許可させられます。
成功すれば"/mnt/webdav"へのアクセスにより
WebDAVサーバへアクセスできるようになります。
しかし、アクセスしようとすると
ちょっと長めなミニフリーズがよく発生しますし、
rootユーザーじゃないと書き込みはできないし、
巨大なファイルを扱うとまともに動かないという惨劇に。
使えんorz

で、GUIアプリケーションで
なにかいいのがないのかと探してみると…
最初から入ってました。
画面左端のダッシュボードから起動できる
いつもの[ファイル]アプリケーションです。
これを開いて[Ctrl]+[L]キーを押すとURL入力ボックスが現れるので、
davs://<サーバ名(or サーバのIPアドレス)>/<ディレクトリ>
を指定し、現れたウィンドウでユーザ名とパスワードを入力すると
普通にアクセスできるではありませんか。
しかも使ってみた感じ不具合らしきものはありません。
なんなんだよこの裏技的なのは!!

2019年6月24日月曜日

OneDriveの凍結

Hotmail.comの頃から持っているものも含めて
結構たくさん持っているMicrosoftアカウント。
一般的にはWindowsのログインに使ったり、
Outlookメールのアカウントとして使うやつです。
昔は無料で独自ドメインのホスティングができたので、
用もないのに取っていたり、とりあえず取っていたりと、
お世辞にも有効活用しているとは言えないものの、
アカウントが消されるのも困るので
用のあるメールが届く可能性はかなり低いと知りながらも、
定期的にOutlookにログインはするようにしています。

そんなアカウントの一部(独自ドメイン)にログインしたところ
「ご使用の OneDrive が間もなく削除されます」
というショッキングなタイトルのメールが届いていました。
メールの中身を確認すると過去2年間OneDriveを使用しておらず、
現在すでに凍結されていて、
凍結解除しないと近いうちに削除されるとか。
そういう面ではOutlookとOneDriveは別管理なようです。

ということでOneDriveにアクセスしてみると、
凍結解除操作のためのポップアップウィンドウが表示されており、
簡単に凍結解除操作ができました。
ただし凍結解除が完了するのに最大24時間かかるとのこと。
今度からは定期的にOneDriveにもアクセスするようにします。

2019年6月20日木曜日

Ubuntu 18.04でVNCクライアント

サーバを遠隔操作するといえば定番はsshですが、
GUIが必要となると私は昔からVNCです。
だってWindowsに付いてたRDPは上位エディションしか
使えなかったんですもの。

UbuntuではChromiumをインストールしていると
VNCviewerなるものが勝手に入っていたもので
VNCクライアントとして以前から使っていましたが、
これってChromiumのNaCl機能を利用していたみたいで
だいぶ前のバージョンからこれが廃止されて動作しないっぽい。

では代わりのVNCクライアント入れよっとか思い、
いろいろ物色していたのですが、なんとUbuntu 18.04には
標準で[Remmina]アプリケーションが入ってました。
アクティビティから検索してこれを実行し、
プロトコルに[VNC]を選んで接続先マシンの
IPアドレスを指定すると接続できました。

それにしてもアプリケーション名には
それらしい名前をつけておいてほしいですね。
[アクティビティ]から"VNC"を検索すると
[Remmina]は出てくるのですが、
何なのか想像できなかったため無視して
時間をだいぶ無駄にしてしまいました。

2019年6月19日水曜日

Ubuntu 18.04でデフォルトのビデオプレーヤーを変える

Ubuntu 18.04で動画ファイルをダブルクリックすると
標準のビデオプレーヤーが起動するのですが、
エンコード形式の関係で再生できないことが結構多い。
そんな時は
# apt install vlc
でインストールしたVLCを起動して
動画ファイルを開くのですがこれが面倒。
もちろんコマンドラインで
$ vlc <動画ファイル>
とか
$ cvlc <動画ファイル>
とか、あるいは
# apt install mpv
でインストールしたmpvで
$ mpv <動画ファイル>
とかする方法もありますが、
動画ファイルのダブルクリックで再生したいことだってあるんです。
標準のビデオプレーヤーを変更できないものか。

実はできるんです。
[設定]アプリケーションを起動して[詳細]メニューの
[デフォルトのアプリ]メニューから[ビデオ]項目を開き、
[VLCメディアプレイヤー]に変更すればいいだけです。
これで動画ファイルをダブルクリックすると
VLCが起動してちゃんと再生できます。
手間が減らせます。

2019年6月18日火曜日

Ubuntu 18.04でexFATなUSBメモリを読み書き

今どきの大容量USBメモリを使うなら
フォーマットはexFATだろ、とか思っていたのですが、
なんとUbuntu 18.04はデフォルトでは認識してくれないorz
しかし対応は簡単、
# apt install exfat-fuse exfat-utils
を実行すればいいだけです。

それにしてもexFATってあまり一般的ではないんでしょうか?
そういえば16GBのを買った時にはFAT32でしたし。
しかしexFATのほうが性能は良くなるでしょうし、
4GB以上のファイルを保存できるでしょうし。
64GBだとデフォルトでexFATなのかもしれませんね。
そんなのしばらく買う予定ありませんが。

2019年6月17日月曜日

wallを超えたチャットツール

あるLinuxマシンにssh等でリモートログインしている全員に対し
メッセージを送ることができるwallというコマンドがあります。
$ wall <メッセージ>
とかするとメッセージが伝わります。引数なしの
$ wall
だと続けて複数行のメッセージを入れ、
その後[Ctrl]+[D]キーを押せばまるごと伝わりますし、
標準入力が使えるので、
$ wall < readme.txt
$ ls -l  | wall
のような使い方も可能です。
リモートログインしてる側からもwallは使えるので、
オープンでかつ他人への迷惑を顧みない
テキストチャットとして使えなくもないのですが、
ローカルで開いているターミナルには送られないため
片通話状態になる欠点があります。
まあ想定される用途は管理者が何かする時に
予め皆に通知しておく程度のことなのでやむを得ません。
ということで私もあることは知っていますが、
有用に使ったことはないコマンドだったりします。

ところがwallそのものではないのですが同様のスタイルで
個別にメッセージが送れ、返事ももらえる方法を知った、
というか編み出しました。方法は以下の通りです。
まず、"who"コマンドを実行して
$ who
<アカウント名>  :0           <ログイン日時> (:0)
<アカウント名>  pts/<番号>        <ログイン日時> (<ログイン元IPアドレス>)
結果のアカウント名とログイン元IPアドレスから相手を特定し、
$ echo '<メッセージ>' > /dev/pts/<番号>
を実行して相手にメッセージを送ります。同時に
$ tty > /dev/pts/<番号>
で相手に対して返信先を知らせます。
なんならメッセージを送る際に
$ echo `tty`:'<メッセージ>' > /dev/pts/<番号>
として、よくあるチャットソフト的な表示にしてもいいでしょう。
なお相手には
/dev/pts/<送り元番号>:<メッセージ>
のメッセージが送られているので、その相手は
$ echo '<メッセージ>' > /dev/pts/<送り元番号>
で返事ができます。
シェル内でのテキストチャットが実現できます。

ただしちょっと問題が。
リモートログインユーザからローカルターミナルへ
会話を開始する際、宛先がわかりません。
なぜって"who"コマンドでptsデバイス番号が表示されないから。
そんな時は"who"と"ls -l /dev/pts/*"の実行結果から
推理するぐらいでしょうか。
間違った相手にまずいメッセージを
送らないよう注意が必要ですが。

2019年6月13日木曜日

UbuntuでGtkTerm

コマンドライン至上主義の私にとって、
Ubuntuで常用するGUIアプリケーションといえば
ウェブブラウザの[Chromium]くらいのものです。
あとはほとんどターミナルで済ませます。
ファイルのコピーだって、テキストファイルの編集だって。
ということで私のデスクトップには
いつでも大量のターミナルが開いています。

シリアルポートを扱うのもCUIの[minicom]だったりしますが、
これがそんなに使いやすいとは言えません。
ということでWindows上でTeraTermを使うことが多い。
UbuntuとWindowsがネットで繋がっていれば
それでもそんなに困ることもないんです。
それでもUbuntu上でシリアル通信したいことも。
そんな時見つけたのが[GtkTerm]。
Ubuntu上でTeraTermっぽく使えます。
インストールは
# apt install gtkterm
で可能ですが、通常シリアルポートは
一般ユーザのアクセスを禁止しています。
そこで実行しておきたいのが
# usermod -a -G dialout <ユーザ名>
# reboot
dialoutグループへ属するユーザは
シリアルポートへアクセスできるんです。

2019年6月12日水曜日

ショッピングバッグの修理

近くのスーパーマーケットでレジ袋が無料でもらえなくなってからもう何年経ったことか。
最初の頃はそれまでにもらってためていたレジ袋を流用していましたが、
そのうち家電量販店で粗品でもらった布製のトートバッグを使い初め、今も使っています。
容量はそう大きくないのでたくさん買う場合はもう1つ別のバッグと合わせて2つ体制です。
そのもう1つは任天堂からもらったピクミン柄です。
あー、Nintendo Switchでピクミン出ないかな。
ピクミン3の移植版なら個人的には要りませんが。

閑話休題。
そのショッピングバッグ、長い間使っていたためか、
車の中に置きっぱなしにしていて夏の紫外線にやられたのか、
持ち手がボロボロになってきました。
ということでPPベルトを買ってきて代わりに縫い付けました。
まあPPベルトよりエコバックを買った方が安く付いた可能性はありますが、
PPベルトはまだまだ余っているので何度でも直せます。
それに肩掛けの長さ調節する部分が分解したリュックサック
修理するのにも使えそうです。
生地が厚いので縫うのが大変ではありますが。

2019年6月11日火曜日

HDDにバッドセクタが

Ubuntu 18.04のPCで事件が起きました。
ある大きなファイルをコピーする途中でエラーが。
なんとHDDにバッドセクタがあるようです。最悪。
壊れたファイルはもう元には戻りません。
幸い大したファイルではないので
まあいっかで一蹴できましたが、
そうじゃなかったら大問題でした。
やはり日頃のバックアップって重要です。

ともかく、このHDDはまだ使いたいので
バッドブロックをマークして避けるようにしたほうがよさそう。
調べてみると色々方法はあるようですが、
私は以下のようにしてみました。
# badblocks -v -s<デバイスファイル> | tee ~/badblocks.txt
# e2fsck -l ~/badblocks.txt <デバイスファイル>
なおデバイスファイルには"/dev/sdb1"のように
パーティションを指定するようです。

2019年6月10日月曜日

Ubuntu 18.04をdhcpサーバに

dhcpサーバってルータやWiFi APのものを使うのが一般的ですが、
事情があって高度なことをやりたい場合、
Linuxサーバでやるのが簡単です。
# apt install isc-dhcp-server
でインストールして設定ファイルを編集すればいいのですが、
それで対応できないのが払い出し先インターフェイスの設定。
2つ以上NICがあるマシンで、
片方のNICだけにIPアドレスを配りたい場合の設定です。
この設定方法がUbuntu 18.04で変更されていて迷いました。
設定ファイル"/etc/default/isc-dhcp-server"の
INTERFACESv4=""
の行を
INTERFACESv4="eth0"
のように変更すればいいようです。
必要ならv6の方もやればいいでしょう。

2019年6月6日木曜日

GmailでIMAPできない

POP3やIMAP4でメールを受信していたのは遥か昔。
今どきはウェブメールがあれば十分、
もとい、Gmailがあれば十分なのです。

しかしそんな現代に時代錯誤な用が舞い込みました。
Androidの[メール]アプリケーションで
Gmail(G suite)アカウントをPOP3/IMAP4で受信したいと。
まあこれは以前やった経験があります。
やり方は面倒なのでここには書きませんが、
GmailのヘルプのPOPIMAPの設定方法を参照すれば何とかなります。

と思ってたら何とかなりませんでした。
正確に言うと受信はできるんですが送信ができない。
いろいろ調べてわかったのはセキュリティが
勝手に強化されていること。
セキュリティ設定ページ
[安全性の低いアプリのアクセス]をオンにしていないと
SMTP(メール送信)サーバーへのログインが失敗してしまうのです。
昔はこんなことやった記憶がないので、
最近(近年)追加されたのだと思います。
オンラインサービスって日々アップデートされるのはいいんですが、
それで迷惑を被ることも多々あるんですよね。

2019年6月5日水曜日

メルタンゲットだぜ

スマートフォンの[Pokémon GO]ではNintendo Switch
ポケットモンスター Let's Go! イーブイポケモンを送ることで、
メルタンを召喚できる[ふしぎなはこ]が入手できます。
しかしこれは使い捨て。存在し続けますが使用権はなくなります。
一度使用すると一定日数(現行3日?)経った後に
もう一度ポケモンをSwitchに送ることで再入手せねばなりません。
面倒ですが仕方ありません。
ここで1つ疑問が。
[ふしぎなはこ]をもらったのとは別のSwitchに送ったらどうなるの?
とはいえ現状試せそうにないので気にしないことにします。

[ふしぎなはこ]を使うと30分メルタンが頻繁に出てきますがせいぜい20匹。
感覚的には前のを捕獲して一定時間経過すると次が発生するようで、
捕獲にもたついていると時間切れで総捕獲数が減るような気がします。
実際私は18、19匹しか取れてません。
リアルな移動はメルタン大量発生の条件ではないようなので
じっとして黙々とプレーすればよく、
そうすれば他のポケモンはあまり出てはきません。
ということで目移りすることはないにしろ、
リアルな邪魔は入るとかなり困ります。
ともかく捕獲時にパイルの実を使い、
いらないメルタンを博士に送っても1回で得られるアメは最大でも140個。
メルタンをメルメタルに進化させるためにはアメが400個必要
なのでうまくすると3回の作業で貯まりそうです。
2週間あればなんとかなります。
もちろんその後の強化や2匹目の進化等アメは要りようですが。
なお進化は何かいいタイミングまでするつもりはありません。
急ぐ旅でもありませんし。

2019年6月4日火曜日

Ubuntu 18.04でLXC

Ubuntu 14.04で動かしていたKVMの仮想マシンのイメージは
問題に出くわしたもののUbuntu 18.04に持ってこれました。
LXCも大して変わらないかと思っていましたが…

まずはインストール。以下を実行します。
# apt install lxc
旧環境から"/var/lib/lxc/<ゲスト名>"ディレクトリを
まるごと新環境に持ってきます。ところが
# lxc-ls -f
を実行しても
Failed to load config for <ゲスト名>
と怒られます。試しに
# lxc-start -n <ゲスト名> -o debug -l debug
を実行してみると
lxc-start: <ゲスト名>: parse.c: lxc_file_for_each_line_mmap: 100 No such file or directory - Failed to open file "/usr/share/lxc/config/ubuntu.common.conf"
とのこと。確かにこのファイルはありません。
設定ファイル"/var/lib/lxc/<ゲスト名>/config"を見ると
このファイルは"lxc.include="で設定されています。
そこでそこを存在する"/usr/share/lxc/config/common.conf"に変更してみると
起動はできるようになったようだが、
# lxc-console -n <ゲスト名>
してもコンソールに繋がらない。
それでも"lxc-attach"ならアクセスでき
# lxc-attach -n <ゲスト名> ifconfig
とかやると返事が返って…
って、あれ? IPアドレスがIPv6しかない?
# lxc-info -n <ゲスト名> -i
してもやっぱりIPv4アドレスは無い。
その後よくよく調べてみると起動シーケンスで
立ち上げているはずのデーモン類が全く立ち上がってない!
この時点でポーティングは諦めました。
ポータビリティはLXCよりKVMの方が上なのかも。

ということでゲスト環境を新規作成することに。
これがまた14.04から随分変わっていて…
まず実行すべきは
# lxc-create -t download -n <ゲスト名>
でした。利用可能なゲストの種類が一覧されるので、
対話的に[Distribution:]に対して"ubuntu"、
[Release:]に対して"bionic"(Ubuntu 18.04のこと)、
[Architecture:]に対して"amd64"と入力すると
ダウンロードが始まります。

完了後は
# lxc-start -n <ゲスト名>
でゲストの起動はできますが、
以前のようにそのままコンソールに繋がりません。
結構あせりましたが、
# lxc-attach -n <ゲスト名>
でコンソールに入れました。
なおこれを実行するにはホスト側のroot権限が必要で、
その際ゲスト側のrootとして入れます。
ちなみにゲスト側のrootユーザにパスワードを設定していても
パスワード無しで入れる便利仕様になってます。

ここまででゲストの起動は可能となったので
いくつか設定をすることに。
まずは以下の感じでアカウント関連を。詳細の説明は省きます。
# passwd
# groupadd <グループ名>
# useradd -m -g <グループ名> -s /bin/bash -N <ユーザ名>
# passwd <ユーザ名>
# userdel -r ubuntu

次にネットワーク。
ホスト側の設定ファイル"/var/lib/lxc/<ゲスト名>/config"の
lxc.net.<番号>.type = veth
lxc.net.<番号>.flags = up
lxc.net.<番号>.link = <ホストのインターフェイス名>
lxc.net.<番号>.hwaddr = <ゲストのMACアドレス>
辺りを弄ります。ホストのブリッジに接続するのが一般的なので、
例えば
lxc.net.0.type = veth
lxc.net.0.flags = up
lxc.net.0.link = br0
lxc.net.0.hwaddr = 00:11:22:33:44:55

lxc.net.1.type = veth
lxc.net.1.flags = up
lxc.net.1.link = br1
lxc.net.1.hwaddr = 00:11:22:33:44:56
な感じになるでしょうか。
ゲストでは設定ファイル"/etc/netplan/10-lxc.yaml"を
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: no
      addresses: [192.168.1.100/24]
      gateway4: 192.168.1.1
      nameservers:
        addresses: [192.168.1.1, 192.168.1.2]
    eth1:
      dhcp4: true
のような感じでカスタマイズし、
# netplan apply
を実行して反映させます。

それからリモートログインできるようにsshサーバを
以下の手順で。
# apt install openssh-server
# update-rc.d ssh defaults
# reboot
これで最低限なんとかなるかな。

2019年6月3日月曜日

おかわりSIMからの移行

私は通信できるスマートフォンを2台持ち歩くことが多く、
サブ機には日本通信の[おかわりSIM]を挿しています。
実はこの[おかわりSIM]はすでに販売が終了しており、
[190PadSIM]への無料のプラン移行も案内されています。
移行には長所も短所もあり
私のニーズには移行が微妙で長い間保留にしておりました。
そのニーズが最近微妙に変わり移行してもいいような気に。
ニーズを変えたのは先日購入したモンスターボール Plusです。

そもそもなぜスマートフォンを2台使っているかと言うと、
歴史的経緯や深い事情はあるものの、
現状表面的にはIngressとPokémon GOの同時プレーです。
特にどこかに旅行したときなどは必須です。

しかし普段はと言うと、サブ機ではIngressで
ちょっとハックできればいい程度。
それでも1ヶ月も使えばそれなりの通信量に。
これが100MBに収まるならSIMの移行でお得になりますが、
これまではちょっと無理でした。

ところがメイン機+モンスターボールPlusなら
Pokémon GOをバックグラウンド実行しつつ
Ingressを画面上で操作できます。
普段ならこれでもなんとかなり、
サブ機は起動の必要ありません。
サブ機の料金の節約が見えてきました。
もちろんどちらも全力でプレーする場合には
サブ機も稼働させ、こちらにも相応の通信量を支払います。
[190PadSIM]プランはこういうのにピッタリ。

ということで移行手続きを。
my b-mobileにログインして
[SIMカード電話番号]で契約変更したい電話番号を選択し、
[サービス変更]をクリックして、
[選択可能なプラン]に[b-mobile S 190PadSIM(ドコモ回線)]が
表示されているのを確認の上[このサービスに変更する]をクリックします。
開いたページには契約に関することがたくさん書いてありますが、
ページ下端に移動して確認項目全てにチェックをつけ、
18歳以上か未満かを選択した上で[次へ]をクリックし、
契約内容の通知方法について選択して[次へ]をクリックして、
最後に[申し込む]をクリックすれば完了です。
次の料金計算月から適用となります。

翌月度になり新プランが適用されると
ログイン後に[上限設定]が設定できます。
設定の下限は3GBと私としては多過ぎですが仕方ありません。
増やすのはいつでも制限なくできるようなので、
とりあえず小さめにしておいたほうがいいでしょう。

さて、これで最低月額190円とはなりましたが、
果たして本当にそれで済むのか。
基本電源入れないように気をつけねば。