Pengwinでマウントが解除されていたら…

どうやらPengwinは再起動したりするとマウントが解除されるっぽい

(と書いたけど、もしかしたらWSL2の仕様(もしくは問題)かも)

たまにアップデートのタイミングやらIPアドレスが変わったらやらでPengwin(WSL2)が再起動されるんだけど、そのときにドライブのマウントが解除されてしまう。

ちょっと悩んだけどひとまずWSL上でLinuxのドライブマウントコマンドで解決。

$ sudo mount -t drvfs Z: /mnt/z

(追記:2020/09/30)もしWSL上のnpmとかpnpmでエラーが出る場合は、こちらの感じで。

$ sudo mount -t drvfs C: /mnt/c -o metadata,uid=1000,gid=1000,umask=22,fmask=111

(もちろんドライブレターは自分の環境に合わせる)

「-t drvfs」というのは、WindowsのドライブをWSLでマウントするときのお決まりのオプションということで、何も考えずに付けておく。

参考
Windows 10の「WSL」でネットワークドライブなどをマウントする

tar EPERM: operation not permitted, futime

OpenSUSE on Windows 10 へのSSH接続

WSLでLinux使えるようにしたい

Microsoft Store からインストールが出来、手軽に使えるようになった気がするのでLinux環境を構築したい。

仕事でCentOSを使っているのでyumを採用しているディストリビューション使いたかったけど、まだ公開されていないのでOpenSUSEをインストールしてみた。OpenSUSEは使うのも初めて。

とにかく何も入ってない

かなりピュアに近い状態のOSなので、ことある毎に”インストールされてない”みたいなエラーメッセージが出てくる。

必要な物がリストになっているならいいけど、そうでないならコマンド叩く毎に毎回インストールを繰り返すことになる。

ひとまずsshで接続

とりあえずWindows から sshで接続出来るところまでを今回はやってみます。

$ zipper install openssh

OpenSSH を入れただけだと各種ホストキーが存在しないのでこれを生成。

$ ssh-keygen -A

次にアカウントのssh 接続用鍵をWindowsでしたいところだけど、環境によって発行できないのでOpenSUSE上で生成して、id_rsaの中身を表示する。

$ cd ~/.ssh
$ ssh-kegen -t rsa
$ cat ~/.ssh/id_rsa
$ cat id_rsa.pub >> authorized_keys

pubファイルはauthorized_keysへの登録を忘れずに。

中身をコピーしたら、ローカルの適当な場所に鍵ファイルとして保存。

ちなみにOpenSUSE上からWindowsのファイルへアクセスするには
/mnt/c/ でCドライブへアクセスできる。あとはファイルをコピーなりなんなりすることも可能。

接続時の設定は下記の感じで行けるはず。

Host opensuse
User ユーザー名
Port 22
HostName 127.0.0.1
identityFile .ssh/id_rsa

各種設定は、環境に合わせて変更よろしく。

これでひとまずOpenSUSEへの ssh アクセスが可能になるはずです。

Vagrant でvboxsfを使ってmount出来なくなった

なぜかmount出来なくなったようだ

最近新しいboxを使ってVMを構築しようとしたら下記のエラー。

Vagrant was unable to mount VirtualBox shared folders. This is usually
because the filesystem "vboxsf" is not available. This filesystem is
made available via the VirtualBox Guest Additions and kernel module.
Please verify that these guest additions are properly installed in the
guest. This is not a bug in Vagrant and is usually caused by a faulty
Vagrant box. For context, the command attempted was:

最初はGuest Additionsをアップデート

VirtualBoxをアップデートしていたのでゲストのGuest Additionsをアップデートのためにプラグイン導入。

vagrant plugin install vagrant-vbguest

それでもvboxsfのエラーは修正できず。
なんぞやと探ってみるとmount.vboxsfが無いご様子

mount.vboxsfへのシンボリックリンク貼り直し

mount.vboxsf -> /opt/VBoxGuestAdditions-5.1.20/other/mount.vboxsf ← ファイルが存在しない

Guest Additionsのミスなのか分からないが、とりあえずエラーなのでここを修正する。
下記の場所にあるという情報なのでここへシンボリックリンクを貼り直す。

rm /sbin/mount.vboxsf
ln -s /usr/lib64/VBoxGuestAdditions/mount.vboxsf /sbin/

これでVM を再起動すれば完了!

CentOS (Vagrant) でPuppetのGPGキーエラー

CentOS 6.7のvagrantイメージで出るエラー

Downloading Packages:
warning: rpmts_HdrFromFdno: Header V4 RSA/SHA1 Signature, key ID ef8d349f: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-puppetlabs-PC1

The GPG keys listed for the "Puppet Labs PC1 Repository el 6 - x86_64" repository are already installed but they are not correct for this package.
Check that the correct key URLs are configured for this repository.

PuppetのGPG KEYのライセンス切れらしい

というわけで、下記の場所からひとまず新しいGPG KEYを取得して使用できるようにする

wget http://yum.puppetlabs.com/RPM-GPG-KEY-puppetlabs
wget https://yum.puppetlabs.com/RPM-GPG-KEY-puppet
rpm --import RPM-GPG-KEY-puppet
rpm --import RPM-GPG-KEY-puppetlabs

おそらくこれで使えるようになるはず。

systemd-nspawnを使ってみた

使ってみた

当初は conoha に立てた Arch Linux へ Docker をインストールして、そこでredisとかnginxとかを動かそうかと調べていた。
しかし、systemdが動いてるなら systemd-nspawn なるコンテナ型仮想化システムがいい感じだと風の噂で聞いたのでこちらを試すことにした。

習うより慣れてみる

コンテナ化の知識は全くなく、Dockerでさえどうやって使うのかさえ分からなかった。
自分で構築したことでそれなりに理解出来た…気がする。

以下はとりあえず、Arch Linux のsystemd-nspawn の解説をかいつまんで進行します。
ぶっちゃけちゃると、今回の記事の情報はArchWikiに全部載ってます。
ArcyWikiは、Linuxに関する基本的なところから充実の内容なのでビギナーの方からでもお勧めです。

コンテナの作成

mkdir ~/MyContainer
pacstrap -i -c -d ~/MyContainer base

コンテナの手動起動

systemd-nspawn -bD ~/MyContainer

-bDn という感じで書くとエラーで起動しないです。

コンテナのサービス起動

systemctl enable machines.target
mv ~/MyContainer /var/lib/machines/MyContainer
systemctl enable systemd-nspawn@MyContainer.service
systemctl start systemd-nspawn@MyContainer.service

トラブルシューティング

pacstrapがインストールされていない

sudo pacman -S arch-install-scripts

上記のスクリプトをインストールすることでいろいろ便利スクリプトが入る。

ログインが出来ない

arch-nspawn login: root
Login incorrect

こう出たときはコンテナのディレクトリ上にある /etc/securetty のターミナル名のリストに pts/0 を追加。このファイルはホストから開く(どっちにしてもログインできないので)。

ホストとRedisコンテナとuwsgiコンテナをProxyで繋いだりしたのでそこら辺も書く予定。