平衡点
2015/03/03
_ VPS の Debian を Jessie に上げた
読んで字の如く。
(2015-03-06) 誤字修正
upgrade
upgrade 自体は特に嵌らず。適当に /etc/apt/sources.list を書き代えて、
% sudo apt-get update % sudo apt-get dist-upgrade
で終わった。
時刻合わせに systemd-timesyncd を使う
これまでは chrony を使っていたのだけれど、折角なので試しに systemd-timesyncd を使ってみることに。 systemd-timesyncd で時刻合わせを行なうには
- /etc/systemd/timesyncd.conf の Servers 行を修正
VM 内では systemd-timesyncd が起動しない。VM は親とは別に時刻合わせをするべき、という記憶があるのだけれど、ドコの話だったっけ? うろ覚えだけれど、数日たったら数秒ズレていたので、
mkdir -p /etc/systemd/system/systemd-timesyncd.service.d vim /etc/systemd/system/systemd-timesyncd.service.d/allow_vm.conf … % cat /etc/systemd/system/systemd-timesyncd.service.d/allow_vm.conf [Unit] ConditionVirtualization=
- /etc/systemd/[service名].d ディレクトリ以下に拡張子 .conf で Unit ファイルを置くと、既存の設定に追加/上書きできることは覚えておいて良いと思う。
Unit ファイルの読み込みと systemd-timesyncd の起動
% sudo systemctl daemon-reload % sudo systemctl start systemd-timesyncd
というわけで、結果
% timedatectl Local time: 火 2015-03-03 00:21:15 JST Universal time: 月 2015-03-02 15:21:15 UTC RTC time: 月 2015-03-02 15:21:14 Time zone: Asia/Tokyo (JST, +0900) NTP enabled: yes NTP synchronized: yes RTC in local TZ: no DST active: n/a
状況が知りたかったら
% sudo systemctl status systemd-timesyncd
みたいな.
apache 2.4
気がついたら Apache が 2.4 になっていた。
- /etc/apache2/site-availabe 以下の置くファイルは拡張子 .conf じゃないと駄目ッポ。
- 今迄そうだったっけ?
- Order allow,deny とかじゃなくて Require all granted みたいな記法で書く
- compatible モジュールもある。デフォルト有効?
- suexec に関して、明示的に Require all granted を書いておかないと何もできなかった。前からそうだっけ?
tdiary
テストも兼ねて、パッケージ更新してみたり。これについては別途。 index.fcgi が Internal Server Error で駄目。懐しの fcgiwrap を使って
#! /usr/bin/env ruby # -*- coding: utf-8 -*- # load '/usr/share/tdiary/index.fcgi' require 'fcgiwrap' FCGIWrap.each { load '/usr/share/tdiary/index.rb' }
なんてしてみたら、きちんと動作した。はて…?
他にも幾つか…。
気がついた事があるので、そのうちまとめて 勉強会 で話そうかと思っていたり。
2015/03/16
_ tDiary に bootstrap >= 3 を使う
tDiary のパッケージも更新できてちゃんと動いてるっぽいので、ついでに bootstrap >= 3 対応を試みてみた。 bootstrap(<= 2.x) 用のプラグインとして、既に tdiary-contrib/bootstrap-navi.rb at master · tdiary/tdiary-contrib があるわけで、これを元に幾つか修正を試みたり。
DOCTYPE を html5 に
必須ではなさそうだけれど、とりあえず試してみたり。 とはいえ、全然検証していないので単に DOCTYPE 宣言等をちまちまと弄っただけであったりする。
#!/usr/bin/env ruby # -*- mode: ruby; coding: utf-8 -*- # # doctype_html5.rb: update DOCTYPE as html5 # # Copyright (c) 2015 Youhei SASAKI <uwabami@gfd-dennou.org> # License: WTFPL # @conf.html_lang = 'ja' def doctype %Q[<!DOCTYPE html>] end
既存のプラグインのアレコレがちゃんと期待通りに動作するのか、は定かではない。
bootstrap >= 3 対応
やることは以下の二つ
- jquery を 1.9.1 に上げる
- js の読み込み
- bootstrap_navi の修正
このうち jquery を 1.9.1 にした事によって生ずる副作用に関しては、 全然検証していないことにご注意。
#!/usr/bin/env ruby # -*- coding: utf-8 -*- # Show navi for twitter-bootstrap theme >= 3.x # # Copyright (c) KAOD Masanori <kdmsnr at gmail.com> # 2015 Youhei SASAKI <uwabami@gfd-dennou.org> # You can redistribute it and/or modify it under GPL. def jquery_tag %Q[<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" type="text/javascript"></script>] end def bootstrap3_init @conf['bootstrap3.navbar_class'] ||= "navbar-default" @conf['bootstrap3.show_site_name'] ||= false @conf['bootstrap3.show_nav_admin'] ||= false @conf['bootstrap3.show_search_form'] ||= false end def bootstrap3_navi(options = {}) bootstrap3_init brand = "" if @conf['bootstrap3.show_site_name'] brand += <<-EOS <a class="navbar-brand" href="#{h @conf.base_url}">#{h @conf.html_title}</a> EOS end menu = "" if @conf['bootstrap3.show_nav_admin'] menu += <<-EOS #{navi_user.gsub(/span/, "li")} #{navi_admin.gsub(/span/, "li")} EOS else menu += <<-EOS #{navi_user.gsub(/span/, "li")} EOS end search = "" if @conf['bootstrap3.show_search_form'] search += <<-EOS <form class="navbar-form" role="search" method="get" action="http://www.google.co.jp/search" onsubmit="$('#sitesearch').val($(location).attr('host'))"> <input type="hidden" name="ie" value="UTF8"> <input type="hidden" name="oe" value="UTF8"> <input type="hidden" name="sitesearch" id="sitesearch"> <input type="text" class="form-control" placeholder="検索" name="q"> </form> EOS end <<-EOS <nav class="navbar #{@conf['bootstrap3.navbar_class']} "> <div class="container"> <div class="navbar-header"> <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> #{brand} </div> <!--/.navbar-header --> <div class="collapse navbar-collapse"> <ul class="nav navbar-nav"> #{menu} </ul> <ul class="nav navbar-nav navbar-right"> <li> #{search} </li> </ul> </div><!--/.nav-collapse --> </div><!--/.container --> </nav><!--/.navbar --> EOS end add_header_proc do header = " " header +=<<-EOS <link rel="stylesheet" href="bootstrap/css/bootstrap.min.css" type="text/css" media="all"> <link rel="stylesheet" href="bootstrap/css/bootstrap-theme.min.css" type="text/css" media="all"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <!-- [if lt IE 9]> <script src="extra_js/html5shiv.min.js" type="text/javascript"></script> <script src="extra_js/respond.min.js" type="text/javascript"></script> <![endif]--> <script src="bootstrap/js/bootstrap.min.js" type="text/javascript"></script> <script src="extra_js/ie10-viewport-bug-workaround.js" type="text/javascript"></script> EOS if @conf['bootstrap3.navbar_class'] =~/fixed-top/ header +=<<-EOS <style type="text/css"> <!-- body{ min-height: 2000px; padding-top: 70px; } --> </style> EOS else header +=<<-EOS <style type="text/css"> <!-- body{ padding-top: 20px; padding-bottom: 20px; } .navbar { margin-bottom: 20px; } --> </style> EOS end header end
というわけで。日記を置いた所に bootstrap を展開して、上記プラグインを有効にすると bootstrap >= 3 が有効になる。 ついでに、 html5shiv.js 、 respond.min.js 、 ie10-viewport-bug-workaround.js を日記ディレクトリの extra_js フォルダに放り込んでおく。 そろそろコイツラいらないのかもしれないけれど、どうなんだろう。
あとは、ヘッダ・フッタを適宜変える。
ヘッダ:
<%= bootstrap3_navi %> <div class="container"> <h1>日記のタイトル、とか</h1> </div> <div class="container"> <div class="main col-md-8 col-sm-12 col-xs-12">
フッタ:
</div><!-- /.main --> <div class="sidebar col-md-4 hidden-sm hidden-xs"> … </div><!--/.sidebar --> </div><!-- container -->
…とか?
tdiary.conf の設定項目は
@options['bootstrap3.navbar_class'] ||= "navbar-default" # navbar の class 指定 @options['bootstrap3.show_site_name'] ||= false # brand として @conf.html_title を表示する @options['bootstrap3.show_nav_admin'] ||= false # 「update.rb 」へのリンクを表示するか? @options['bootstrap3.show_search_form'] = true # Google のサイト内検索 を使うか?
としてある。
まとめ…?
とりあえず動くので良し、とするかなぁ…。どうデバッグして良いやら。浦島状態である。
2015/03/17
_ Subversion から Git への移行
最近、「もう Git で良いよ!」とお許し頂いたので、某リポジトリを Subversion から Git へ移行する作業を行なった。以下、そのメモ
Authors.txt の準備
そのままだと、コミットログが寂しい事になるので、既存の author を mapping するテキストを作成しておく。Subversion の working copy で
% svn log $SVN_URL | awk -F'|' '/^r[0-9]+/ { print $2 }' | sort -u
として、commit した人の一覧を出して、
svn username = Fullname <email address>
といった塩梅のテキストを作成しておく(以下、 Authors.txt とする)。
git svn でリポジトリを clone
以下で。
mkdir pkg git svn clone $SVN_URL --prefix=svn-import/ \ --stdlayout --authors-file=Authors.txt --no-metadata pkg
ここで、 pkg は実際に作成される Git リポジトリの名前. --stdlayout は、Subversion にありがちな trunk/tags/branches を Git の branch, tag に上手く mapping するための option. --no-metadata を指定すると、コミットログから SVN URL が削除される。Subversion を今後使うつもりがないなら指定しておくと良い。
Subversion の情報の変換
上記で --prefix=svn-import/ としたので、Subversion の branch, tag は Git では全てブランチとして
% git branch -r svn-import/hogehoge svn-import/herohero : svn-import/tags/hogehero-0_5
となる。このうち svn-import/tags を Git の tag に変換する。
ついでに、CVS 由来の、バージョン番号を =_</span>:)) で区切った番号付けを変更したり。
結果、以下の様なスクリプトを走らせた。
#! /bin/sh for branch in `git branch -r | egrep "svn-import/tags/.+$"`; do version=`basename $branch | sed 's/_/./g'` subject=`git log -1 --pretty=format:"%s" $branch` GIT_COMMITTER_DATE=`git log -1 --pretty=format:"%ci" $branch` \ git tag -f -m "$subject" "$version" "$branch^" git branch -d -r $branch done
タグはこれで良いかな。ブランチは不要そうなの軒並削除。 ついでに、今後弄らないであろう古いタグの名前付けを整理したり。
svn-remote.svn の削除
git svn で clone したので、Subversion関連の情報が .git 以下に残っている。 これを消すと終了
% git config --remove-section svn-remote.svn % rm -rf .git/svn .git/{logs/,}refs/remotes/svn-import/
まとめ
Git に慣れた身としては、 git-svn に比べて、やはり快適である。
…そして、過去の VCS から引き継いできたコミットログなので、ChangeLog の生成をどうするか、という点で悩み始める、など。いっそ git log をそのまま貼りつけてやろうかしらん。コミットがアトミックじゃないので、適宜 squash した方が良いだろうか。
あとは、リポジトリの外部公開かな。 Gitweb - Git SCM Wiki を使うのがやっぱり一般的なんだろうかね。
2015/03/20
_ Wanderlust で分割メールを扱う
とある研究会の記念写真(まあ、今時 JPGですよね)がメールで送られてきたのだけれど、久々に分割送信されたメールであった。
さて、Wanderlustで読めた筈だよなぁ、とかジタバタすることしばし。
(setq wl-message-auto-reassemble-message/partial t)
としておくと良い、ということであった。