もじゃぶろぐ

記事を書いたり書かなかったりします。

DB授業の謎な課題提出スタイルになんとか対応したい

TL;DR

TL;DR、使ってみたかった。

mysqlのログを記録して、切断時にdocxで吐けるようにした。

前提

私の環境は自前のノートPCにArch Linux
一応学校のカリキュラムでは全員統一で配布されている(買わされている)Windowsマシンを使うことになっているけど、自分で責任が取れる人は好きにしてくれという救済措置がある。(ただしどっちみち学校マシンは買わされる)

当然学校サイドからのサポートは受けられず、そんな天邪鬼な人間に合わせたカリキュラムにもなってないのでWindowsじゃないことの問題が出てしまうこともある。
(そういう理由もあって嫌々Windowsとのデュアルブートにしてある)

課題の提出ルール

MySQLの専用クライアントのログをWordにコピペして、学内サーバの特定のディレクトリに提出。

なんで?

ぼくもしりたい

問題点

Windowsじゃないことの問題

  1. MySQLのDB名やテーブル名などに日本語が使えない

    普通使わない…使わなくない?
    でもそれで課題が用意されてるのでどうしょうもない。勘弁してほしい。

  2. Linux用のWordがないんですけど…

    これは正直Windowsを嫌がる私が悪い。しゃーない。
    じゃねえよなんでログをわざわざWordに貼り付けるんだよ。

    ちなみに今まではWordOnlineに貼り付けてDLで対応してました…

(その他、毎回うっかりCtrl-cしてしまってターミナルが閉じて悲鳴をあげてる生徒がいる。つらそう。)

その他の問題点

ダルすぎる
これに尽きる。

教科担当の決めたルールなので従うしか無いけどとにかく無駄が多すぎてダルい。

改善策

MySQL

環境

まず、MySQLを使うのをやめた。
Arch Linuxでは割りと前からMySQLよりMariaDBを推奨しているので、そちらに乗り換えた。

授業としてはMySQLを使うということになっているけど、そんなにかわらないので問題なし。
教科担当自身本人の環境はMariaでやってるし(なんでだよ)、Mariaならいいよと言っていた。

MariaDB環境ではDB名やテーブル名に問題なく日本語が使えるので1の問題を解決した。
(そんなところに日本語を使うなと言う問題は永久に解決しない。)

ログ取り

いちいちターミナルからコピペなんてダルいことはしてられない。

--teeオプションで指定ファイルに全操作のログを吐き出せるので、これを使うことにした。

$ mysql -u root -p --tee /path/to/logfile

Pandoc

LinuxにはWordなんてない。Windowsに切り替えたくもない。
Word Onlineに貼り付けるのもしんどい。

というわけで、コマンドラインマークアップドキュメントを変換できるPandocを利用することにした。

$ pandoc /path/to/logfile -t docx -o {課題のネーミングルール}.docx

入力形式

mysqlのログは、そのままコンソールのログが吐かれてるので当然プレーンテキスト。

ただし、Pandocは「マークアップドキュメントを変換する」ためのアプリケーションなのでプレーンからの入力に対応していない。

というわけで、全行の末尾にスペース2個を追加することで強引にMarkdownとして扱えるようにした。力こそパワー。

$ sed -i -e "s/\$/  /" /path/to/logfile

これで2番めの問題も解決。

終わりに

これらのコマンドを適当にスクリプトにまとめて今までよりは楽になった。
学内サーバはSMBなので提出まで自動化したい。(でも編集パーミッションもないのでやらかしそう)

人権をくれ

ETロボコンの開発環境をArchLinuxで構築した

ETロボコン2018のデベロッパ部門プライマリクラスに参加します。

今週末の技術教育に向けて、ArchLinuxでTOPPERS/EV3RTの開発環境を構築しました。
(うちのチームがどの開発環境で出るかはまだ微妙です。チームメンバの学習コストの面からJavaでやりたい。)

Windows絶対使いたくないマン

意地でも使いたくない。(鋼の意思)
まあ特殊な環境で参加する以上周りに迷惑をかけないためにも保険でWindowsの方も用意しますけどね。悲しい…

