356びぼーろく; 再 google drive の自動同期

rcloneを使ってgoogledriveと同期していたが、やはり面倒なので自動的にやってほしい。
双方向同期をしてくれる grive2 とファイルの状態を監視してくれるincronでgoogle driveを同期することに成功したようなので、そのメモ。
grive2はgriveのフォークされたものらしい(詳しくはここを参照)。

grive2はdebianのパッケージにはないので自分でコンパイルが必要。おそらく書いてあるとおりにやればOK。
まずは必要なパッケージをインストール。

    apt-get install git cmake build-essential libgcrypt11-dev libyajl-dev \
    libboost-all-dev libcurl4-openssl-dev libexpat1-dev libcppunit-dev binutils-dev \
    debhelper zlib1g-dev dpkg-dev pkg-config

適当な作業ディレクトリにgriveのファイルをコピーしてコンパイルを実行。

    mkdir GRIVE2
    cd GRIVE2
    git clone https://github.com/vitalif/grive2
    cd grive2
    dpkg-buildpackage -j4

最後に鍵がないと怒られるがパッケージ自身はGRIVE2以下にできているはず。公開するパッケージでもないので、とりあえず良しとする。
あとはgdebi等でインストールする。 うまくできていればGRIVE2以下は不要なのでGRIVE2は削除してもOK。

さて、google driveと同期したいディレクトリを ~/GOOGLEDRIVEとする。 まずは以下を実行。

    grive -a -p ~/GOOGLEDRIVE

うまく行けばgoogleに認証してもらうためのリンクが表示されるので言われたとおりに認証し、コードを取得する。 後はgriveに取得したコードを入力する。
うまく行けば同期が始まるので同期が終わるまでのんびり待つ。

今回の最大目的は同期の自動化なので、~/GOOGLEDRIVEを監視して、変更があればgriveを動かすようにしたい。 そこでincron(inotify clon)を利用する。
まずは必要なものをインストール。

    apt-get install incron

incronはそのままだと通常ユーザーは使えないそうなので、/etc/incron.allow に自分のユーザー名を追加しておく。 (ファイル自体を削除するという記事も見かけたけど、一応許可するユーザを追加することにした)

その後はincrontab -e で以下を追記。

/home/ユーザー名/GOOGLEDRIVE IN_MODIFY,IN_ATTRIB,IN_CREATE,IN_DELETE,IN_DELETE_SELF,IN_CLOSE,IN_MOVE_SELF,IN_MOVE,IN_NO_LOOP /bin/sleep 4 &&/usr/bin/grive -p $@

書式は 「監視する対象(ディレクトリ可)」 「監視イベント」 「イベントが起きたときの実行するコマンド」 となっているので適宜入力。
監視イベントはいまいち良く分からないので、このあたりを参照。inotifyとよく似ているが、最後のIN_NO_LOOPは「実行するコマンドが完了するまで、イベント監視を無効にする」らしい($@は監視する対象を表す変数)。
ちなみに、なぜか$PATHは反映されていないらしいのでコマンドは絶対パスで書く。
(未確認)

うまく実行されているかどうか適当にテストしてみてうまく同期されているかどうか確認する。 一応/var/log/syslogも確認しておくと安全かも。

さて、このままだとgoogle driveで変更があった場合に同期されないので、通常のcronで適当な感覚で同期してもらうことにする。
crontab -e で以下を追加。

     */15 * * * * grive -p ~/GOOGLEDRIVE

これで15分毎にgriveが実行されるはず。

さて、これでgriveが定期的にかつローカルのファイルが変更されれば自動実行されるようになった。うれしい。

355びぼーろく; ニンテンドースイッチ

今やっている研究に若干の光明が差し始めた(ような気がする)。
これが気のせいでないことを祈るばかり...。

せっかくボーナスも出たのでニンテンドースイッチを購入。
ついでに名作と名高いゼルダも購入。
ほぼ毎日6時間以上リンクと冒険している。あっちの世界の住人と言えるレベル。


ついでに雪に備えてスコップも購入。これで雪が降っても大丈夫。
リンクと冒険している間こたつが冷たいので、電気カーペットを購入しようかどうかを検討中。



さて、同僚が試験を作成する際、enumerate環境を使わずにやっているらしく、せっかくなので、自前でできないかどうかをやってみるとうまくいったのでそのメモ。

基本的にはenumerate環境と同じように使えることを目標としたが、当然本家とは比べ物にならない出来なので微妙なところ。


