平衡点
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)
としておくと良い、ということであった。