現在Ubuntu用には構築スクリプトが用意されているのですが、他のディストリにはありませんでした。

DevEnvLinux – EV3 Platform

ただ中を見たら、既存のGNU ARMツールチェーンをアンインストールしたあとにaptからmkimage(uboot-tools)を取ってきて、ツールチェーンのバイナリを落としてパスを通してるだけだったので手動で行いました。

gcc

base-develに含まれてるので大抵の環境でインストール済みなはず。

mkimage

communityリポジトリに含まれているので普通に落としてきます。

# pacman -S uboot-tools

GNU ARM ツールチェーン

AURのものは推奨バージョンより少し新しいので(7_2017_q4_major-1)、バイナリを拾ってきます。

現時点で,使用を推奨するコンパイラのバージョンは,6-2017-q1-update です。

DevEnvLinux – EV3 Platform

$ wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/6_1-2017q1/gcc-arm-none-eabi-6-2017-q1-update-linux.tar.bz2
$ tar -xvvf gcc-arm-none-eabi-6-2017-q1-update-linux.tar.bz2
# mv gcc-arm-none-eabi-6-2017-q1-update /usr/local/
# vim /etc/profile
export PATH="/usr/local/gcc-arm-none-eabi-6-2017-q1-update/bin:$PATH"
$ source /etc/profile

コンフィギュレータ

64bitLinnuxではboostライブラリの関係でビルドできないらしいので、32bit用のバイナリを落としてきます。

$ wget http://toppers.jp/download.cgi/cfg-linux-static-1_9_6.gz
$ gunzip cfg-linux-static-1_9_6.gz
$ mv cfg-linux-static-1_9_6.gz ~/ev3rt/hrp2/cfg/cfg/cfg

あとはサンプルを動かして終わりです。

amazon dash buttonで家の鍵を閉めたかどうかわかるボタンをつくった

ご無沙汰しております。

応用情報技術者試験まであと6日となりました。違うことが捗る毎日です。

家の鍵閉めたっけ

ほぼ毎朝、自宅の鍵を閉めて出てきたか思い出せずに一度家まで帰るという認知症っぽいことをしています。
今まで一度も実際に鍵を閉め忘れてたことはないのですが、どうにもルーチンでやっていることは意識に残りません。

流石に家まで帰ってくるのもタイムロスが馬鹿馬鹿しいのでなにか可視化できる方法はないものかと考えました。

amazon dash button

サービスが開始したときに何も考えずに注文したものが余っています。
dashb buttonを介さなくても無条件に次回の注文から500円割引が入ったのでマジでタダでした。(今は修正されたっぽい?)

GARP

amazon dash buttonは、注文を送信する前にDHCPから自身に振られたIPアドレスが重複していないかの確認でGARPパケットを送出します。
また、どの商品を登録しておくかの設定を最後まで行わずに中断することでこのGARPだけで終了させることができます。

これに気づいた わるいえんじにあ の皆様がGARPに反応して発火する"ただのIoTボタン"として使えるように色々開発しているようです。

鍵閉めたbuttonの作成

単純にGARPのパケットが取れればいいので適当に簡易パケットキャプチャを作っても良いのですが、流石に試験前にガッツリ遊んでるわけにはいかないので既存のライブラリを利用しました。

dash-button

特に理由はありませんが今回はnodejsで実装しています。
ボタンの押下に反応してDiscordへwebhookでメッセージを送信することで鍵を閉めたかのログを取ります。
postする部分にはrequestを使っています。

request

パケットを取りこぼす

今回の実装に当たって躓いた点です。
しばらく感覚を開ければ反応してくれるのですが、どうしても頻繁にパケットを取りこぼします...
他の言語やライブラリで実装してみたり、PacketFuを使ってみたりもしたのですが解決しませんでした。

どうやら、バッファロー製のルーターが持っている”snooping機能”が悪かったようです。

f:id:s10akir:20180409010625p:plain

説明が書いてありました。

f:id:s10akir:20180409010648p:plain

こいつを無効にしたことで無事、取りこぼすことがなく反応するようになりました。めでたし。

あとはこのボタンを玄関のドアに貼り付けるだけです。

感想

