CentOS6ベースでカスタムLiveCDを作る


CentOS6ベースでカスタムLiveCDを作ろうとして、何点か悩んだ。
(「CentOS6でカスタムインストールDVD作成」という記事もあります)

BIOSブートで悩んだ点
・ブートオプションに「quiet rhgb」がついていると画面がちゃんと表示されない
  → isolinux/isolinux.cfg を編集して対処

EFIブートで悩んだ点
・grubより先に進まない
001
上記の画面のまま進まない。

ブート選択を表示させてから、「b」でブートしようとすると、黒画面になるが、キーを何か入力するとgrubに戻る状態

→ LiveCDのisoファイルのEFI/BOOT/grub.confを見るとgrub.conf内の指定が「EFI/boot/~」
 大文字小文字の違いにより必要なファイルがとってこれていない模様

そんな訳で、最終的に作成できたKickStart用ファイルは以下となります。

lang en_US.UTF-8
#keyboard us
keyboard jp106
#timezone US/Eastern
timezone --utc Asia/Tokyo
auth --useshadow --enablemd5
selinux --enforcing
firewall --disabled
rootpw --plaintext password

#repo --name=base   --baseurl=ftp://ftp.redhat.com/pub/redhat/rhel/beta/6Server-beta2/$basearch/os/
#repo --name=base   --baseurl=http://mirror.centos.org/centos/6/os/$basearch
repo --name=base   --baseurl=http://ftp.riken.jp/Linux/centos/6/os/$basearch
repo --name=update --baseurl=http://ftp.riken.jp/Linux/centos/6/updates/$basearch
repo --name=epel   --baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch

%packages
@core
anaconda-runtime
bash
kernel
syslinux
passwd
policycoreutils
chkconfig
authconfig
rootfiles

%end

%post --nochroot

cat > /root/postnochroot-install << EOF_postnochroot
sed -i "s/ quiet / /"             \$LIVE_ROOT/isolinux/isolinux.cfg
sed -i "s/ rhgb / /"              \$LIVE_ROOT/isolinux/isolinux.cfg
#
sed -i "s/ quiet / /"             \$LIVE_ROOT/EFI/BOOT/isolinux.cfg
sed -i "s/ rhgb / /"              \$LIVE_ROOT/EFI/BOOT/isolinux.cfg
sed -i "s/\/EFI\/boot\//\/EFI\/BOOT\//"    \$LIVE_ROOT/EFI/BOOT/isolinux.cfg
sed -i "s/ quiet / /"             \$LIVE_ROOT/EFI/BOOT/grub.conf
sed -i "s/ rhgb / /"              \$LIVE_ROOT/EFI/BOOT/grub.conf
sed -i "s/\/EFI\/boot\//\/EFI\/BOOT\//"    \$LIVE_ROOT/EFI/BOOT/grub.conf
sed -i "s/ quiet / /"             \$LIVE_ROOT/EFI/BOOT/BOOTX64.conf
sed -i "s/ rhgb / /"              \$LIVE_ROOT/EFI/BOOT/BOOTX64.conf
sed -i "s/\/EFI\/boot\//\/EFI\/BOOT\//"    \$LIVE_ROOT/EFI/BOOT/BOOTX64.conf

EOF_postnochroot

/bin/bash -x /root/postnochroot-install 2>&1 | tee /root/postnochroot-install.log

%end

このファイルの原型は「https://projects.centos.org/trac/livecd/browser/trunk/CentOS6」にあるrhel6beta-livecd-minimal.ksです。
「post –nochroot」のところはrhel6beta-livecd-desktop.ksを参考にしています。

主な変更点
・レポジトリ指定をCentOS+EPEL
・rootパスワードは「password」とする
・タイムゾーンとキーボードを日本向け
・langは、コンソールで使うため英語のまま

isoイメージ作成の手法については「Creating a LiveCD image」にあるとおり。

# LANG=C livecd-creator --config=livecd.ks --fslabel=CentOS-minimal

で実行しています。

USB電力計 サンワサプライ TAP-TST10をLinuxで使ってみた


サンワサプライから発売された「ワットモニターUSB TAP-TST10」というUSB接続タイプの電力計をLinuxで使ってみた。

