ラベル Other の投稿を表示しています。 すべての投稿を表示
ラベル Other の投稿を表示しています。 すべての投稿を表示

2017年8月13日日曜日

使用されている CSS のみ抽出したり整形したり

環境: Ubuntu 16.04.2 LTS


Sphinx の html 文書を用意

使用されている CSS のみ抽出したり、整形したりする対象として、Sphinx の html 文書を用意します。

パッケージインストール

$ sudo apt install python3-sphinx
$ sudo apt install make

Sphinx 文書を作成

$ mkdir sphinx
$ cd sphinx/
$ sphinx-quickstart
$ make html

$ ls -la build/html/
total 40
drwxrwxr-x 4 ubuntu ubuntu 4096 Aug 13 16:47 .
drwxrwxr-x 4 ubuntu ubuntu 4096 Aug 13 16:47 ..
-rw-rw-r-- 1 ubuntu ubuntu  230 Aug 13 16:47 .buildinfo
-rw-rw-r-- 1 ubuntu ubuntu 2541 Aug 13 16:47 genindex.html
-rw-rw-r-- 1 ubuntu ubuntu 3770 Aug 13 16:47 index.html
-rw-rw-r-- 1 ubuntu ubuntu  197 Aug 13 16:47 objects.inv
-rw-rw-r-- 1 ubuntu ubuntu 2943 Aug 13 16:47 search.html
-rw-rw-r-- 1 ubuntu ubuntu  240 Aug 13 16:47 searchindex.js
drwxrwxr-x 2 ubuntu ubuntu 4096 Aug 13 16:47 _sources
drwxrwxr-x 2 ubuntu ubuntu 4096 Aug 13 16:47 _static

作成した Sphinx 文書の index.html ファイルで使用している CSS ファイルを確認

