Hyper-V上のUbuntuにLIS(Linux Integration Services)をインストールする。

UbuntuをHyper-Vで実行していると遅いなと感じる場合はMicrosoftが提供するLinux Integration Services(LIS)をインストールすると改善する可能性があります。

最初に、 /etc/initramfs-tools/modules に次の行を追加します。

$ sudo vi /etc/initramfs-tools/modules
hv_vmbus   # 追加
hv_storvsc # 追加
hv_blkvsc  # 追加
hv_netvsc  # 追加

次のコマンドを実行して modules ファイルを再初期化し、仮想ツールをインストールしてマシンを再起動します。

$ sudo apt install linux-virtual linux-cloud-tools-virtual linux-tools-virtual
$ sudo update-initramfs -u
$ sudo reboot

再起動されると、LISがシステムに登録されます。 インストールされているかを確認するには、ターミナルでlsmodを実行し、hid_hyperv、hv_netvsc、hv_utils、hv_storvc、hv_vmbus が存在する場合、LISのインストールは成功しています。

Docker for Windows を WSLで使う

Docker for Windowsをインストールする

 まずは、Docker for Windowsをインストールします。
 インストールが終わったら、画面右下のシステムトレイにあるDockerアイコンから設定画面を開きます。

 下記項目にチェックを入れて、TLSなしでデーモンに接続できるようにします。
 これにより、ローカルのWSLインスタンスが、Docker for Windows内で実行されているDockerデーモンに接続できるようになります。 デーモンはlocalhostにのみバインドされているため、ネットワーク上の他のマシンは接続できません。

Dockerのインストール

Docker公式HPに記載のあるとおりDockerをインストールします。

$ sudo apt update
$ sudo apt install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io

docker-composeもインストールします。

$ sudo curl -L https://github.com/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

sudoしなくてもdockerコマンドを実行できるようにdockerグループにユーザーを追加します。

$ sudo usermod -aG docker $USER

Docker for Windowsに接続するために以下の設定を.bashrcに追加します。

$ echo "export DOCKER_HOST=tcp://localhost:2375" >> ~/.bashrc && source ~/.bashrc 

dockerが動くようになっていることを確認します。

$ docker info
$ docker-compose --version

ボリュームマウントのための設定

WSL上ではドライブは /mnt/d にマウントされるのに対して、Docker for Windowsでは内部で /d にマウントされているため、そのままで空のボリュームをマウントしてしまいます。

この対策として、/etc/wsl.conf に root=/ の設定を追加することで /mnt ではなく / にマウントされるようになります。

$ vi /etc/wsl.conf
[automount]
root = /
options = "metadata,umask=22,fmask=11"

設定した後、一旦ログアウト/ログインするか、以下のコマンドをコマンドプロンプトで実行してWSLを再起動すると / に各ドライブがマウントされるようになります。

C:\> net stop LxssManager
LxssManager サービスを停止中です.
LxssManager サービスは正常に停止されました。
C:\> net start LxssManager
LxssManager サービスを開始します.
LxssManager サービスは正常に開始されました。 

また、別の方法として、/mnt/d を /d にマウントする方法があります。

$ sudo mkdir /d
$ sudo mount –bind /mnt/d /d

ただし、この方法だと.bashrcに以下のようにコマンドを追加しておく必要があります。

$ echo "sudo mount --bind /mnt/c /c" >> ~/.bashrc && source ~/.bashrc

$ # パスワードなしでマウント出来るようにしたい場合は以下の設定を追加する
$ sudo visudo
$ username ALL=(root) NOPASSWD: /bin/mount

Kubernetes 1.17にしたら起動しなくなった時

Kubernetesのパッケージを一部ホールド(apt-mark hold)し忘れて1.17にアップグレードしちゃいました。そしたら、Nodeが起動しなくなっちゃいました。

$ kubectl get node
NAME      STATUS     ROLES    AGE   VERSION
testvm1   NotReady   master   46d   v1.17.0

kubectl describeでノードの状態を調べると以下のようなログが出てました。

$ kubectl describe node testvm1
略
 Failed to initialize CSINodeInfo: error updating CSINode annotation:  timed out waiting for the condition; caused by: the server could not  find the requested resource 
“Kubernetes 1.17にしたら起動しなくなった時” の続きを読む

複数のm2tsファイルを結合して1つにする方法

以下のようにMPEG ts(トランスポートストリーム)ファイルを結合するだけで結合できると思います。

 $ cat file1.m2ts file2.m2ts file3.m2ts > output.m2ts

しかし、 前述のcatでの結合は一般的に機能しますが、タイムコードの問題により、一部のメディアプレーヤーで問題が発生する可能性があります。

“複数のm2tsファイルを結合して1つにする方法” の続きを読む

Windows10(WSL)にHomebrewを入れる

WSLには開発用ツールが入っていませんので、まずはbuild-essentialをインストールします(あとでもいいかも?)。
$ sudo apt install build-essential

Homebrewの公式HPにも記載のある次のコマンドを実行します。

$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install.sh)"

次の変数を~/.profileに追加します。

export HOMEBREW_PREFIX="/home/linuxbrew/.linuxbrew"
export HOMEBREW_CELLAR="/home/linuxbrew/.linuxbrew/Cellar"
export HOMEBREW_REPOSITORY="/home/linuxbrew/.linuxbrew/Homebrew"
export PATH="/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:$PATH"
export MANPATH="/home/linuxbrew/.linuxbrew/share/man:$MANPATH"
export INFOPATH="/home/linuxbrew/.linuxbrew/share/info:$INFOPATH"

Macのsedで改行を出力する

Macのsedで特定の文字を改行に変換したいと思ったことがあると思いますが、Macでは ‘\n’ が出力できません。

$ echo "pen#apple#pen#pineapple" | sed 's/#/\n/g'
pennapplenpennpineapple

こんな感じのことをすれば出力できるようなのですが面倒です。

ってことで、

“Macのsedで改行を出力する” の続きを読む

[Mac] Finderに表示されないライブラリ(Library)フォルダ等を表示する

Macでは通常、アプリケーションが利用する設定情報など重要な情報は /Users/ユーザー名/Library に保存されてます。
しかし、このフォルダは重要なのでFinderからは通常見えなくなっています。



どこで可視/不可視を判別をしているかというと、各ファイル(フォルダ)にはchflagsというコマンドで設定できるフラグが設定されています。
これは以下のようにlsコマンドにOオプションをつけると確認できます。

“[Mac] Finderに表示されないライブラリ(Library)フォルダ等を表示する” の続きを読む

[Mac] Finderで見えないファイルを表示する

Finderを使っていると「.(ドット)」で始まるUNIX特有の不可視ファイルやシステムが利用する重要なファイルなど、一部不可視設定になっているファイルがFinder上で表示されなくなっていると思います。

これらはターミナルからコマンドを使うとアクセスすることができますが、以下のコマンドを実行することでFinder上からも見えるようにすることができます。

“[Mac] Finderで見えないファイルを表示する” の続きを読む

SSHの環境変数を利用してiptablesのポートを解放する

安いVPSなどを借りて、普段はSSHだけ解放しといて、SSH以外のポートは自宅(社内)からのみアクセスできるようにしたいと思いました。

アクセス元のIPが固定であれば特に問題ないのですが、動的に割り当てられる環境だと毎回変わってしまうので、SSHの環境変数を利用して、SSHログイン後に実行するとフィルターが解除されるような次のスクリプトを作ってみました。

“SSHの環境変数を利用してiptablesのポートを解放する” の続きを読む