Windows XPからSambaサーバへ接続できない

OS: Windows XP Home Edition
Samba 4.8.0

いつの頃からかWindows XPからSambaサーバへアクセスできなくなって困った。ユーザ名、パスワード共に正しい筈であるのにアクセスを拒まれるのである。sambaサーバのログを確認してみるとこういう具合であった。

$ less /usr/local/samba/var/samba.log
[2017/09/22 21:56:31.551107,  2] ../libcli/auth/ntlm_check.c:430(ntlm_password_check)
  ntlm_password_check: NTLMv1 passwords NOT PERMITTED for user guro

NTLMv1という認証の方式は容認しない旨、ログに記録されている。これを変更してNTLMv2で認証をおこなうことで回避できるようである。変更するためのレジストリは次のようなものであった。取りうる値は0から5の整数で、デフォルトでは0であるという。

HKLM\SYSTEM\CurrentControlSet\Control\Lsa
Name : LmCompatibilityLevel
Type : DWORD

クライアントとしてNTLMv2での認証をおこなうには3以上の数値にセットすればよいようである。コマンドプロンプトから一思いにシュッと設定するのであればこのような具合である。

C:\>reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LmCompatibilityLevel /t REG_DWORD /d 5 /f

これで無事Sambaサーバへアクセスできるようになった。

参考:
LmCompatibilityLevel

RaspbianにLXDを導入する

Raspberry Pi 3 Model B
OS: Raspbian Stretch lite March 2018

RaspbianではaptコマンドでLXDパッケージを導入することができないようであるからSnappyというパッケージマネージャで以ってインストールするのがよいようである。先んじてaptコマンドでlxcとsnapdパッケージをインストールしておく。

$ sudo apt install lxc snapd
$ sudo snap install lxd

$ snap list
Name  Version    Rev   Tracking  Developer  Notes
lxd   3.0.0      6661  stable    canonical  devmode

lxdコマンドは/snap/binへ配置されるようであるからパスを通すぞと息巻いていたらすでに開通済みであり拍子抜けしたものである。どうやら/etc/profile.d/apps-bin-path.shがこの役割を担っているようであった。

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games:/snap/bin

$ cat /etc/profile.d/apps-bin-path.sh
# Expand the $PATH to include /snap/bin which is what snappy applications
# use
PATH=$PATH:/snap/bin

然し乍らsudoで実行する際には/etc/sudoersにあるsecure_pathの影響が及ぶからこのままでは「sudo: lxd: コマンドが見つかりません」と出て終いである。そうであるからsecure_pathにも/snap/binを追加する。

$ sudo visudo
#Defaults       secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

そうしたらsudo lxd initで初期設定をおこなう。クラスタリングモードで実行するか否かやストレージなどに関する様々な問いかけがあるけれどもひとまずはすべてデフォルトのまま通した。

$ sudo lxd init
Would you like to use LXD clustering? (yes/no) [default=no]:
(snip)

なんらかコンテナの操作をしようとするとこうである。パーミッションの設定がソケットファイルへの接続を許してくれない模様である。パーミッションを確認するとrootユーザとlxdグループにだけ読み書きを許すような情勢である。

$ lxc list
If this is your first time running LXD on this machine, you should also run: lxd init
To start your first container, try: lxc launch ubuntu:16.04
Error: Get http://unix.socket/1.0: dial unix /var/snap/lxd/common/lxd/unix.socket: connect: permission denied

$ sudo ls -l /var/snap/lxd/common/lxd/unix.socket
srw-rw---- 1 root lxd 0  4月 11 21:50 /var/snap/lxd/common/lxd/unix.socket

このままではユーザpiがたいへん困るのでlxdグループに追加するとよい。なお続けざまにコンテナを操作しようとしても同じエラーメッセージを頂戴したので一旦ログアウトして再度ログインするとよさそうである。

$ sudo gpasswd -a pi lxd
ユーザ pi をグループ lxd に追加

これでコンテナの操作がほしいままになった。

参考:
Linux Containers – LXD – オンラインでの試用

Raspberry Pi 3 Model Bの本体に付いているLEDの点滅を自在に操作する

Raspberry Pi 3 Model B
OS: Raspbian Stretch lite March 2018

緑のLEDを司るファイルは /sys/class/leds/led0/、オレンジのLEDを司るファイルは /sys/class/leds/led1/ 以下に配置されているようである。何をきっかけにLEDを点滅させるかはtriggerファイルの内容を確認すればよろしい。デフォルトでは緑のLEDがmmc0、オレンジのLEDがinputである。