$ head -n 20 build/html/index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    <title>Welcome to aaa’s documentation! &mdash; aaa ccc documentation</title>

    <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />

    <script type="text/javascript">
      var DOCUMENTATION_OPTIONS = {
        URL_ROOT:    './',
        VERSION:     'ccc',
        COLLAPSE_INDEX: false,
        FILE_SUFFIX: '.html',
        HAS_SOURCE:  true

以下の CSS ファイルを使っていました。

  • _static/alabaster.css
  • _static/pygments.css

CSS ファイルのサイズを確認

$ ls -l build/html/_static/alabaster.css build/html/_static/pygments.css
-rw-rw-r-- 1 ubuntu ubuntu 9220 Aug 13 16:47 build/html/_static/alabaster.css
-rw-rw-r-- 1 ubuntu ubuntu 4149 Aug 13 16:47 build/html/_static/pygments.css

2つの CSS ファイルをあわせて 13KBytes 程度です。

これらの CSS ファイルには実際には使用されていない CSS やコメントも含まれています。


使用されている CSS のみ抽出

UnCSS を使って、使用されている CSS のみ抽出します。

パッケージインストール

$ sudo apt install nodejs
$ sudo apt install npm

node という名前で nodejs を使えるようにします

$ sudo update-alternatives --install /usr/bin/node node /usr/bin/nodejs 10

$ ls -la /usr/bin/node
lrwxrwxrwx 1 root root 22 Aug 13 17:14 /usr/bin/node -> /etc/alternatives/node

$ ls -la /etc/alternatives/node
lrwxrwxrwx 1 root root 15 Aug 13 17:14 /etc/alternatives/node -> /usr/bin/nodejs

UnCSS インストール

$ sudo npm install -g uncss

使用されている CSS のみ抽出

$ uncss build/html/index.html > build/html/_static/res.css

使用されている CSS のみ抽出され、サイズが 13KBytes 程度から 6KBytes 程度に減りました。

$ ls -l build/html/_static/res.css
-rw-rw-r-- 1 ubuntu ubuntu 5943 Aug 13 18:05 build/html/_static/res.css

CSS ファイルを整形

res.css のファイルの最後は以下のようになっていました。

$ tail build/html/_static/res.css

/* misc. */

/* Make nested-list/multi-paragraph items look better in Releases changelog
 * pages. Without this, docutils' magical list fuckery causes inconsistent
 * formatting between different release sub-lists.
 */

/* Hide fugly table cell borders in ..bibliography:: directive output */
/*** uncss> filename: build/html/_static/pygments.css ***/ /* Comment */ /* Error */ /* Keyword */ /* Operator */ /* Comment.Hashbang */ /* Comment.Multiline */ /* Comment.Preproc */ /* Comment.PreprocFile */ /* Comment.Single */ /* Comment.Special */ /* Generic.Deleted */ /* Generic.Emph */ /* Generic.Error */ /* Generic.Heading */ /* Generic.Inserted */ /* Generic.Output */ /* Generic.Prompt */ /* Generic.Strong */ /* Generic.Subheading */ /* Generic.Traceback */ /* Keyword.Constant */ /* Keyword.Declaration */ /* Keyword.Namespace */ /* Keyword.Pseudo */ /* Keyword.Reserved */ /* Keyword.Type */ /* Literal.Number */ /* Literal.String */ /* Name.Attribute */ /* Name.Builtin */ /* Name.Class */ /* Name.Constant */ /* Name.Decorator */ /* Name.Entity */ /* Name.Exception */ /* Name.Function */ /* Name.Label */ /* Name.Namespace */ /* Name.Tag */ /* Name.Variable */ /* Operator.Word */ /* Text.Whitespace */ /* Literal.Number.Bin */ /* Literal.Number.Float */ /* Literal.Number.Hex */ /* Literal.Number.Integer */ /* Literal.Number.Oct */ /* Literal.String.Backtick */ /* Literal.String.Char */ /* Literal.String.Doc */ /* Literal.String.Double */ /* Literal.String.Escape */ /* Literal.String.Heredoc */ /* Literal.String.Interpol */ /* Literal.String.Other */ /* Literal.String.Regex */ /* Literal.String.Single */ /* Literal.String.Symbol */ /* Name.Builtin.Pseudo */ /* Name.Variable.Class */ /* Name.Variable.Global */ /* Name.Variable.Instance */ /* Literal.Number.Integer.Long */

改行されておらず、可読性が低いので整形します。

パッケージインストール

$ sudo apt install python3-cssutils

以下のように Python スクリプト作成

$ cat test.py
#!/usr/bin/env python3

import cssutils

sheet = cssutils.parseFile('build/html/_static/res.css')
print(sheet.cssText.decode())

CSS ファイルを整形

$ ./test.py > build/html/_static/res2.css

res2.css の中身を見ると、整形されていることを確認できます。



2015年9月3日木曜日

シェルのプロンプトに表示されるカレントディレクトリを絶対パスからベース名に変更

Ubuntu の場合、シェルのプロンプトに表示されるカレントディレクトリは以下のようにデフォルトで絶対パスとなります。

worker@testserver:/etc/default$

これだと深い階層に移動した場合にディレクトリが長くなり気になります。

worker@testserver:/usr/src/linux-headers-3.13.0-62/drivers/net/dpa/NetCommSw/integrations/P3040_P4080_P5020$

なので、プロンプトに表示されるカレントディレクトリをベース名のみに変更してみました。


環境:
Ubuntu 14.04 (Trusty Tahr) Server

以下のように ~/.bashrc の中で PS1 の小文字の \w を大文字の \W にします。

$ diff -u ~/.bashrc.org ~/.bashrc
--- /home/worker/.bashrc.org    2015-09-02 12:54:06.123542075 +0900
+++ /home/worker/.bashrc        2015-09-03 12:36:01.163542075 +0900
@@ -57,16 +57,16 @@
 fi

 if [ "$color_prompt" = yes ]; then
-    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
+    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]\$ '
 else
-    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
+    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\W\$ '
 fi
 unset color_prompt force_color_prompt

 # If this is an xterm set the title to user@host:dir
 case "$TERM" in
 xterm*|rxvt*)
-    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
+    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \W\a\]$PS1"
     ;;
 *)
     ;;

次回ログインからはプロンプトに表示されるカレントディレクトリがベース名のみとなります。

worker@testserver:P3040_P4080_P5020$ pwd
/usr/src/linux-headers-3.13.0-62/drivers/net/dpa/NetCommSw/integrations/P3040_P4080_P5020

2015年8月24日月曜日

sar コマンド (sysstat) を使えるようにする

環境

Ubuntu 14.04 (Trusty Tahr) Server

インストール

$ sudo apt-get install sysstat

デフォルトで取得間隔は 10分となっていますが、変更する場合は cron ファイルの該当箇所を変更すると良いようです。

$ cat /etc/cron.d/sysstat
# The first element of the path is a directory where the debian-sa1
# script is located
PATH=/usr/lib/sysstat:/usr/sbin:/usr/sbin:/usr/bin:/sbin:/bin

# Activity reports every 10 minutes everyday
5-55/10 * * * * root command -v debian-sa1 > /dev/null && debian-sa1 1 1

