コマンドプロンプトからdesktop.iniを表示する

OS: Windows 10 version 1709

フォルーダオプションから「隠しファイル、隠しフォルダー、または隠しドライブを表示する」を選択し、「保護されたオペレーティング システムファイルを表示しない(推奨)」のチェックを外せばdesktop.iniのアイコンが姿をあらわすけれどもちょっと手間である。コマンドプロンプトであればも少し手数が少なくて良い。desktop.iniのファイル属性をattribコマンドで詳らかにするとこうである。

C:\Users\guro\Desktop>attrib
A  SH        C:\Users\guro\Desktop\desktop.ini

SとHはそれぞれシステムファイル属性、隠しファイル属性を示しておりこれらの属性がファイルを透明な存在たらしめる。そうであるからこれらを解除できればしめたものである。ヘルプによれば-sと-hオプションを用いると良い。

C:\Users\guro\Desktop>attrib -s -h desktop.ini
C:\Users\guro\Desktop>attrib
A                    C:\Users\guro\Desktop\desktop.ini

これで包み隠されていたdesktop.iniのアイコンが露見する。+sと+hオプションで以って再び非表示にできる。

C:\Users\guro\Desktop>attrib +s +h desktop.ini
C:\Users\guro\Desktop>attrib
A  SH                C:\Users\guro\Desktop\desktop.ini

参考:
attrib | Microsoft Docs

動画ファイルのアイコンをMPC-BEのものに関連付ける

OS: Windows 10 version 1709
MPC-BE(64bit) 1.5.2 (build 3445) beta

何の拍子か突然に動画ファイルのアイコンがMPC-BEのデフォルトアイコンで統一されてしまい泡を食った。MPC-BEのデフォルトアイコンがたいへん控えめなデザインであるから見た目を色とりどりの華やかなアイコンに再び変更しようと試みるものである。MPC-BEを起動したら「表示」→「オプション」と辿ってゆく。

プレーヤーのカテゴリにある「形式」の設定画面を表示し「変更」ボタンを押下する。

「アイコンの関連付け」にチェックを入れ「適用」をクリックする

ことでアイコンがきらびやかなデザインへと変更される。適用ボタンをクリックすると「既定のプログラムを設定する」ウィンドウがどうしてか立ち上がって来るけれども閉じて躱した。

なお、アイコン画像は以下のDLLファイルに格納されておりResourcesExtractなどで内部を窺うことができた。

C:\Program Files\MPC-BE x64\mpciconlib.dll

Raspbianのスワップ領域を拡張する

Raspberry Pi 3 Model B
OS: Raspbian stretch lite November 2017
MySQL 5.7.21

Raspbianを導入したRaspberry Pi 3でMySQLのビルドをこなしていたらこのような有様であった。何者かの差し金でコンパイラの処理が勝手に打ち切られている模様である。

$ make
(snip)
[ 50%] Building CXX object sql/CMakeFiles/sql.dir/item_geofunc_setops.cc.o
c++: internal compiler error: Killed (program cc1plus)

dmesgから手がかりを探るとどうやらOut of memory killerがメモリを潤沢に用いるプロセスの刈り取りに乗り出しているようである。Raspberry Pi 3 Model Bのメモリ搭載量1GBに対して800MBを超えるメモリを消費すればお咎めを受けるのも宜なるかなというところである。

$ dmesg
(snip)
[16075.666040] Out of memory: Kill process 11885 (cc1plus) score 853 or sacrifice child
[16075.666059] Killed process 11885 (cc1plus) total-vm:919780kB, anon-rss:842300kB, file-rss:0kB, shmem-rss:0kB
[16076.103693] oom_reaper: reaped process 11885 (cc1plus), now anon-rss:0kB, file-rss:0kB, shmem-rss:0kB

さりとて素直に応じるわけにもいかぬ。途轍もない待ち時間がふいになるのは誠に遺憾である。物理メモリが足りぬならスワップ領域を拡張するのが良かろうと思う。Raspbianのデフォルトでは100MBが割り当てられていたが近頃のMySQLをビルドするには到底足りない模様であるからセオリーに則って物理メモリの1~2倍程度に変更する。Raspbianは/etc/dphys-swapfileでスワップ領域の設定を管理するようである。

$ sudo vi /etc/dphys-swapfile
#CONF_SWAPSIZE=100
CONF_SWAPSIZE=2048

$ sudo dphys-swapfile install
want /var/swap=2048MByte, checking existing: deleting wrong size file (104857600), generating swapfile ... of 2048MBytes

$ sudo dphys-swapfile swapon

これでスワップ領域が2GBに拡張された。

$ free -m
              total        used        free      shared  buff/cache   available
Mem:            927          76         455          12         395         787
Swap:          2047           0        2047

$ cat /proc/swaps
Filename              Type            Size    Used    Priority
/var/swap             file            2097148     0   -1

スワップ領域を2GBに拡張して再度、MySQLのビルドを試みたところ450分程度を費やして恙無く完了した。なおスワップ領域を1GBにセットしたときもビルドは完了したものの一体どうしたことかSegmentation faultでMySQLが全く操作できなかったので、実際にはうまい具合にビルドできていなかった疑いがある。

参考:
man dphys-swapfile
Increase size of existing swap file

MySQL5.7.21をソースからインストール

OS: Ubuntu Server 16.04
MySQL 5.7.21