埜中公博さんの「SANWA SUPPLY TAP-TST10 control tool」を使ってデータ取得しました。
githubにある「taptst10ctl.py」をCentOS6で動作させてみました。
(2013/11/19: 公開場所が変わりました「https://github.com/nonakap/taptst10ctl」。USBのデバイスへのアクセス手法の違いで「taptst10ctl.py」と「taptst10ctl0.py」があります)

# python taptst10ctl.py
Traceback (most recent call last):
  File "taptst10ctl.py", line 42, in <module>
    import usb.core
ImportError: No module named usb.core
#

あー・・・pyusbが入ってないからか・・・
pyusb-1.0.0a2.zipをダウンロードしてきて「python setup.py install」

# python taptst10ctl.py
Traceback (most recent call last):
  File "taptst10ctl.py", line 60, in <module>
    dev.set_configuration()
  File "/usr/lib/python2.6/site-packages/usb/core.py", line 547, in set_configuration
    self._ctx.managed_set_configuration(self, configuration)
  File "/usr/lib/python2.6/site-packages/usb/core.py", line 92, in managed_set_configuration
    self.backend.set_configuration(self.handle, cfg.bConfigurationValue)
  File "/usr/lib/python2.6/site-packages/usb/backend/libusb10.py", line 503, in set_configuration
    _check(_lib.libusb_set_configuration(dev_handle, config_value))
  File "/usr/lib/python2.6/site-packages/usb/backend/libusb10.py", line 403, in _check
    raise USBError(_str_error[ret], ret, _libusb_errno[ret])
usb.core.USBError: [Errno 16] Resource busy
#

「Resource busy」と何か別のプログラムが使っているらしい。

USBRH driver for Linux を CentOS 5 で使う」で紹介されている手法、手動でusbhidの認識を解除してみる方法を行ってみた。

# cd /sys/bus/usb/drivers/usbhid
#  ls -l
lrwxrwxrwx 1 root root    0  7月 17 09:38 2013 4-2:1.0 -> ../../../../devices/pci0000:00/0000:00:12.1/usb4/4-2/4-2:1.0
--w------- 1 root root 4096  7月 17 09:25 2013 bind
lrwxrwxrwx 1 root root    0  7月 17 09:25 2013 module -> ../../../../module/usbhid
--w------- 1 root root 4096  7月 17 09:25 2013 new_id
--w------- 1 root root 4096  7月 17 09:25 2013 remove_id
--w------- 1 root root 4096  7月 17 09:25 2013 uevent
--w------- 1 root root 4096  7月 17 09:25 2013 unbind
# echo "4-2:1.0" > unbind
# ls
bind  module  new_id  remove_id  uevent  unbind
#

これでusbhidを解除できたので、改めて実行。

# .taptst10ctl.py
No.,DateTime,Watt,kWh
1,2013/07/13 07:50,0.0,0.00
2,2013/07/13 08:00,47.0,0.00
3,2013/07/13 08:10,44.8,0.01
4,2013/07/13 08:20,18.5,0.01
5,2013/07/13 08:30,18.5,0.01
6,2013/07/13 08:40,18.1,0.02
<略>
637,2013/07/17 18:00,87.4,2.76
638,2013/07/17 18:10,83.8,2.78
639,2013/07/17 18:20,83.3,2.79
640,2013/07/17 18:30,82.8,2.80
641,2013/07/17 18:40,80.9,2.82
#

ちなみに、時々、以下のような感じで実行に失敗します。
その場合は、再実行すれば、だいたい大丈夫です。

# ./taptst10ctl.py
Traceback (most recent call last):
  File "./taptst10ctl.py", line 92, in <module>
    data = dev.read(ENDPOINT, 17, intf, 1000)
  File "/usr/lib/python2.6/site-packages/usb/core.py", line 654, in read
    self.__get_timeout(timeout)
  File "/usr/lib/python2.6/site-packages/usb/backend/libusb10.py", line 559, in intr_read
    timeout)
  File "/usr/lib/python2.6/site-packages/usb/backend/libusb10.py", line 641, in __read
    timeout))
  File "/usr/lib/python2.6/site-packages/usb/backend/libusb10.py", line 403, in _check
    raise USBError(_str_error[ret], ret, _libusb_errno[ret])
usb.core.USBError: [Errno 110] Operation timed out
#

USB電力計 サンワサプライ TAP-TST10をLinuxにつなげてみた


サンワサプライから発売された「ワットモニターUSB TAP-TST10」というUSB接続タイプの電力計っぽいのをAmazonで購入した。

ちょうどタイミングが良かったらしく、送料込みで 6082円でした。
(Amazonマーケットプレイス:NANOS-S。青森県弘前発送。発注から発送まで2日弱、到着まで+1日)

Windows8につなげたら、標準のHIDドライバだけで認識。
専用アプリを使うと、測定済みのデータが収集できる、という感じのものだった。
リアルタイム計測の表示は、専用アプリ内には見当たらなかった。

さて・・・Linuxにつなげてみますか!!

# dmesg | tail -4
usb 2-2: new full speed USB device using uhci_hcd and address 2
usb 2-2: configuration #1 chosen from 1 choice
drivers/usb/input/hid-core.c: timeout initializing reports
hiddev96,hidraw96: USB HID v1.10 Device [Weltrent Semiconductor, Inc. HID Device] on usb-0000:00:1d.0-2
# lsusb | grep Weltrend
Bus 002 Device 002: ID 040b:2201 Weltrend Semiconductor
#