# Additional run at 23:59 to rotate the statistics file
59 23 * * * root command -v debian-sa1 > /dev/null && debian-sa1 60 2

sysstat パッケージをインストールするだけではデータ取得開始しないようです。

$ sar
Cannot open /var/log/sysstat/sa13: No such file or directory
Please check if data collecting is enabled in /etc/default/sysstat

sysstat サービスも開始していません。

$ sudo service sysstat status
 * sadc cron jobs are disabled

sysstat を有効にします。

$ pwd
/etc/default

$ diff -u sysstat.org sysstat
--- sysstat.org 2015-08-21 12:33:07.168280000 +0900
+++ sysstat     2015-08-21 12:41:04.528280000 +0900
@@ -6,5 +6,5 @@
 # Should sadc collect system activity informations? Valid values
 # are "true" and "false". Please do not put other values, they
 # will be overwritten by debconf!
-ENABLED="false"
+ENABLED="true"

取得開始となりました。

$ sudo service sysstat status
 * sadc cron jobs are enabled

sar コマンドで値の確認もできます。

$ sar
... snip ...
12:45:01 PM     all      0.15      0.00      0.08      0.12      0.00     99.66
12:55:01 PM     all      0.15      0.00      0.08      0.14      0.00     99.62

Average:        CPU     %user     %nice   %system   %iowait    %steal     %idle
Average:        all      0.18      0.03      0.09      0.12      0.00     99.58

2015年7月10日金曜日

GUI デスクトップ環境が無いサーバーでの Ctrl と Caps キーを入れ替え

「 Ubuntu 14.04 で Ctrl と Caps キーを入れ替え その2 」などで紹介した Ctrl と Caps キーを入れ替える方法は、GUI デスクトップ環境が無いサーバーでは使えません。

そのようなデスクトップ環境が無い場合でも /etc/default/keyboard ファイルで Ctrl と Caps キーを入れ替えることができるようなので試してみました。

環境

Ubuntu 14.04 (Trusty Tahr) Server

/etc/default/keyboard を編集

$ pwd
/etc/default

$ diff -u keyboard.org keyboard
--- keyboard.org        2015-06-19 12:54:23.988402619 +0900
+++ keyboard    2015-06-30 12:51:01.306366151 +0900
@@ -8,7 +8,7 @@
 XKBMODEL="pc105"
 XKBLAYOUT="jp"
 XKBVARIANT=""
-XKBOPTIONS=""
+XKBOPTIONS="ctrl:swapcaps"

 # If you don't want to use the XKB layout on the console, you can
 # specify an alternative keymap.  Make sure it will be accessible

/etc/default/keyboard の編集後にシステムを再起動しても入れ替わらず、以下を実行すると入れ替わりました。

$ sudo dpkg-reconfigure -phigh console-setup

2015年7月9日木曜日

コマンドラインから Ubuntu インストール ISO イメージを USB メモリに焼き付け

dd コマンドを使って USB メモリに書き込むだけでとりあえずうまくいきました。

Attention

USB メモリの内容を ISO ファイルの内容で上書きします。上書き前の USB メモリのデータは消去されます。

Attention

以下は USB メモリを /dev/XXX として認識している場合の手順です。 それ以外のデバイスとして認識している場合は USB メモリとは関係ない /dev/XXX のデータを上書きして消去してしまうので気をつけて下さい。

環境

Ubuntu 14.04 (Trusty Tahr) Server

以下実行

$ sudo dd if=ubuntu-14.04.2-desktop-amd64.iso of=/dev/XXX
  • USB メモリにイメージを書き終わるまでにしばらくかかります。

この USB メモリから PC をブートすると通常の ubuntu インストーラが起動しました。


2015年6月14日日曜日

Google マップ URL のパラメーターについて

Google マップ URL のパラメーターについて調べてみました。

いろいろなパラメーターがありますが、とりあえず気になったものだけ調べてます。


<iframe> タグでのインライン表示

<iframe> タグでインライン表示するためには output=embed を付けます。

<iframe src="http://maps.google.co.jp/maps?output=embed" width="600" height="450" frameborder="0">
  この部分は iframe 対応のブラウザで見てください。
</iframe>

実際のインラインは以下のようになります。



地図の中心を緯度、経度で指定

ll=35.680834,139.766852 というように指定します。 (指定したのは東京駅の緯度、経度です。)

<iframe src="http://maps.google.co.jp/maps?ll=35.680834,139.766852&output=embed" width="600" height="450" frameborder="0">
  この部分は iframe 対応のブラウザで見てください。