久しくMySQLのインストールから離れていたのでメモをとっておくものである。libncurses5-devが無いとcmakeのステージで下記のエラーメッセージが現れて処理が取りやめとなる。

CMake Error at cmake/readline.cmake:64 (MESSAGE):
  Curses library not found.  Please install appropriate package,

      remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and derivates it is ncurses-devel.

もっと以前のバージョンに於いてはconfigureスクリプトで以ってMakefileを生み出していたように思うけれども、近頃のMySQLはどうもcmakeである。そういう訳だから必要なパッケージを予めインストールしておく。

$ sudo apt install cmake libncurses5-dev

あとは公式の文献を手がかりに作業を進めてゆく。

$ sudo useradd -r -s /bin/false mysql
$ wget -c https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.21.tar.gz
$ wget -c https://dev.mysql.com/downloads/gpg/?file=mysql-5.7.21.tar.gz -O mysql-5.7.21.tar.gz.asc
$ gpg --recv-keys 5072E1F5
$ gpg --verify mysql-5.7.21.tar.gz.asc
$ tar zxvf mysql-5.7.21.tar.gz
$ cd mysql-5.7.21/
$ mkdir bld
$ cd bld/

CMAKE_INSTALL_PREFIXはデフォルトで/usr/local/mysqlである旨、記載があるから何もせずにいたのであるけれどもいったい何の都合か具合が悪い事があったのでいちいち明示したほうが良さそうな情勢である。

$ cmake .. -DDOWNLOAD_BOOST=1 -DWITH_BOOST=./boost/ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci
$ make
$ sudo make install
$ cd /usr/local/mysql/
$ sudo mkdir mysql-files
$ sudo chown mysql:mysql mysql-files/
$ sudo chmod 750 mysql-files/

データディレクトリの初期化を実施する。そうするとまるきりランダムに生成されたrootユーザのパスワードが現れる。このパスワードは態と有効期限が切らしてあるからリセットするまではMySQLを碌に操作できないものである。

$ sudo bin/mysqld --initialize --user=mysql
2018-03-19T02:49:10.755528Z 1 [Note] A temporary password is generated for root@localhost: Su>-%Gnhz86z

$ sudo bin/mysql_ssl_rsa_setup
$ sudo bin/mysqld_safe --user=mysql &
$ sudo cp -v support-files/mysql.server /etc/init.d/mysql.server
$ cd bin/

$ ./mysql -uroot -p
mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

パスワードをリセットするためにset passwordステートメントを発行する。これでMySQLをほしいままに操れるようになる。

mysql> set password = 'avava';
Query OK, 0 rows affected (0.00 sec)

ひとまずMySQLをシャットダウンして作業は完了である。

$ sudo ./mysqladmin -uroot -p shutdown
Enter password:
2018-03-19T02:57:21.415800Z mysqld_safe mysqld from pid file /usr/local/mysql/data/guro.pid ended

参考:
2.9.2 Installing MySQL Using a Standard Source Distribution
2.9.4 MySQL ソース構成オプション
13.7.1.1 ALTER USER 構文

php.iniの正しい設置場所をあらためて確認する

OS: Ubuntu Server 16.04
Nginx 1.12.2
PHP 7.2.3

Nginxが稼働する環境へPHPをインストールするとなればNginx 1.4.x on Unix systemsの手続きを参照するのは無理からぬ事である。公式であるから全幅の信頼を寄せて盲目的に従うのもやはり無理からぬ事である。これが裏目に出た。第四番目の手続きである。

4. Obtain and move configuration files to their correct locations
cp php.ini-development /usr/local/php/php.ini

php.iniを/usr/local/php/へと配したのちに、OPcacheを有効にすべくphp.iniへ必要な記述をこなしてphp -vを実行するとこうである。

$ php -v
PHP 7.2.3 (cli) (built: Mar 17 2018 01:31:01) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

「with Zend OPcache v7.2.3, Copyright (c) 1999-2018, by Zend Technologies」が出力に表れないのでOPcacheが有効になっていない模様である。テストスクリプトの実行結果も「PHP Fatal error: Uncaught Error: Call to undefined function opcache_get_status()」とあるからまったく狼狽した。いくらインターネットのページを繰っても似たような状況に遭遇した人が見当たらないのでどうやら世界ではじめて犯したヘマである。情けない。さんざ調べた末、結局はphp.iniの設置場所が良くないようで/usr/local/libへと移動させることで解決を見た。

$ sudo mv /usr/local/php/php.ini /usr/local/lib/
$ php -v
PHP 7.2.3 (cli) (built: Mar 17 2018 01:31:01) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.2.3, Copyright (c) 1999-2018, by Zend Technologies

configureのヘルプからも特別に指定しなければ/usr/local/libにphp.iniを求めにゆくことが明らかである。

$ ./configure --help
(snip)
  --prefix=PREFIX         install architecture-independent files in PREFIX
                          [/usr/local]
  --with-config-file-path=PATH
                          Set the path in which to look for php.ini [PREFIX/lib]

またphp -iの実行結果から現在の設定を確かめることができるから、php.iniの設定が反映されずどうも様子がおかしいと感ずるときは確認をするのが良さそうである。

$ php -i | grep php.ini
Configuration File (php.ini) Path => /usr/local/lib
Loaded Configuration File => /usr/local/lib/php.ini

参考:
Nginx 1.4.x on Unix systems