WSL上のUbuntuでhwclockコマンド使用不可

WSL上のUbuntu 20.04にて、ハードウェアクロックにアクセスするコマンド hwclockを実行したときに、このようなメッセージが出て使用できない場合があります。

$ sudo hwclock
hwclock: 既知のいずれの方法を使用しても、ハードウェアの時計にアクセスすることができません。
hwclock: Use the --verbose option to see the details of our search for an access method.

ホストであるWindowsのクロックと、WSL上のUbuntuで時刻がずれる場合があります。その際にこのコマンドを叩いて、時刻を合わせる訳ですが、このような状態だとそれが使えません。

ひょっとして、と思ってWSLのバージョンを確認してみると。。。

>wsl -l -v
  NAME                   STATE           VERSION
* Ubuntu-20.04           Running         1

WSL2にしていたつもりが、WSL1のままでした。。。

WSL1からWSL2に変更しますと(参考 https://tamosblog.wordpress.com/2021/07/20/migration-from-wsl1-to-wsl2/ )、

$ sudo hwclock
2021-10-17 19:04:59.955002+09:00

はい、ちゃんと実行できました。

WSL上のUbuntu 18.04を20.04に移行

はじめに

LTSですし、別にまだ18.04のままでも良かったのだけど、もう2021年10月ですし、20.04LTSがあるのに3年以上も前のバージョンを使い続けるのもねぇ、って感じがしたのと、WSL1の時から、これまでWindowsファイルシステムをマウント(/mnt/c/Users/hoge/)してそれを作業用ディレクトリとして使用していたのですが、WSL2にしたとたん、ファイルアクセスがもっさりするようになった。例えば、RubyのJekyllを使用したときにJekyll serverのコマンドを叩いてから起動が完了するまで4分間弱もかかるようになってしまった。

WSL2になってから、WindowsからWSLのファイルシステムへのアクセスも容易になったので、WSLのファイルシステム、つまり/home/hoge を作業用ディレクトリとして利用していこうと思い、ついでに Ubuntu-20.04 にUPしてしまえ!ってことで、今回20.04に変えてみたので記録として残しておく。

ちなみに、過去に WSL1 に Ubuntu 18.04 をインストールしたときの記録はこちら。

その時は、RやEmacsも入れていたけど、RはWindows版を利用すれば良いし、VSCode 使用するようになってからEmacsも使わなくなってしまったので、今回は入れない。

今の状況はこんな感じ。

C:\\Users\\furuya>wsl -l -v
NAME STATE VERSION

- Ubuntu-18.04 Running 2
  docker-desktop-data Running 2
  docker-desktop Running 2

.wslconfig」は特に関係ないけど上げておく。

C:\Users\furuya>type .wslconfig
[wsl2]
memory=2GB
swap=0
“WSL上のUbuntu 18.04を20.04に移行” 続きを読む

Rails5でのWebpackerによるBootstrapの利用

はじめに

Rails6からWebpackerが標準で入っているようですが、ここではRails5での導入を試みてみます。

今までは、JQueryやBootstrapを導入するには、それぞれのGemをインストールする必要があり、SprocketsというGemによって複数のアセットファイル(JS、CSSや画像)をコンパイル(結合や圧縮)を行うアセットパイプラインという仕組みを実装していました。

今後は、GemではなくyarnにてJSやCSSのパッケージを管理し、Webpackというアセットファイルを1のJSファイルにまとめて管理するモジュールバンドラをWebpackerというGemで利用するのが主流のようです。

Webpackerは、rails new コマンド実行の際に、次のオプションをつけることで導入できます。

--webpack --skip-coffee --skip-turbolinks --skip-sprockets

要は、Gemfileにwebpackerを登録し、sprocketsなんかのGemの記述を削除するだけです。
また、予めシステムにyarnとnode.jsをインストールしておく必要があります。

yarnでbootstrapを入れる

その際に、jquery、 popper.js も依存ライブラリなので入れます。
その前に、現在の package.json の内容を確認しておきます。

package.json

{
  "name": "sample_app",
  "private": true,
  "dependencies": {
    "@rails/webpacker": "5.2.1"
  },
  "devDependencies": {
    "webpack-dev-server": "^3.11.0"
  }
}

yarnにてセットアップします。

$ bin/yarn add bootstrap jquery popper.js @popperjs/core

※Docker環境で動いている場合は、コンテナ内で実行します。
追記(2021/05/17): セットアップすべきライブラリとして「@popperjs/code」を追記しました。

“Rails5でのWebpackerによるBootstrapの利用” 続きを読む

Rails5 + MariaDB 10.3 + Nginx をDockerで環境構築

はじめに

まずは、Docker Composeのベースとなるディレクトリ(例として「rails5-docker-compose」)を作成します。このディレクトリに「docker-compose.yml」を置くことになります。

$ mkdir rails5-docker-compose
$ cd rails5-docker-compose

構築する3つのコンテナ、Rails、MariaDB、Nginx、それぞれで管理するためのディレクトリを作成します。

$ mkdir -p mariadb/sql
$ mkdir -p rails/src
$ mkdir nginx

ベースとなるディレクトリのPATHが環境によって異なるので、docker-compose.ymlで参照できる環境設定ファイル「.env」をカレントディレクトリに準備します。

.env

HOSTSRCPATH=c:/Users/foo/devel/rails5-docker-compose

ここでは、ベースとなるディレクトリまでの絶対パスを、「HOSTSRCPATH」という環境変数にセットしておきます。普段私は、Docker Desktop for Windows、つまりWindows上のDockerエンジン(Hyper-V)を利用し、DockerクライアントはWSL上のubuntuのdocker-cliを利用しているので、上のような例になっています。

前は、「c:/Users/foo/」の部分は「~/」でマウント(bind)できていましたが、Docker Desktopをupdateしていつの間にかできなくなりました。

“Rails5 + MariaDB 10.3 + Nginx をDockerで環境構築” 続きを読む

Docker for WindowsとDocker on WSLにおけるボリュームマウント

はじめに

まずは、今回の説明におけるホストマシンの環境から、

[foo@host]$ cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.1 LTS (Bionic Beaver)"
:

OSは、Windows Subsystem for Linux (WSL) 上の Ubuntu Linux 18.04.1
そして、WSL上にて導入したDockerクライアントとdocker-composeのバージョンは次の通り。

[foo@host]$ docker --version
Docker version 18.09.1, build 4c52b90

[foo@host]$ docker-compose version
docker-compose version 1.23.2, build 1110ad01
docker-py version: 3.6.0
CPython version: 3.6.7
OpenSSL version: OpenSSL 1.1.0f  25 May 2017

最後に、Dockerエンジンの情報は次の通り。Docker for Windows をインストールして利用中。この環境構築については、前の記事「WSLにてDockerを利用する」を参考に。

[foo@host]$ curl -i http://localhost:2375/version
HTTP/1.1 200 OK
Api-Version: 1.39
Content-Length: 560
Content-Type: application/json
Date: Fri, 15 Feb 2019 22:22:24 GMT
Docker-Experimental: false
Ostype: linux
Server: Docker/18.09.2 (linux)
{"Platform":{"Name":"Docker Engine -  Community"},"Components"
:

Hyper-V上の仮想マシンにてDockerサーバが動いている状況です。

docker run コマンドを実行すると、イメージからコンテナを生成し、Dockerエンジンはイメージの中に読み書き可能なファイルシステムを作成します。コンテナが動いている(running)あるいは停止中(exited)状態であれば、そのファイルシステムを保持しますが、コンテナを削除してしまうと、コンテナ動作中に保存した(書き込んだ)データは消えてなくなります。

「-v」オプションを使用すると、ホストとコンテナの間でファイルを共有することができます。これは例えばホストにWebサイトのコンテンツを保存しておき、それをWebサーバイメージから構築されたコンテナにマウントしてコンテンツを公開するというようなことが可能です。

では順に説明します。

“Docker for WindowsとDocker on WSLにおけるボリュームマウント” 続きを読む