</iframe>

縮尺が小さいので中心が東京駅かどうかわかりませんが、日本が地図の中心になっています。



縮尺を指定

z=13 というように指定します。この値が小さいほど広範囲 (縮尺が小さい)、大きいほど詳細 (縮尺が大きい) になります。

<iframe src="http://maps.google.co.jp/maps?ll=35.680834,139.766852&z=13&output=embed" width="600" height="450" frameborder="0">
  この部分は iframe 対応のブラウザで見てください。
</iframe>

先ほどよりずっと詳細に表示され、東京駅が中心になっていることが確認できます。



検索結果を指定 その1

q=駐車場 というように指定すると、「駐車場」を検索し、結果が表示されます。

<iframe src="http://maps.google.co.jp/maps?ll=35.680834,139.766852&z=13&q=駐車場&output=embed" width="600" height="450" frameborder="0">
  この部分は iframe 対応のブラウザで見てください。
</iframe>


検索結果を指定 その2

q=東京都中央区 というような検索をすると、中央区のエリアが表示されました。

<iframe src="http://maps.google.co.jp/maps?ll=35.680834,139.766852&z=13&q=東京都中央区&output=embed" width="600" height="450" frameborder="0">
  この部分は iframe 対応のブラウザで見てください。
</iframe>


検索結果を指定 その3

q=loc:35.710032,139.810722 というようにすると指定した場所にピンが表示されます。 (指定したのはスカイツリーの緯度、経度です。)

<iframe src="http://maps.google.co.jp/maps?ll=35.680834,139.766852&z=13&q=loc:35.710032,139.810722&output=embed" width="600" height="450" frameborder="0">
  この部分は iframe 対応のブラウザで見てください。
</iframe>

ll=35.680834,139.766852 というように、中心を東京駅にしているのに、インライン表示された地図はなぜか東京駅と q=loc:35.710032,139.810722 (スカイツリー) の中間あたりが中心となっています。

なお、<a> で張ったリンク先の Google map ではちゃんと東京駅が中心になっています。 ( output=embed は指定から外してます)

http://maps.google.co.jp/maps?ll=35.680834,139.766852&z=13&q=loc:35.710032,139.810722

2015年5月30日土曜日

Gnupg 鍵作成とかのためにエントロピーを増加させる

Gnupg 鍵を作成する場合によく以下のメッセージが出てエントロピーが貯まるまで待たされます。

$ gpg --gen-key
... snip ...
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.

Not enough random bytes available.  Please do some other work to give
the OS a chance to collect more entropy! (Need 241 more bytes)

メッセージに従ってキーボードのキーを一生懸命に打ったりするのですが、効いているかどうかいまいちわからないので調べてみました。

環境

Ubuntu 14.04 (Trusty Tahr) Server

まずは結論から。

  • キーボードのキーを打つとエントロピーを貯めることができました。
  • $ sudo bash -c 'while true; do date; find / > /dev/null; sleep 1; done' では、2回目以降のループでの find ではエントロピーは貯まりませんでした。
  • しかし、毎回の find の前にページキャッシュをクリアするとエントロピーを貯めることができました。

以下詳細です。


貯まっているエントロピー量の確認方法

以下のように確認できます。

$ cat /proc/sys/kernel/random/entropy_avail
783

キーボードのキーを打つとエントロピーが貯まることを確認

gpg --gen-key を実行していない状態でキーボードのキーをぐちゃぐちゃと打ってみました。

エントロピーの変化は以下のとおりです。

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisR051yOlGi0ju-LtXc5JOP3iOeA0aEUu-2t9i8rO7toHUgPHqhgDqnVst1Td_YfYbwwMoNo3p_vtFeMp94xYxgzuVauUx6sCl1Rbv1ovCfQ1l1fK6tJpIWDuNdO1Kx-w1pJYLCAFH/s1600/typing.png
  • 12:33:15 タイピング開始
  • 12:36:15 タイピング終了

1分間隔で 150程度エントロピーが減るのがなぜなのかわかりませんが、とにかくキーボードのキーを打つとエントロピーが貯まるようです。


‘find /’ でエントロピーの変化を確認

ディスクアクセスがあるとエントロピーが増えるとのことなので、 $ sudo bash -c 'while true; do date; find / > /dev/null; sleep 1; done' を実行してみました。