$ cat /sys/class/leds/led0/trigger
none (snip) panic mmc1 [mmc0] rfkill-any rfkill0 rfkill1

$ cat /sys/class/leds/led1/trigger
none (snip) default-on [input] panic mmc1 mmc0 rfkill-any rfkill0 rfkill1

mmc0はSDカードにアクセスがあった時に点滅する。inputはなんだかよくわからないが何しろinputであるからなんらかの入力であろうと思う。heartbeatやtimerを選択すると規則的に点滅させることができる。じっと眺めているとまばゆさで目が潰れてしまう。

heartbeatを選択したときのLEDのようす

点滅の制御はbrightnessでおこなう。0から255までの値を取り0で消灯、1~255で点灯する。数値の大小で輝度が変えられるように見えるけれどもどうやら一様な明るさである。なおbrightnessの数値を0に変更するとtriggerは勝手にnoneへ変更された。

$ sudo su -c "echo 0 > /sys/class/leds/led0/brightness"
$ sudo su -c "echo 1 > /sys/class/leds/led0/brightness"

一秒ごとに緑のLEDを明滅させる拙いシェルスクリプトled.shは概ねこんな具合である。あとはsudo bash led.shとすれば緑LEDが毎秒明滅するようになった。

#!/bin/bash

if [ $(id -u) != '0' ]; then
  echo 'Run as root.'
  exit 1
fi

GREEN='/sys/class/leds/led0'
trap 'echo mmc0 > ${GREEN}/trigger; exit 1' 1 2 9 15
echo none > ${GREEN}/trigger

while true
do
  echo 0 > ${GREEN}/brightness
  sleep 1
  echo 1 > ${GREEN}/brightness
  sleep 1
done

参考:
Can we control the on-board leds
How do I control the system LEDs using my software?
Are there other act_led_trigger options besides “mmc” and “heartbeat”?

Cドライブ直下にあらわれたmsdia80.dllについて

OS: Windows 10 version 1709 64bit

いつの頃からか知れないけれどもCドライブの直下にmsdia80.dllという名のファイルが居る。Cドライブの直下が混雑するのは好きでないから何とかならないかと調べると、64bitのOSにMicrosoft Visual C++ 2005 再頒布可能パッケージをインストールしたことが原因であるという。本来あるべき場所は

%programfiles%\Common Files\Microsoft Shared\VC

ということであるから示されている回避策を参考にして移動する。コマンドプロンプトを管理者で起動してファイルを移動したあとにregsvr32とか言うコマンドで以ってdllを登録し直すのである。そうすると「~msdia80.dll の DllRegisterServer は成功しました。」というダイアログが出現するから恙無く移動できた模様である。

c:\>move msdia80.dll "%programfiles%\Common Files\Microsoft Shared\VC"
c:\>regsvr32 "%programfiles%\Common Files\Microsoft Shared\VC\msdia80.dll"

なお、msdia80.dllのプロパティを具に見てゆくと製品名にMicrosoft Visual Studio 2005とあるから確かにMicrosoft Visual C++ 2005 再頒布可能パッケージと繋がりがありそうな風情である。またmsdiaがMicrosoft Debug Information Accessorの略ではなかろうかということも分かる。

参考:
Microsoft Visual C++ 2005 再頒布可能パッケージ (x64)
The Msdia80.dll file is installed in the root folder of the boot drive when you install the Visual C++ 2005 Redistributable Package by using the Vcredist_x64.exe file or the Vcredist_ia64.exe file

bcで小数の比較をおこなう

[コマンドは整数同士しか比較しないので小数点を含む数があらわれるとたちまち「integer expression expected」というエラーに見舞われる。そうすると小数の比較を[コマンドでも可能にする工夫を凝らすか別の方法を模索しなければならない。暇を掛けずにやるならbcがよさそうである。bcにパイプで不等式を渡してやると関係を満たさないものは0、満たすものは1を返してくる。

$ echo '1.99 == 2.00' | bc
0
$ echo '2.00 != 2.00' | bc
0
$ echo '1.99 > 2.00' | bc
0
$ echo '1.99 >= 2.00' | bc
0

$ echo '2.00 == 2.00' | bc
1
$ echo '1.99 != 2.00' | bc
1
$ echo '1.99 < 2.00' | bc
1
$ echo '1.99 <= 2.00' | bc
1

なおbcはbasic calculator或いはbench calculatorの略のようであるけれどもはっきりした出典は探し当てられなかった。

参考:
bc (programming language)