mysql更新に失敗
自宅サーバが、mysql-5.6 で運用していたけど、世の中 mariadb-10.x , mysql-8.x のご時世なのでアップグレードしたけど、すごく苦労した。自宅は debian だけど mysql-5.6 は oldstable まで遡らないと管理されていない古いパッケージとなっていた。
mysql-5.7 は focal ではサポートしていない
色々とトラブルはあったけど、自宅サーバは mariadb-10.x にできたけど、この電子情報のサーバも確認したら、ubuntu20(focal) で mysql-5.7 で動いていた。これまた ubuntu18(bionic) まで遡らないと 管理されていないパッケージ。
ということで、自宅と同様に mariadb などに上げようとチャレンジしてみた。
しかし、これまた、mariadb-10.3 に失敗して、ダメ元で mysql-8.0 も試したけど、これまた失敗。昨日は自宅サーバの mariadb-10.4 になるまで苦労して疲れてるので、今回は断念。どうも、mysql-5.7 での root パスワードを忘れて更新してからの作業だったのが、諸悪の根源なのかもしれない。
bionic パッケージで mysql-5.7 で復旧… # 戻っただけじゃん…
ひとまず、bionic の apt-source を有効にして、mysql-5.7 をインストール。mariadb やら mysql-8.0 のゴミやら root パスワードの更新の悪影響かで、mysql-5.7 に戻すだけでも苦労したけど、ようやく復旧。
EmoCheck2.1
Emotet が2月に変化があったようで、EmoCheck 2.1 で改めて確認してみよう。
PDFファイルのタイトル/著者を一括修正
例年実施している学生の卒研発表のレジメ資料のWeb公開。しかしながら表示させると、画面の左上のメニュー部に「講演題目第1行目は…」。PDFファイルのタイトル部に、ひな形ファイルの属性が残っているみたい。著者欄にもひな形の著者情報が残っている。
なんとなくカッコ悪いので、タイトル部と著者情報を消したい。
((( 必要なツールのインストール ))) $ aptitude install libimage-exiftool-perl ((( 一つのファイルなら ))) $ exiftool -Title="" -Author="" -overwrite_original hoge.pdf ((( find+xargs で一括修正 ))) $ find . -name "*.pdf" -print \ | xargs exiftool -Title="" -Author="" -overwrite_original
自室UPSの交換
今年に入り、たびたび自室の UPS がピーピー鳴くようになってきた。バッテリーの日付を確認すると7年以上前だった。apcupsd などのツールで監視はしていて、バッテリー供給可能時間 30分 はあったので、さすがに古くても瞬間停電には耐えられるだろうと使っていた。最近は1日に数回アラームが鳴るし、apctest コマンドを使って バッテリーの日付を新しくしておいたけど、やっぱりアラームが鳴る。
年度末に向けて、交換用の 新しい UPS (APC ES 750 USB: 外観は違うけど中身は今まで使っていたのと同じ) を購入しておいたので、ようやく交換した。バッテリーも購入したので、古い UPS の中身と入れ替えて、別に使う予定。
Emotet チェックツール EmoCheck
Emotet は、メール添付の マクロ付き Word / Excel によって拡散するマルウェアで、感染者のメールの Reply などを装って送信されるため間違って開く可能性が高く、広範囲に被害がでている。
全国の高専の中でも発生が確認されており、注意が必要となっている。(私の手元には、2月4日現在では届いていないけど)
このため、「Emotet の感染確認のためのツール EmoCheck での確認せよ」とのお達しが出ている。
ぜひとも、EmoCheck で感染確認をしましょう。
Linux演習
WebAssembly環境の構築
卒研で WebAssembly を使った開発をしてもらっているけど、自分でも試したいので環境の構築。
Debian emscripten パッケージだけではダメだった
卒研の学生さんが、emscripten 使っているという話だったので、”aptitude search emscripten” を実行したら、パッケージがあったので、”aptitude install emscripten” を実行。鉄板の hello world をコンパイルしようとしたら、”LLVM version appears incorrect (seeing “11.0”, expected “10.0”)”というエラーが出て、コンパイルに失敗。
llvm の C コンパイラとのバージョンが合わない様子。ということで、git より環境を構築してみる。
git で emsdk 環境の構築
通常ユーザであれば、”git clone https://github.com/juj/emsdk.git” を実行すると、その PATH 直下に環境が作られるみたい。こういう使い方は好きじゃないので…
$ sudo bash ((( ひとまず emscripten は必要みたい ))) # apt-get install emscripten # 導入後は不要? ((( emsdk のインストール ))) # cd /usr/local # git clone https://github.com/juj/emsdk.git # cd emsdk # ./emsdk install latest # ./emsdk activate latest
Hello World を試す
((( 自分の環境で以下のコマンドにより環境変数をセット ))) $ source /usr/local/emsdk/emsdk_env.sh ((( Hello World をコンパイル ))) $ cd ~/public_html $ mkdir test $ cd test $ vi hello.c #include int main( int argc , char* argv[] ) { printf( "Hello World\n" ) ; return 0 ; } $ emcc test.c -s WASM=1 -o test.html $ ブラウザで test.html を開く http://...URL.../~t-saitoh/test/test.html
ブラウザから自分のC言語(wasm)を呼び出し結果を出力
$ mkdir html_template $ cp /usr/local/emsdk/upstream/emscripten/src/shell_minimal.html html_template $ vi html_template/shell_minimal.html ((( C言語側を呼び出すボタンを埋め込む ))) <textarea class="emscripten" id="input"></textarea> <input type="button" value="CALL WASM" onclick="Module._ems_func();"/> ((( test.cxx ))) #include <stdio.h> #include <emscripten/emscripten.h> #include <string> int main( int argc , char* argv[] ) { return 0 ; } // void* getElementValue_( char const* id ) { ... } が作られる EM_JS( void* , getElementValue_ , (char const* id) , { var e = document.getElementById( UTF8ToString( id ) ) ; var str = e.value ; var len = lengthBytesUTF8( str ) + 1 ; // コンパイル時に -s EXPORTED_FUNCTIONS="['_malloc']" しないとエラーがでる var heap = _malloc( len ) ; stringToUTF8( str , heap , len ) ; return heap ; } ) ; // std::string型はC++の文字列処理の型 // std::string s( "abcde" ) ; // s.c_str() で、C言語のNULターミネータ付きの文字列を参照できる。 std::string getElementValue( std::string const &id ) { void *p = getElementValue_( id.c_str() ) ; std::string s( (char const*) p ) ; free( p ) ; return s ; } void setElementValue( std::string const &id , std::string const &value ) { EM_ASM( { var e = document.getElementById( UTF8ToString( $0 ) ) ; e.value = UTF8ToString( $1 ) ; } , id.c_str() , value.c_str() ) ; } #ifdef __cplusplus extern "C" { #endif /* HTMLに埋め込んだ onclick=_ems_func() で呼び出される*/ void EMSCRIPTEN_KEEPALIVE ems_func() { std::string input = getElementValue( "input" ) ; setEnvironmentValue( "output" , input ) ; } #ifdef __cplusplus } #endif ((( test.cxx をコンパイル ))) $ source /usr/local/emsdk/emsdk_env.sh $ em++ -o test.html test.cxx -O3 -s WASM=1 -s EXPORTED_FUNCTIONS="['_main','_malloc']" --shell-file html_template/shell_minimal.html
教員室にhomebridge導入
自宅では、iPhoneとの連動で、Raspberry-Pi にhomebridgeを入れて、家電制御で便利に使っているけど、教員室の Linux サーバにも導入してみた。
自分のスマホに ping で所在確認するプラグインと、自室の在室や予定を表示している掲示板システムを操作するプラグインを入れてみた。
在室状態に応じて掲示板にメッセージを表示していたけど、更新間隔が1時間おきとかなので、「不在表示なのに居るじゃん…」とか学生からのチェックが入るので、ドアや充電器の所に置いてあるNFCをタッチすると、掲示板の在室/不在表示+予定表示するようにしてみた。
# 以前から同様なことはしていたけど、手抜き Web API 経由だったのを、ホームアクセサリとして動かしてみた。