amazon dash buttonをIoTボタンとして使おうと思うと、

  • 特定のLAN内でのみ有効(Wi-Fi必須)
  • ブロードキャストを監視するサーバー機が必要

という課題がありますが、この点さえハマれば手軽で安いIoTボタンが手に入ってとてもおもしろいです。
やや出遅れたおかげでライブラリは豊富ですし、そもそも対して難しいことはしていないので敷居も低いですし。 今時の家庭ではWi-Fi環境はあるしRaspberryPiやPINE64の登場で自宅サーバの難易度も下がっているしで、あとはシチュエーションさえ合えばいい感じですね。

朝起きたらTwitterに「ぽきた!」ってつぶやく用のボタン発注しなければ。

自宅サーバーをArchLinuxへ移行した

VPSをいくつか借りている他に、自宅にも一台サーバーを置いています。主な用途は知り合い間での用途のホスティングです。
第三世代Core i5 RAM9GBの中途半端なマシンです。

今まではDebianで運用していましたが、学校用マシンをManjaroで使い最近完全なArchを入れ直したりして慣れてきたのでこちらもArchにしてみました。

動機

  • まだ知識が浅かった頃に構築したサーバーなのでいろいろとやり直したいことがあったから
  • 最近Archを多く使うようになり、Debian系よりこちらのほうが使いやすく感じてきたから
  • ArchWikiの「少数の機能しかプリインストールされてないからこそ、Linux サーバーのベースとして簡単に使うことができます。」という主張に納得したから

インストール作業

基本的にはArchWikiのインストール手順に従いました。

インストール後のセットアップ

IPアドレスの固定

/etc/dhcpcd.confに記述しました。

sshのインストール

# pacman -S openssh
# sudo vim /etc/ssh/sshd_config
パスワード認証とrootログインを無効化、公開鍵暗号方式に設定。

yaourtのインストール

# vim /etc/pacman.conf

追記

[archlinuxfr]
SigLevel = Never
Server = http://repo.archlinux.fr/$arch

# pacman --sync --refresh yaourt

rbenvをシステムワイドにインストール

/usr/local/rbenvにクローン。作業グループ単位で権限を与えて適正ユーザをグループに追加。
環境変数/etc/profileに書きました。

Apacheのインストール

yaourt -S apache
conf.dがなかったり、Debianで標準で用意されてる設定がなかったりでちょっと戸惑いました。
vhostの設定は/etc/httpd/conf/vhostディレクトリを作成して、httpd.confからワイルドカードで読み込むことにしました。

その他

  • rails
  • passenger
  • oracleJDK などをインストール、設定しました。

sambaもインストールして設定したいのですが、以前の環境で使っていたHDDを一度クリーンにしてからと思っています。
でも2.5TB溜まってるしどこに逃がすか…

感想

ArchLinuxを自力でインストールするのはこれが3回目です。
VAIO Pで練習 => 学校用マシンをArchLinuxで入れ直し => このサーバー)

  • ミニマルなので自分で管理しやすくてとても便利
  • AURの恩恵が大きい
  • 余計なものが入っていないので楽
  • なにかしようと思うと適切な知識が必要 => 必要な知識が身につく

などの理由でとても気に入っています。

モバイルで使うと電源管理がうまく行かずバッテリーが長持ちしないのですが、かといってPowertopをautoで使うと余計なことをしてくれたりして(USB マウスを無効化された)この辺も自力で学んでチューンしていくべきなんだろうなあと実感したり。



以上、応用情報前に遊んでる場合じゃないというおはなしでした。まずい。

VAIO P にArchLinuxをインストール

試験前日です。試験前って違うことが捗りますよね。

VAIO P

今は亡きSONYVAIO、その中でもかなり変態な端末です。
ポケットに入るUMPCというウリで(入ってない)、1600*768というド変態な解像度で一部の界隈に非常に人気があります。

かくいう私もVAIO P初期型の最上位SSDモデル(P91HS)を持っているのですが、今日たまたま友人との会話でVAIO Pが出てきたので久々に起動してみました。

Rictyをインストール中の図。

軽量OSをもとめて

VAIO Pは正直当時でも性能に難があったマシンなので、現代ではまともに使えません。
結構色々試した記憶があるのですが、一番引っかかるのはGMA500でした。