エントロピーの変化は以下のとおりです。

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0yWvAWuywBtKZZDILnWUU2XhWnMV6LnL1clUhNcccVBm4KQWk9JGVNxQgrP3MUenKN8nKocThobfpN-7ncvHdAeC2lzS13AP16aiHsrS0-sfjVYnyjkOmE-IaBREvZ9lPxsm575_8/s1600/finding.png
  • 12:33:55 コマンド開始
  • 12:34:19 1回目の find 終了 (以降、while ループで find を繰り返す)
  • 12:36:55 コマンド終了

while ループで find を実行しているのですが、1回目の find が 12:34:19 頃に終わりました。

1回目の find の間はエントロピーが増えているのですが、その次の find 以降は増えませんでした。

ファイル状態のキャッシュ等なんらかの要因で、2回目以降はディスクアクセスが無かったのではないかと思われます。


毎回 find の前にページキャッシュをクリアしてエントロピーの変化を確認

上で確認したように、 $ sudo bash -c 'while true; do date; find / > /dev/null; sleep 1; done' だと 2回目以降の find はページキャッシュのためにエントロピーを増やすことができなさそうなので、毎回の find の前にページキャッシュをクリアしてみます。

コマンド

sudo bash -c "
while true
do
    date
    sync
    echo 3 > /proc/sys/vm/drop_caches
    find / > /dev/null
    sleep 1
done
"
  • 毎回の find の前に sysnc と echo 3 > /proc/sys/vm/drop_caches を実行します。

エントロピーの変化は以下のとおりです。

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzinKg6qddVKTrEATrntN3Q_2J-Unv4kFapvjqqGOQpi6J1E-nxrruGrr_AcGck4z8jzmuz0kjobUN2SLYbo-LgRPcaQ5CihG4iRIbP7DIs2GXk940MRdPebEW29X8aiaGhCBd-a8N/s1600/findig_and_cachedel.png
  • 12:33:25 コマンド開始
  • 12:36:25 コマンド終了

上のキーボードのキーを打つ場合と同様に1分間隔で 150程度エントロピーが減るのがなぜなのかわかりませんが、エントロピーをためることができました。


2015年1月6日火曜日

サーバー起動時に ISO イメージをループバックマウント

サーバー起動時に ISO イメージをループバックマウントするようにしてみました。

環境: Ubuntu 14.04 (Trusty Tahr) Server

/etc/fstab に以下の一行を追加するだけです。

/some/where/ubuntu-14.04.1-server-amd64.iso  /some/where/mount/point  iso9660  ro,loop  0  0

以降、サーバーを起動すると /some/where/ubuntu-14.04.1-server-amd64.iso が /some/where/mount/point にループバックマウントされています。

サーバーを再起動しなくても、以下でマウントすることもできます。
$ sudo mount /some/where/mount/point

/etc/fstab に書いたマウントポイントを mount コマンドの引数にしています。


2014年12月31日水曜日

SSL 3.0 の脆弱性「POODLE」対策のために Firefox 側で変更となったと思われる設定箇所

「 自宅の DD-WRT Wi-Fi ルーターの SSL, TLS 対応状況を openssl コマンドで確認 」 で書いた通り、久しぶりに DD-WRT をインストールした Wi-Fi ルーターの管理画面に Firefox から https で接続しようとしたところ、「切断が中断されました」と表示されて接続することができなくなっていました。

今回は SSL 3.0 の脆弱性「POODLE」 対策のために Firefox 側で変更となったと思われる設定箇所を確認してみました。

環境

  • Ubuntu 14.04 (Trusty Tahr) Desktop 日本語 Remix
  • Firefox 34.0

まずは Firefox の URL を入力する箇所に「about:config」と入力します。

「動作保証対象外になります!」と表示されますが、「細心の注意を払って使用する」をクリックして次に進みます。

security.tls.version.min, max の値を確認

上部の検索文字を入力する箇所に「security.tls.version」を入力

検索結果から以下を確認できました。

  • security.tls.version.min の値が 1
  • security.tls.version.max の値が 3

これらの値の意味は http://kb.mozillazine.org/Security.tls.version.* によると

  • 0: SSL 3.0
  • 1: TLS 1.0
  • 2: TLS 1.1
  • 3: TLS 1.2

とのことです。この設定では TLS 1.0, 1.1, 1.2 を使用することはできますが、 SSL 3.0 が使用できない設定になっていました。

security.tls.version.fallback-limit の値を確認

上部の検索文字を入力する箇所に「security.tls.version.fallback-limit」を入力

検索結果からこの設定の値が 1であることを確認できました。

