2017/11/20(月) [n年前の日記]
#1 [raspberrypi] Raspberry Pi Zero Wの無線LANが使えなくなって困ったり
Raspberry Pi Zero W + raspbian jessie で sudo rpi-update をしたら、再起動後に無線LANが使えなくなった。困った。
ググったら以下のページが。
_Rapberry piの起動時に無線LAN接続ができなくなった. - Atelier d' OFCOURSE
sudo ifup wlan0 と打ったら無線LANが有効になった。ということは、使えるけど起動時に有効になってない状態、ということかな…。
/etc/network/interface を編集。
ググったら以下のページが。
_Rapberry piの起動時に無線LAN接続ができなくなった. - Atelier d' OFCOURSE
sudo ifup wlan0 と打ったら無線LANが有効になった。ということは、使えるけど起動時に有効になってない状態、ということかな…。
/etc/network/interface を編集。
sudo vi /etc/network/interfaceallow-hotplug wlan0 の前に auto wlan0 を追加してから再起動。無線LANが使えるようになった。助かった…。
[ ツッコむ ]
#2 [raspberrypi][love2d] Raspberry Pi Zero W + raspbian jessie でlove2dを使えるようにする手順をメモ
前にもメモした記憶があるけど、今回 raspbian jessie をクリーンインストールしたので、再度メモ。
◎ SDL2(OpenGL無効版)をビルドしてインストール。 :
SDL2は、画像の描画や音声ファイルの再生等をしてくれるライブラリ、という説明でいいのかな…。
公式リポジトリにある、OpenGLが有効になったSDL2をインストールしたい場合は、以下だけで済む。
が、今回は OpenGL無効(にすることで OpenGL ESが有効になる)版をインストールしたいのでビルドする。以下を参考に作業。
_Golang と SDL2 でゲームを作る - KaoriYa
_SDL2-2.0.6 on Raspberry Pi - ChoccyHobNob
ビルドに必要なパッケージをインストール。
ソースをDLして解凍して configure。
結果は以下。Raspberry Pi1 / Zero系の場合、--host=arm-raspberry-linux-gnueabihf をつけて configure しないと、Video driver に rpi が出てこないので、指定は必須。
--host=arm-raspberry-linux-gnueabihf をつけない場合は以下になる。video driver に rpi が無い。
makeしてインストール。1〜2時間ぐらいかかる。
公式リポジトリにある、OpenGLが有効になったSDL2をインストールしたい場合は、以下だけで済む。
sudo aptitude install libsdl2-dev
が、今回は OpenGL無効(にすることで OpenGL ESが有効になる)版をインストールしたいのでビルドする。以下を参考に作業。
_Golang と SDL2 でゲームを作る - KaoriYa
_SDL2-2.0.6 on Raspberry Pi - ChoccyHobNob
ビルドに必要なパッケージをインストール。
sudo aptitude install automake build-essential mercurial qt5-default libtool libasound2-dev libaudio-dev libesd0-dev libsndfile1-dev libmodplug-dev libopenal-dev libfontconfig1-dev libpango1.0-dev freeglut3-dev libfreeimage-dev libjpeg-dev libtiff5-dev libwebp-dev libxcursor-dev libxi-dev libxrandr-dev libxss-dev libudev-dev libsmpeg-dev libxinerama-dev
ソースをDLして解凍して configure。
mkdir ~/sdl2 cd ~/sdl2 wget https://www.libsdl.org/release/SDL2-2.0.5.tar.gz tar xzf SDL2-2.0.5.tar.gz cd SDL2-2.0.5 mkdir build && cd build ../configure --host=arm-raspberry-linux-gnueabihf --disable-pulseaudio --disable-esd --disable-video-mir --disable-video-wayland --disable-video-x11 --disable-video-opengl
結果は以下。Raspberry Pi1 / Zero系の場合、--host=arm-raspberry-linux-gnueabihf をつけて configure しないと、Video driver に rpi が出てこないので、指定は必須。
SDL2 Configure Summary: Building Shared Libraries Building Static Libraries Enabled modules : atomic audio video render events joystick haptic power filesystem threads timers file loadso cpuinfo assembly Assembly Math : Audio drivers : disk dummy oss alsa(dynamic) nas(dynamic) Video drivers : rpi dummy opengl_es1 opengl_es2 Input drivers : linuxev linuxkd Using libudev : YES Using dbus : YES Using ime : YES Using ibus : NO Using fcitx : NO
--host=arm-raspberry-linux-gnueabihf をつけない場合は以下になる。video driver に rpi が無い。
../configure --disable-pulseaudio --disable-esd --disable-video-mir --disable-video-wayland --disable-video-x11 --disable-video-opengl SDL2 Configure Summary: Building Shared Libraries Building Static Libraries Enabled modules : atomic audio video render events joystick haptic power filesystem threads timers file loadso cpuinfo assembly Assembly Math : Audio drivers : disk dummy oss alsa(dynamic) nas(dynamic) Video drivers : dummy opengl_es2 Input drivers : linuxev linuxkd Using libudev : YES Using dbus : YES Using ime : YES Using ibus : NO Using fcitx : NO
makeしてインストール。1〜2時間ぐらいかかる。
make sudo make install共有ライブラリを一応更新。
sudo ldconfig
$ sudo ldconfig -p | grep SDL2 libSDL2-2.0.so.0 (libc6,hard-float) => /usr/local/lib/libSDL2-2.0.so.0/usr/local/lib/ 以下にインストールされた。
◎ love2dをビルドしてインストール。 :
以下を参考にして作業。
_Building LOVE (日本語) - LOVE
_pilove/build-love2d.sh at master - skarbat/pilove
必要なパッケージをインストール。
ちなみに、raspbian jessie ではなく raspbian stretch の場合は、libturbojpeg1-dev ではなく libturbojpeg0-dev をインストールするっぽい?
love2dのLinux用のソースをDLして解凍して configure してビルドしてインストール。1時間半かかった。
_Building LOVE (日本語) - LOVE
_pilove/build-love2d.sh at master - skarbat/pilove
必要なパッケージをインストール。
sudo aptitude install build-essential pkg-config libfreetype6-dev libopenal-dev libvorbis-dev libtheora-dev libmpg123-dev libluajit-5.1-dev libphysfs-dev libmodplug-dev sudo aptitude install autotools-dev automake libtool libdevil-dev libogg-dev libflac-dev libflac++-dev libmng-dev sudo aptitude install libturbojpeg1-dev sudo aptitude install build-essential pkg-config libfreetype6-dev libopenal-dev libvorbis-dev libtheora-dev libmpg123-dev libluajit-5.1-dev libphysfs-dev libmodplug-dev sudo aptitude install devscripts git-core debhelper dh-autoreconf libasound2-dev libudev0 libudev-dev libdbus-1-dev libx11-dev libxcursor-dev libxext-dev libxi-dev libxinerama-dev libxrandr-dev libxss-dev libxt-dev libxxf86vm-dev libgl1-mesa-dev libibus-1.0-dev libraspberrypi-dev
ちなみに、raspbian jessie ではなく raspbian stretch の場合は、libturbojpeg1-dev ではなく libturbojpeg0-dev をインストールするっぽい?
sudo aptitude install libturbojpeg0-dev
love2dのLinux用のソースをDLして解凍して configure してビルドしてインストール。1時間半かかった。
mkdir ~/love2d cd ~/love2d wget https://bitbucket.org/rude/love/downloads/love-0.10.2-linux-src.tar.gz tar zxf love-0.10.2-linux-src.tar.gz cd love-0.10.2 ./configure --host=arm-raspberry-linux-gnueabihf make sudo make install
$ which love /usr/bin/love/usr/bin/以下に、love がインストールされた。
◎ 動作確認。 :
love で実行。例の画面が出た。
love2dに、サウンドを鳴らすソースを与えてみた。以下のような警告が表示されたものの、音が鳴った。
音が鳴らない場合は、pulseaudio --start をしてから pulseaudio --kill をしてから試すと音が鳴ったりした。
love2dに、サウンドを鳴らすソースを与えてみた。以下のような警告が表示されたものの、音が鳴った。
AL lib: (WW) alc_initconfig: Failed to initialize backend "pulse"
音が鳴らない場合は、pulseaudio --start をしてから pulseaudio --kill をしてから試すと音が鳴ったりした。
◎ 各パッケージのインストール時にリストアップされたパッケージをメモ。 :
一応、各パッケージのインストール時にリストアップされたパッケージもメモ。環境は、Raspberry Pi Zero W + raspbian jessie。
$ sudo aptitude install automake build-essential mercurial qt5-default libtool libasound2-dev libaudio-dev libesd0-dev libsndfile1-dev libmodplug-dev libopenal-dev libfontconfig1-dev libpango1.0-dev freeglut3-dev libfreeimage-dev libjpeg-dev libtiff5-dev libwebp-dev libxcursor-dev libxi-dev libxrandr-dev libxss-dev libudev-dev libsmpeg-dev libxinerama-dev 以下の新規パッケージがインストールされます: autoconf{a} automake autopoint{a} autotools-dev{a} debhelper{a} dh-autoreconf{a} dh-strip-nondeterminism{a} freeglut3{a} freeglut3-dev gettext{a} intltool-debian{a} libarchive-zip-perl{a} libasound2-dev libasprintf-dev{a} libaudio-dev libaudiofile-dev{a} libavahi-client-dev{a} libavahi-common-dev{a} libcaca-dev{a} libcairo-script-interpreter2{a} libcairo2-dev{a} libdbus-1-dev{a} libdirectfb-dev{a} libdirectfb-extra{a} libdrm-dev{a} libdrm-exynos1{a} libdrm-omap1{a} libdrm-tegra0{a} libegl1-mesa-dev{a} libesd0-dev libfile-stripnondeterminism-perl{a} libflac-dev{a} libfontconfig1-dev libfreeimage-dev libfreeimage3{a} libgettextpo-dev{a} libgettextpo0{a} libgl1-mesa-dev{a} libgles2-mesa-dev{a} libglib2.0-dev{a} libglu1-mesa-dev{a} libharfbuzz-dev{a} libharfbuzz-gobject0{a} libice-dev{a} libjbig-dev{a} libjpeg-dev libjpeg62-turbo-dev{a} libjs-excanvas{a} libltdl-dev{a} liblzma-dev{a} libmail-sendmail-perl{a} libmodplug-dev libogg-dev{a} libopenal-dev libpango1.0-dev libpcre3-dev{a} libpcrecpp0{a} libpixman-1-dev{a} libpthread-stubs0-dev{a} libpulse-dev{a} libpulse-mainloop-glib0{a} libqt5opengl5-dev{a} libqt5sql5{a} libqt5sql5-sqlite{a} libqt5test5{a} libqt5xml5{a} libsdl1.2-dev{a} libslang2-dev{a} libsm-dev{a} libsmpeg-dev libsmpeg0{a} libsndfile1-dev libsys-hostname-long-perl{a} libtiff5-dev libtiffxx5{a} libtool libudev-dev libunistring0{a} libvorbis-dev{a} libwayland-bin{a} libwayland-dev{a} libwebp-dev libx11-dev{a} libx11-doc{a} libx11-xcb-dev{a} libxau-dev{a} libxcb-dri2-0-dev{a} libxcb-dri3-dev{a} libxcb-glx0-dev{a} libxcb-present-dev{a} libxcb-randr0-dev{a} libxcb-render0-dev{a} libxcb-shape0-dev{a} libxcb-shm0-dev{a} libxcb-sync-dev{a} libxcb-xfixes0-dev{a} libxcb1-dev{a} libxcursor-dev libxdamage-dev{a} libxdmcp-dev{a} libxext-dev{a} libxfixes-dev{a} libxft-dev{a} libxi-dev libxinerama-dev libxrandr-dev libxrender-dev{a} libxshmfence-dev{a} libxss-dev libxt-dev{a} libxxf86vm-dev{a} m4{a} mercurial mercurial-common{a} mesa-common-dev{a} po-debconf{a} qt5-default qt5-qmake{a} qtbase5-dev{a} qtbase5-dev-tools{a} x11proto-core-dev{a} x11proto-damage-dev{a} x11proto-dri2-dev{a} x11proto-fixes-dev{a} x11proto-gl-dev{a} x11proto-input-dev{a} x11proto-kb-dev{a} x11proto-randr-dev{a} x11proto-render-dev{a} x11proto-scrnsaver-dev{a} x11proto-xext-dev{a} x11proto-xf86vidmode-dev{a} x11proto-xinerama-dev{a} xorg-sgml-doctools{a} xtrans-dev{a} 更新: 0 個、新規インストール: 135 個、削除: 0 個、保留: 0 個。
$ sudo aptitude install build-essential pkg-config libfreetype6-dev libopenal-dev libvorbis-dev libtheora-dev libmpg123-dev libluajit-5.1-dev libphysfs-dev libmodplug-dev 以下の新規パッケージがインストールされます: libluajit-5.1-2{a} libluajit-5.1-dev libmpg123-dev libphysfs-dev libphysfs1{a} libtheora-dev
$ sudo aptitude install autotools-dev automake libtool libdevil-dev libogg-dev libflac-dev libflac++-dev libmng-dev 以下の新規パッケージがインストールされます: liballegro4.4{a} libdevil-dev libdevil1c2{a} libflac++-dev libflac++6{a} liblcms2-dev{a} libmng-dev
$ sudo aptitude install libturbojpeg1-dev 以下の新規パッケージがインストールされます: libturbojpeg1{a} libturbojpeg1-dev
$ sudo aptitude install devscripts git-core debhelper dh-autoreconf libasound2-dev libudev0 libudev-dev libdbus-1-dev libx11-dev libxcursor-dev libxext-dev libxi-dev libxinerama-dev libxrandr-dev libxss-dev libxt-dev libxxf86vm-dev libgl1-mesa-dev libibus-1.0-dev libraspberrypi-dev 以下の新規パッケージがインストールされます: at{a} bsd-mailx{a} dctrl-tools{a} debian-keyring{a} devscripts diffstat{a} distro-info-data{a} dput{a} equivs{a} exim4-base{a} exim4-config{a} exim4-daemon-light{a} gir1.2-ibus-1.0{a} git-core hardening-includes{a} libapt-pkg-perl{a} libclass-accessor-perl{a} libclass-inspector-perl{a} libclone-perl{a} libcommon-sense-perl{a} libconvert-binhex-perl{a} libcrypt-ssleay-perl{a} libdigest-hmac-perl{a} libdistro-info-perl{a} libemail-valid-perl{a} libexporter-lite-perl{a} libfile-basedir-perl{a} libibus-1.0-5{a} libibus-1.0-dev libio-pty-perl{a} libio-sessiondata-perl{a} libio-socket-inet6-perl{a} libio-string-perl{a} libio-stringy-perl{a} libipc-run-perl{a} libjson-perl{a} libjson-xs-perl{a} libmime-tools-perl{a} libnet-dns-perl{a} libnet-domain-tld-perl{a} libnet-ip-perl{a} libossp-uuid-perl{a} libossp-uuid16{a} libparse-debcontrol-perl{a} libparse-debianchangelog-perl{a} libperlio-gzip-perl{a} libsoap-lite-perl{a} libsocket6-perl{a} libsub-name-perl{a} libtask-weaken-perl{a} libtext-levenshtein-perl{a} libtie-ixhash-perl{a} libxml-parser-perl{a} libxmlrpc-lite-perl{a} lintian{a} patchutils{a} python3-magic{a} t1utils{a} wdiff{a}
◎ pulseaudioについてメモ。 :
pulseaudio関係をインストールしたい場合は、以下も打つけど…。
raspbian jessie をクリーンインストールした直後は以下のような状態で既にアレコレ入ってたので、わざわざインストールを指定しなくてもよいのではないかな…。
sudo aptitude install pulseaudio libpulse-dev
raspbian jessie をクリーンインストールした直後は以下のような状態で既にアレコレ入ってたので、わざわざインストールを指定しなくてもよいのではないかな…。
$ sudo aptitude search pulse | grep -E '^i' i A libpulse-dev - PulseAudio client development headers and i A libpulse-mainloop-glib0 - PulseAudio client libraries (glib support) i A libpulse0 - PulseAudio client libraries i A libpulsedsp - PulseAudio OSS pre-load library i A pulseaudio - PulseAudio sound server i pulseaudio-module-bluetooth - Bluetooth module for PulseAudio sound serv i A pulseaudio-module-x11 - X11 module for PulseAudio sound server i A pulseaudio-utils - Command line tools for the PulseAudio soun
[ ツッコむ ]
#3 [linux] 自宅サーバの時計がおかしくて悩んだり
自宅サーバが、2017/11/20 01:30頃に何故か勝手に再起動していて首を捻ったのだけど、それはさておき。
どうも自宅サーバの時計がおかしい…。ハードウェアクロックが、異様にずれてる。
ちなみに環境は Vine Linux 6.5。
時刻を確認。
ntpの状態は以下のような感じ。
ハードウェアクロックに、現在時刻を設定してみる。
指定がおかしいようには見えないのだけどなあ…。
そもそも、一体何が、一定時間毎にハードウェアクロックを上書き設定してしまうのだろう?
どうも自宅サーバの時計がおかしい…。ハードウェアクロックが、異様にずれてる。
ちなみに環境は Vine Linux 6.5。
# cat /etc/vine-release Vine Linux 6.5 (Poupille)
時刻を確認。
# date 2017年 11月 20日 月曜日 07:55:46 JST # hwclock -r --debug hwclock from util-linux 2.19 /dev interface to clock を使います。 直前のずれの修正は 1969 年以降 1511128259 秒時点で行なわれました 直前の調整は 1969 年以降 1511128259 秒時点で行なわれました ハードウェア時計はローカル時刻です ハードウェア時計ローカル時刻を保持しているとみなします クロックチックを待っています... ...クロックチックを取得しました ハードウェア時計から読込んだ時刻: 2017/11/19 22:55:52 ハードウェア時計時刻 : 2017/11/19 22:55:52 = 1969 年以来 1511099752 秒 2017年11月19日 22時55分52秒 -0.203008 秒ハードウェアクロックが、ちょうど9時間ずれてる。おかしい。UTC絡みなのだろうか…?
ntpの状態は以下のような感じ。
# ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== -ntp1.plala.or.j 202.234.233.109 4 u 140 256 377 19.093 -4.844 0.514 -ntp2.plala.or.j 202.234.233.109 4 u 203 256 377 12.973 -3.774 0.957 +ntp1.jst.mfeed. 133.243.236.17 2 u 204 256 377 20.810 -1.036 0.505 *ntp2.jst.mfeed. 133.243.236.17 2 u 196 256 377 21.901 -0.961 0.599 +ntp3.jst.mfeed. 133.243.236.17 2 u 91 256 377 18.489 -0.653 0.717 LOCAL(0) .LOCL. 10 l 59m 64 0 0.000 0.000 0.000
ハードウェアクロックに、現在時刻を設定してみる。
# date 2017年 11月 20日 月曜日 08:28:08 JST # hwclock --systohc --localtime --debug hwclock from util-linux 2.19 /dev interface to clock を使います。 直前のずれの修正は 1969 年以降 1511132257 秒時点で行なわれました 直前の調整は 1969 年以降 1511132257 秒時点で行なわれました ハードウェア時計はローカル時刻です ハードウェア時計ローカル時刻を保持しているとみなします クロックチックを待っています... ...クロックチックを取得しました ハードウェア時計から読込んだ時刻: 2017/11/19 23:28:23 ハードウェア時計時刻 : 2017/11/19 23:28:23 = 1969 年以来 1511101703 秒 Time elapsed since reference time has been 0.004853 seconds. Delaying further to reach the new time. ハードウェア時計を 08:28:23 に設定 = 1969 年以来 1511134103 秒 ioctl(RTC_SET_TIME) に成功しました。 前回の調整以来、少なくとも一日経過しないと、ずれを修正できません。 # hwclock --show ; date 2017年11月20日 08時29分18秒 -0.351335 秒 2017年 11月 20日 月曜日 08:29:18 JST設定できたように見えるけど、しばらくするとまた時間がずれる。何故。
◎ 関係ありそうなファイルを確認。 :
# strings /etc/localtime TZif2 JCST TZif2 JCST JST-9
# cat /etc/sysconfig/clock ZONE="Asia/Tokyo" UTC=false ARC=false
# cat /etc/adjtime 0.018596 1511134103 0.000000 1511134103 LOCAL
指定がおかしいようには見えないのだけどなあ…。
そもそも、一体何が、一定時間毎にハードウェアクロックを上書き設定してしまうのだろう?
◎ 「11分モード」なるものがあるらしい。 :
以下のページを眺めてたら、「11 minute mode(11分モード)」なるものがあると知った。11分毎にハードウェアクロックを再設定してしまう機能がカーネルにあるらしく、ソレを利用してntpサーバがハードウェアクロックを設定してしまう時があるそうで。
_日時を設定して再起動すると標準時刻に戻ってしまう | アットマークテクノ ユーザーズサイト
_hardware clockがずれる件と 11 minute mode - (ひ)メモ
_Man page of HWCLOCK - (カーネルによるハードウェアクロックの自動合わせ、の項を参照)
_RHEL6のtickless kernel - とあるSIerの憂鬱
_設定ファイル
_パソコンの時計 ハードウェアクロックとシステムクロック
状態を確認してみる。
/etc/adjtime の3行目が、LOCAL か UTC かで、ハードウェアクロックから時刻を読み取る際の処理が変わってくるらしい。試しに UTC にしてみた。
そもそもLinuxのシステムクロックはUTCで、ハードウェアクロックもUTCを前提にしている場合が多い、という話も見かけた。
どうせ Linux しか動かさない環境なのだから、これで様子を見てみよう…。
_日時を設定して再起動すると標準時刻に戻ってしまう | アットマークテクノ ユーザーズサイト
_hardware clockがずれる件と 11 minute mode - (ひ)メモ
_Man page of HWCLOCK - (カーネルによるハードウェアクロックの自動合わせ、の項を参照)
_RHEL6のtickless kernel - とあるSIerの憂鬱
_設定ファイル
_パソコンの時計 ハードウェアクロックとシステムクロック
状態を確認してみる。
# ntptime | grep status status 0x2001 (PLL,NANO),UNSYNC の表記が無いので、11 minute mode(11分モード)が有効になっているらしい。つまりウチの自宅サーバは、ntpd だかカーネルだか分からんけど、11分毎にハードウェアクロックが上書きされてしまう模様。
/etc/adjtime の3行目が、LOCAL か UTC かで、ハードウェアクロックから時刻を読み取る際の処理が変わってくるらしい。試しに UTC にしてみた。
vi /etc/adjtime 3行目をUTCに
vi /etc/sysconfig/clock UTC=true に
hwclock --systohc --utc --debug # hwclock -r --debug hwclock from util-linux 2.19 /dev interface to clock を使います。 直前のずれの修正は 1969 年以降 1511139353 秒時点で行なわれました 直前の調整は 1969 年以降 1511139353 秒時点で行なわれました ハードウェア時計はUTC時刻です ハードウェア時計UTC時刻を保持しているとみなします クロックチックを待っています... ...クロックチックを取得しました ハードウェア時計から読込んだ時刻: 2017/11/20 00:59:18 ハードウェア時計時刻 : 2017/11/20 00:59:18 = 1969 年以来 1511139558 秒 2017年11月20日 09時59分18秒 -0.768737 秒
そもそもLinuxのシステムクロックはUTCで、ハードウェアクロックもUTCを前提にしている場合が多い、という話も見かけた。
どうせ Linux しか動かさない環境なのだから、これで様子を見てみよう…。
◎ hwclockについて。 :
- hwclock -w と hwclock --systohc は同じ。ハードウェアクロックを設定する。
- hwclock -r と hwclock --show は同じ。ハードウェアクロックを読み出す。
- --debug をつけると、詳細を表示してくれる。
- --utc をつけると UTC として扱い、--localtime をつけるとローカルタイムとして扱う。
[ ツッコむ ]
以上、1 日分です。