ちなみに、私は最終的にZabixOSに落ち着いたようです(記憶がないけど入ってた)。
デフォルトのWindowsVistaは正規リカバリなのに海賊版とか言われて起動しなくなりました…

そうだ、Arch入れよう

軽量OSと言えばこいつ。

メインの環境ではManjaroを使っているので、それを試したのですがそもそもインストーラがうまく動いてくれませんでした。無念。
仕方ないので素のArchを選択。

32bitのサポートが終わってる

ArchもManjaroも32bitのサポートを終えちゃいました。確かに需要は薄いです。

どうやら、Arch Linux32というコミュニティの管理しているリポジトリがあるみたいなのでそちらを使用します。

インストール

基本的にはArchWiki通りで問題ありませんでした。

ただし以下の点で引っかかりました。

yaourtのインストール

AURの資産を利用するためにyaourtをインストールしようとしたのですが、ここでコケました。

  1. /etc/pacman.confの編集
[archlinuxfr]
SigLevel = Never
Server = http://repo.archlinux.fr/$arch
  1. pacman -Sy

  2. pacman -S yaourt ここでエラー。package-queryの依存関係が解決できてない模様。

  3. package-queryのビルド makepkgはrootで実行できないので、super user権限のある一般ユーザが必要です。
    先に設定しておきます。

# visudo
追記

%sudo ALL=(ALL) ALL

ユーザー作成
# groupadd sudo
# useradd work
# gpasswd -a work sudo
# su work

ビルド

$ curl -O https://aur.archlinux.org/cgit/aur.git/snapshot/package-query.tar.gz
$ tar zxvf package-query.tar.gz
$ cd package-query
$ makepkg -si

ここでもまたエラー。yajlの依存関係が解決できてない。

yajlのインストール(引っかかった)

"yajl"です。この小さな画面に見合わない解像度のせいで、"yaji"だと間違えていました。
おかげで情報も全くないしインストールできないし…でそれなりに悩みました。

# pacman -S yajl

これでやっとpackage-queryがビルドでき、yaourtがインストールできます。

結構悲しかったのでこれ移行opensshを入れてssh越しに作業しました。

感想

考えてみたら、Archを自分の力でインストールしたのは初めてでしたが、思ってた以上に難しくなかったです。
もっと早く挑戦しとけばよかった。

結構まともに動いてくれて満足なので後は軽くGUI環境を整えて遊びます。お布団コーディングしたい。

【arch linux】特定のネットワークでのみデフォルトゲートウェイが自動取得できない

一ヶ月くらい前から、突然特定ネットワーク(特定一箇所の教室)でのみネットワークに接続できなくなりました。

色々調べたところ、IPはもらえておりサブネット内での通信はできるものの外には出られない状況です。

デフォルトゲートウェイが取得できていない

$ ip r
10.0.63.0/24 dev enp0s20f0u1u4 proto kernel scope link src 10.0.63.8 metric 100 

サブネットには接続できています。しかしデフォルトゲートウェイが設定されていません。どうやら自動取得できていないようです。

別のネットワーク(他の教室など)では取得できるので不思議です…

とりあえずの解決策

 sudo ip r add default via 10.0.63.254

手動で設定してやりました。

正直毎度毎度この教室を使うたびに設定するのも面倒です。
こちらの環境側に問題がありそうなのですが、一ヶ月色々試して原因を特定できなかったので春休みあたりに一回クリーンインストールしなおすことを考えています。

このネットワークのみに適用する設定を変なところで行ってしまっている気もするのですが設定ファイルが見当たりません…

Arch Linux(Manjaro Linux)でnvidiaドライバの更新後に解像度がおかしくなった

yaourt -Syyuをかけたらbumblebeeが動かなくなったので再起動をかけたら画面解像度が864x486になりました…

おそらく、nvidiaのドライバが更新された際に何か設定を上書きしてしまった模様。

対処

sudo rm -f /etc/X11/xorg.conf
sudo shutdown -r now

中身を見たら色々覚えのない設定がされていたので、これを書き換えてしまったみたいです。削除して再起動で解決しました。
忘れちゃいそうなので覚書。