この設定に関する説明を見つけることができませんでしたが設定名から連想すると、最新の TLS 1.2 で接続しようとしてサーバー側が対応していなかった場合に TLS 1.1, 1.0, SSL 3.0 のどこまでフォールバックを許可するかということではないかと思われます。

この値が 1なので TLS 1.0 まではフォールバックが許可されているが、SSL 3.0 へのフォールバックは許可されていないようです。

本来であれば POODLE への対策として、HTTPS サーバー側 (今回の DD-WRT側) で SSL 3.0 を無効にし、TLS 1.0, 1.1, 1.2 のみに対応すべきなのですが、DD-WRT のバージョンが古いので対応できていません。

security.tls.version.min, security.tls.version.fallback-limit の値を 0 にすると DD-WRT Wi-Fi ルーターの https 管理画面に Firefox でアクセスすることができるようにはなりましたが、SSL 3.0 の脆弱性「POODLE」をついて攻撃者に https 通信を傍受されてしまう恐れがあるためお勧めしません。DD-WRT Wi-Fi ルーター側を TLS に対応させるのが良いです。


2014年6月18日水曜日

IPv6 を無効にする

インストール直後はデフォルトで IPv6 が有効になってますがほとんど IPv6 使わないですし、セキュリティホールになる (ような気がする) ので IPv6 を無効にします。

環境

Ubuntu 14.04 Server
インストール直後は以下のように IPv6 が有効になっています。(一部 XXXX でマスクかけてます)
$ ifconfig eth0
eth0      Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX
          inet addr:XXX.XXX.XXX.XXX  Bcast:XXX.XXX.XXX.XXX  Mask:255.255.255.240
          inet6 addr: fe80::XXXX:XXff:feXX:XXXX/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1318  Metric:1
          RX packets:1131 errors:0 dropped:0 overruns:0 frame:0
          TX packets:800 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:104832 (104.8 KB)  TX bytes:243692 (243.6 KB)

IPv6 が有効になっているので「 inet6 addr: fe80::XXXX:XXff:feXX:XXXX/64 Scope:Link 」の行があります。

IPv6 を無効にするために以下の内容の /etc/sysctl.d/60-DisableIPv6.conf を設置
net.ipv6.conf.all.disable_ipv6 = 1

/etc/sysctl.d/README を読むと、ユーザーがこのディレクトリにファイルを設置する場合にファイル名の先頭に振る番号は 60 以降を使うと良いようです。

設定を反映させるためにサーバーを再起動

IPv6 が無効になりました。
$ ifconfig eth0
eth0      Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX
          inet addr:XXX.XXX.XXX.XXX  Bcast:XXX.XXX.XXX.XXX  Mask:255.255.255.240
          UP BROADCAST RUNNING MULTICAST  MTU:1318  Metric:1
          RX packets:174 errors:0 dropped:0 overruns:0 frame:0
          TX packets:96 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:17251 (17.2 KB)  TX bytes:14366 (14.3 KB)

IPv6 が無効になったので「 inet6 addr: fe80::XXXX:XXff:feXX:XXXX/64 Scope:Link 」の行がありません。


2014年5月10日土曜日

Ubuntu で Windows 8.1 の NTFS パーティションをマウント

Ubuntu と Windows をデュアルブートにしてまして、Windows はたまにしか使わないので、バックアップは Ubuntu で Windows のパーティションをマウントして rsync で実施しています。

しかし、Windows 8.1 の高速スタートアップが有効になてっていると Ubuntu で Windows の NTFS パーティションをうまくマウントできなかったので調べてみました。

環境

以下のデュアルブートです。

  • Ubuntu Ja 14.04 Desktop Amd64
  • Windows 8.1

マウントできない事象

まず、Unity のデスクトップで Windows 8.1 の NTFS パーティションのアイコンが表示されてます。

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNxkHcdofTccyCQeiV_jOSVdMZnOCLr1oq3gHVAn9A6DPOqPRPMnGYOZ3OxsJVAaFhMGON00ebkZ0XJW1kJmD3gXoi7elXuao5U8KAl1p-SG0IYgonwXi8k71YDBe6ZDkUFbAb4xj7/s320/VolumeIcon.png

通常であれば、このアイコンをクリックするとパーティションがマウントされフォルダとして開かれるはずですが、なにも起こらずうまくいきません。

手動でマウントしてみると以下のようなエラーメッセージが出ました。
$ sudo mount /dev/sda5 /some/where/mount/point
Windows is hibernated, refused to mount.
Failed to mount '/dev/sda5': 許可されていない操作です
The NTFS partition is in an unsafe state. Please resume and shutdown
Windows fully (no hibernation or fast restarting), or mount the volume
read-only with the 'ro' mount option.