まずプリアンブルに以下を追加。


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 大問・小問を自動でつけてくれるやつ始 %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcounter{DaimonNumber}
%%大問カウンタの作成
\setcounter{DaimonNumber}{1}
%%大問カウンタの初期化
\def\Daimon{
\setcounter{SyoumonNumber}{1}
%%小問カウンタの初期化
\noindent
\theDaimonNumber .
%%大問番号表示
\addtocounter{DaimonNumber}{1}
%%大問カウンタを1増やす
}
\newcounter{SyoumonNumber}
%%小問カウンタの作成
\setcounter{SyoumonNumber}{1}
%%小問カウンタの初期化
\def\Syoumon{
~(\theSyoumonNumber)
%%小問番号表示 かっこつけて、ちょい字下げ
\addtocounter{SyoumonNumber}{1}
%%小問カウンタを一つ増やす
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 大問・小問を自動でつけてくれるやつ終 %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Daimon といれると1、が出力される。次に\Daimonが出てくると2、が表示され、3、4、...と続く。 小問の場合は\Syoumonは(1)、次の\Syoumon で(2)...と続く。 \Syoumonの数字は次の大問(\Daimon)が出てくるとリセットされる。 これで \Daimon \Syoumon \Syoumon \Daimon \Syoumon \Syoumon \Syoumon \Syoumon と入力すると、 1、(1)(2)2、(1)(2)(3)(4) と出力される。 ついでに丸囲み文字を順番に出力するmarugakomi 環境も作成。 プリアンブルに以下を追加。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 選択肢を自動で作るやつ始 %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcounter{MARUNumber}
%%丸囲みで使うカウンタ作成
\def\MARU{
\textcircled{\theMARUNumber}
%%丸囲み番号表示
\addtocounter{MARUNumber}{1}
%%丸囲みカウンタを1増やす
}
\newenvironment{marugakomi}
{
\setcounter{MARUNumber}{1}
%%丸囲みカウンタの初期化
~\\
%%最初に改行する
}
{
\setcounter{MARUNumber}{1}
%%丸囲みカウンタの初期化
~\\~\\
%%最後に改行する
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 選択肢を自動で作るやつ終 %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
使い方は

\begin{marugakomi}\maru ほげ、 \maru ふが\end{marugakomi}

で①ほげ、②ふがと表示されていく。

354びぼーろく; 続 exim4 で gmail アカウントにメールを転送する

以前、exim4 で gmail アカウントにメールを転送する で設定方法を書いたけど、どうやら最近いろいろと変わったようなので書き直し。

こことかここ とかを参考にしながら設定。
まず、exim4をインストールし設定する。
aptitude install exim4
dpkg-reconfigure exim4-config
  * メール設定の一般的なタイプ ->スマートホストでメール送信: SMTP または fetchmail で受信する
  * システムメール名 ->localhost
  * 入力側 SMTP 接続をリスンする IP アドレス ->127.0.0.1
  * メールを受け取るその他の宛先 ->未入力
  * メールをリレーするマシン ->未入力
  * 送出スマートホストのIPアドレスまたはホスト名 ->smtp.gmail.com::587
  * 送出するメールでローカルメール名を隠しますか ->いいえ
  * DNS クエリの数を最小限に留めますか (ダイヤルオンデマンド) ->いいえ
  * ローカルメールの配送方式 ->/var/mail内のmbox形式
  * 設定を小さなファイルに分割しますか ->いいえ



次に/etc/exim4/passwd.client に以下を追加。

gmail-smtp.l.google.com:ユーザ名:パスワード
*.google.com:ユーザ名:パスワード
smtp.gmail.com:ユーザ名:パスワード

ユーザー名とパスワードはそれぞれ自分のgmailアカウントのものを使用する。

ユーザー名はユーザ名@gmail.comのユーザー名を入れる。
パスワードは二段階認証を実施している場合はアプリパスワードをここから発行し、そのパスワードを書く。
(あるいは安全性の低いアプリのアクセスを許可するのでも良いのかも。)

あとは/etc/exim4/email-addresses に

ログイン名@localhost: ユーザー名@gmail.com

を追加し、/etc/aliases の最後に

ログイン名: ユーザー名@gmail.com

を加える。で、最後に update-exim4.conf を実行する。

一応確認として、
exim4 -qff
tail /var/log/exim4/mainlog
でログを見て問題なければおそらく大丈夫。

一応テストメールとして、
echo "This is a test" | mail -s "TESTMAIL" ユーザー名@gmail.com
とかやってgmailに届いていればおそらく大丈夫。

さて、imapで受信したメールもついでに転送したいのでそのあたりの設定をする。
まずはfetchmailをインストール。

aptitude install fetchmail

その後、fetchmailの設定ファイル .fetchmailrc をホームディレクトリに作成する。
内容は以下のように入力する。

set postmaster "ユーザー名@gmail.com"
set no bouncemail
set no spambounce
set syslog
poll "受信したいメールサーバー"
proto imap
username "受信したいメールのアカウント(ユーザー名)"
password "受信したいメールのアカウントのパスワード"
smtpname "ユーザー名@gmail.com"
smtphost "localhost"
no mimedecode
keep
ssl

パスワード等が入っているので、パーミッションを変更。

chmod 0700 ~/.fetchmailrc

これで、以下を実行するとメールを読みに行って転送してくれるようになるはず。
試しに、
fetchmail -c 
でうまく受信しているかどうかを確認する。
うまく送信しているようであればcronに登録しておく。
crontab -e 
で以下を追加。
(2020/2/11追記: fetchmailがハングアップしないように60秒で接続を打ち切るように設定。 )

# Forward Mail To Gmail
# at every 3 minites with:
   */3 * * * * fetchmail -t 60

これでうまくいくはず。これでしばらく苦労はしなさそう。




744びぼーろく; どうやら昨日が

 バッハの誕生日だったらしい。おめでとうございます。