なぜか「Weltrend Semiconductor」と「Weltrent Semiconductor」の2種類の表記がある。
さらに詳細をlsusb -vで見てみると下記の通りだが、検索してみたところ「Weltrend Semiconductor」が正当のようだ。

# lsusb -v -s 002:002

Bus 002 Device 002: ID 040b:2201 Weltrend Semiconductor
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0        64
  idVendor           0x040b Weltrend Semiconductor
  idProduct          0x2201
  bcdDevice            0.02
  iManufacturer           1 Weltrent Semiconductor, Inc.
  iProduct                2 HID Device
  iSerial                 0
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           50
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0
    bmAttributes         0xa0
      Remote Wakeup
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      0 No Subclass
      bInterfaceProtocol      0 None
      iInterface              0
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.10
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      71
         Report Descriptors:
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               1
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               1
        UNRECOGNIZED:  09 21 00 01 00 01 22 47 00
#

単純にUSBで接続するにあたり、「USB HID Controller WT65xxシリーズ」を使っているだけのようで、このベンダは電力計とは直接つながりはなさそうな感じである。

# cat /proc/bus/usb/devices
<略>
T:  Bus=02 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#=  2 Spd=12  MxCh= 0
D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=040b ProdID=2201 Rev= 0.02
S:  Manufacturer=Weltrent Semiconductor, Inc.
S:  Product=HID Device
C:* #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA
I:  If#= 0 Alt= 0 #EPs= 2 Cls=03(HID  ) Sub=00 Prot=00 Driver=usbhid
E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=1ms
E:  Ad=01(O) Atr=03(Int.) MxPS=  64 Ivl=1ms
<略>
#

ざっと検索してみたところ、「ID 040b:2201」というデバイスの例は見当たらないようだ。
(ID 040b:2011とかはある)

USBプロトコル解析とかになると、機材無いからできないねん・・・

Amazon S3をLinuxファイルシステムにする


Windowsでのオフラインファイル、Linuxでのstub fileについて調査していたら、Amazon S3を使ったストレージの話を見つけた。
本題には関係なかったんだけど、興味深かったのでメモ書き。

s3fs
Linux FUSEを使ったファイルシステム。
1ファイルの最大サイズは64GBまで。
ローカルディスクにキャッシュフォルダを指定できる(use_cache)
Amazon Reduced Redundancy Storage に対応

S3QL
Amazon S3以外にも、Google StorageやOpenStackに対応しているファイルシステム。
Linux, FreeBSD, MacOS Xに対応している。
1ファイルの最大サイズは2TBまで。
内部でPython APSWを利用しているため、別途インストールが必要。

ローカルディスクにキャッシュフォルダを指定できる(–cachedir)
Amazon Reduced Redundancy Storage は非対応

S3QL User’s Guideを見る限り、必要な情報はちゃんと揃っている感じ

Opendedupという重複排除機能搭載のLinux/Windows向けファイルシステム


2024/04/23追記

2024年4月現在、Opendedupのサイト自体は存続している。

githubでの開発状況を見ると2022年8月の修正が最後で、またまとめた形でのリリースは2016年8月のver 3.2.1が最後となっているようだが、メインサイトの”Changes“には「ver 3.5.7」、”Download“では「The most current version is 3.10.8.0」という記述があるので、開発は続いている模様。

とはいえ、サイト上の対応OS記述がUbuntu 14.04やWindows Server 2012だったりするあたりでちょっと怪しい・・・


Opendedupという重複排除機能搭載のファイルシステムを発見した。

ファイルシステム層はCで作られているが、そこより下層の重複排除処理やデータ書き込み処理部分についてはJavaで作られているとのこと。

重複排除以外にも、レプリケーション機能もあるようだ。
(SDFS Volume Replication)

Cloud Based Deduplication Quick Start Guideを見ると、Amazon S3や、Windows Azureのストレージを、Opendedupeで直接利用できるようだ。

Linux環境では、FUSEを使ってマウントする。

Windows環境では、Dokan(以前は http://dokan-dev.net/ だったが2021年時点では消滅)というWindows版FUSEみたいなのを使うが、Opendedup配布パッケージに組み込み済みなので別途インストールする必要はない。
なお、Dokanは「土管」が語源のようです。(Dokanライブラリの説明 http://dokan-dev.net/about/ )

OpenDedup Deduplication NAS ApplianceというOVFテンプレートの仮想マシンも用意されている。

こっちにはSDFS Manager というWeb GUIプログラムが同梱されているようなのだが、スクリーンショットを見る限りでは、かなりちゃんとしている雰囲気が・・・