Windows がハイバネートされ、スリープ状態になっているために Ubuntu ではうまくマウントできないようです。

エラーメッセージのとおり、解決策としては以下の2つがあるようです。

  • Windows を (ハイバネートや高速スタートアップをしないで) 完全にシャットダウンする
  • または、リードオンリーでマウント

今回は rsync でバックアップするだけなので、リードオンリーでマウントします。

fstab を編集

リードオンリーでマウントするために fstab にレコードを追加します。

まず、今回の NTFS パーティションは /dev/sda5 です。このパーティションの UUID を確認します。

$ sudo blkid | grep sda5
/dev/sda5: UUID="0123456789ABCDEF" TYPE="ntfs"

マウントポイント作成

$ sudo mkdir -p /some/where/mount/point

確認した UUID で /etc/fstab に以下の一行を追加

UUID=0123456789ABCDEF    /some/where/mount/point    ntfs    ro    0    0

OS を再起動すると /some/where/mount/point に NTFS パーティーションがリードオンリーでマウントされてます。

おまけ

今回はリードオンリーでマウントしましたが、別の解決策の「Windows を (ハイバネートや高速スタートアップをしないで) 完全にシャットダウンする」であれば NTFS パーティションで読み書きできるようになるようです。

試していませんが、以下の URL が参考になりそうです。
http://itsfoss.com/solve-ntfs-mount-problem-ubuntu-windows-8-dual-boot/

2014年5月6日火曜日

RTC (ハードウェアクロック) とか、システムクロックとか

RTC とかシステムクロックについて調べたことをまとめときます。

環境

Ubuntu Ja 14.04 Desktop Amd64

Ubuntu が RTC をどのように扱うか

RTC に設定された時刻を UTC、ローカルタイムのどちらとして扱うかは /etc/default/rcS の UTC の値で決まります。

$ cat /etc/default/rcS
... snip ...

# assume that the BIOS clock is set to UTC time (recommended)
UTC=no

... snip ...

UTC=no なので、RTC に設定された時刻はローカルタイムとして扱われます。今回は Windows とのデュアルブート環境なので RTC にはローカルタイムを設定してます。

UTC=yes だと RTC に設定された時刻は UTC として扱われます。

/proc/driver/rtc で RTC に設定された時刻を確認

RTC に設定されている時刻がそのまま表示されます。

$ cat /proc/driver/rtc
rtc_time        : 19:42:29
rtc_date        : 2014-05-05
... snip ...

RTC に設定された時刻は 2014/05/05 19:42:29 でした。

hwclock で RTC に設定された時刻を確認

man ページに書かれているとおり、hwclock では時刻は必ずローカルタイムに変換されて表示されます。

$ man hwclock
... snip ...
       -r, --show
              Read  the  Hardware Clock and print the time on standard output.
              The time shown is always in local time, even if  you  keep  your
              Hardware  Clock  in  Coordinated  Universal Time.  See the --utc
              option.  Showing the Hardware Clock time is the default when  no
              function is specified.
... snip ...

-- localtime オプションで RTC に設定された時刻をローカルタイムとして扱い、 --utc オプションで RTC に設定された時刻を UTC として扱います。

つまり、以下に例示したとおり、 RTC に設定された時刻がローカルタイムの場合は -- localtime を付けて hwclock を実行し、UTC の場合は --utc を付けて hwclock を実行しないとうまく時刻を確認できません。

RTC がローカルタイムで設定されている場合は -- localtime を付けると RTC に設定された時刻をそのままローカルタイムとして正しく表示します。

$ cat /proc/driver/rtc | head -n 2
rtc_time        : 22:48:32
rtc_date        : 2014-05-05

$ grep ^UTC /etc/default/rcS
UTC=no

$ date
2014年  5月  5日 月曜日 22:48:34 JST

$ sudo hwclock --localtime
2014年05月05日 22時48分37秒  -0.234889 秒

RTC がローカルタイムで設定されているのに --utc を付けると UTC として解釈してしまい、それをローカルタイムに変換した時刻が表示されます。

$ cat /proc/driver/rtc | head -n 2
rtc_time        : 22:48:39
rtc_date        : 2014-05-05

$ grep ^UTC /etc/default/rcS
UTC=no

$ date
2014年  5月  5日 月曜日 22:48:40 JST

$ sudo hwclock --utc
2014年05月06日 07時48分44秒  -0.989131 秒

結果として、hwclock では現在時刻より 9時間進んだ時刻がローカルタイムとして表示されます。

RTC が UTC で設定されている場合は --utc を付けると RTC に設定された時刻を UTC として正しく解釈し、ローカルタイムに変換された時刻を正しく表示します。

$ cat /proc/driver/rtc | head -n 2
rtc_time        : 13:50:08
rtc_date        : 2014-05-05

$ grep ^UTC /etc/default/rcS
UTC=yes

$ date
2014年  5月  5日 月曜日 22:50:09 JST

$ sudo hwclock --utc
2014年05月05日 22時50分13秒  -0.969169 秒

RTC が UTC で設定されているのに -- localtime を付けるとローカルタイムとして解釈してしまい、そのまま表示されます。

$ cat /proc/driver/rtc | head -n 2
rtc_time        : 13:50:15
rtc_date        : 2014-05-05

$ grep ^UTC /etc/default/rcS
UTC=yes

$ date
2014年  5月  5日 月曜日 22:50:16 JST

$ sudo hwclock --utc
2014年05月05日 13時50分20秒  -0.984840 秒

結果として、hwclock では現在時刻より 9時間前の時刻 (つまり UTC) がローカルタイムとして表示されます。

おまけ

hwclock に -- localtime も --utc も付けない場合は、/etc/adjtime の状態により RTC の解釈が異なります。

/etc/adjtime が存在し、このファイルの中身の最後の行が LOCAL になっている場合は RTC はローカルタイムとして解釈されます。( -- localtime を付けた場合と同じ結果になります。)

/etc/adjtime が存在し、このファイルの中身の最後の行が UTC になっている場合は RTC は UTC として解釈されます。( --utc をつけた場合と同じ結果になります。)

/etc/adjtime が存在しない場合も RTC は UTC として解釈されます。


2013年1月20日日曜日

「~/デスクトップ」とかのディレクトリ名を英語に

Ubuntu をインストールすると「~/デスクトップ」とかディレクトリ名が日本語です。

ちょっと使いづらいので英語にしたいと思い、ググってみました。
http://ubulog.blogspot.jp/2007/10/ubuntu.html

$ LANG=C xdg-user-dirs-gtk-update
として、設定画面で「Update Names」をクリックです。

2012年12月29日土曜日

ログイン時の PATH

ログイン時の PATH は
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
となっています。
https://help.ubuntu.com/community/EnvironmentVariables を読むと
$ cat /etc/environment 
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
で設定されているようです。
PATH をはじめとする System-wide な環境変数はこのファイルで設定するのが作法のようです。
今まではこのファイルの存在を知らなかったので /etc/profile で設定してたのですが、お勧めじゃないんですね。
「ベテラン UNIX システム管理者からは環境変数は /etc/profile って言われるかもしれないけど、Ubuntu はそうじゃない」みたいなこと書いてますね。

でも、ユーザー毎の環境変数も ~/.profile とかではなく、
$ cat ~/.pam_environment 
PATH DEFAULT=${PATH}:~/MyPrograms
というようにしてねって書いてますが、このとおりにすると
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:~/MyPrograms:~/MyPrograms
~/MyPrograms が二重に設定されてしまい、動作的には問題なさそうですがすっきりしません。
Ubuntu 10.04.4、Ubuntu 12.10 で確認しましたが、どちらも二重に設定されました。 当面は今までどおり
$ cat ~/.profile | tail -n 1
PATH=$PATH:~/MyPrograms

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/user/MyPrograms
とします。ちなみに、
~/.pam_environment だと ~ がそのまま PATH に出てきて
~/.profile だと ~ が絶対パスに展開されますね。

2012年10月27日土曜日

日時のフォーマット

私がよく使う日時のフォーマットです。

Python
>>> import time
>>> time.strftime("%Y-%m%d-%H%M%S",time.localtime(time.time()))
'2012-1027-233340'

Date コマンド
$ date +%Y-%m%d-%H%M%S
2012-1027-233854

2012年9月16日日曜日

ユーザー用の bin/ を作って $PATH に登録しようとしたら...

Ubuntu 10.04 Server ですが、ユーザー用の ~/bin/ ディレクトリを作って、$PATH に登録しようと思い ~/.profile を開いてみたら
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi
ってすでに書いてありました。
~/bin/ ディレクトリ作るだけで次回ログイン時から $PATH に登録されます。

ログインし直さずに $PATH に反映させるなら
$ source ~/.profile
かな。