毎日こつこつ

Gentoo/Linuxユーザによる電子工作やマシン構築などの備忘録です.

Gentoo/LinuxのApache2が起動できない問題

GentooでApache2を起動しようとした際, 2箇所ハマったので対処法をまとめておきます.

1. 80番ポートに関する問題
以下のエラーメッセージが出た時の対処方法.

# /etc/init.d/apache2 start
 * Starting apache2 ...
(98)Address already in use: make_sock: could not bind to address [::]:80

80番ポートが既に使われているというメッセージです.
このメッセージは, Apache2を再起動した際によく見られるみたいです.
その場合は, 以下のコマンドでポートを専有しているApache2プロセスを終了して対処します.

# emerge lsof
# lsof -i | grep http
httpd   1638  root    3u  IPv4   9004      0t0  TCP *:http (LISTEN)
httpd   1638  root    4u  IPv4   9013      0t0  TCP *:https (LISTEN)
# kill -9 1638
# lsof -i | grep http
# /etc/init.d/apache2 start

しかし, 今回は"lsof -i | grep http"した時に, 何も出なかった場合の対処法です.
つまり, 専有しているプロセスがないにもかかわらず, 80番ポートが既に使われている状況です.
もしかしてと思い, バーチャルホストのポート設定を見てみました.
バーチャルホストとは, 単独サーバで複数ドメインのWebページを公開する機能です.
こちらのバーチャルホストの80番ポートの指定をコメントアウトしたら直りました.
これが本当に正しいのかはわからないので, 詳しい方がいたら是非教えて下さい.
以下その手順です.

# nano /etc/apache2/vhosts.d/00_default_vhost.conf
Listen 80 ← この行の文頭に#をつけてコメントアウトする.

2. start-stop-daemonになる問題
以下のエラーメッセージが出た時の対処法.

# /etc/init.d/apache2 start
 * Starting apache2 ...
 * start-stop-daemon: failed to start `/usr/sbin/apache2'
 * apache2: caught SIGINT, aborting

/usr/sbin/apache2の起動に失敗したというメッセージです.
このメッセージは, /etc/hostsにドメインやホストネームが書かれていないために起きます.
そこで, 以下のように/etc/hostsを書き換えます.

# nano /etc/hosts
127.0.0.1       localhost
     ↓
127.0.0.1       localhost.localdomain localhost hostname
ここで, hostnameとは/etc/conf.d/hostnameで設定した名前です.
# /etc/init.d/apache2 start
 * Starting apache2 ...   

参考文献
ApacheがRestartできない!(98)Address already in use: make_sock… | Weblogy
In the name of SUDO • Apache in Gentoo

Gentooのインストール方法

Webサーバが欲しくなったので, 余っているマシンにGentooをインストールします.
カーネルはマニュアルコンフィグレーションで, その手順を備忘録として残します.
設定については吟味していません.
使用するコマンドの意味までは言及しないので, 調べ理解した上で先に進んで欲しいです.
なお, 以下の手順でインストールした際のいかなる損害やトラブルの責任は一切負いかねるので, パソコンから火が出て爆発したり, 宇宙線の影響でデータが破損しても知りません.

1. Gentooインストールの準備
まず, GentooミラーサイトからMinimalCDイメージをダウンロードします.
releases/各自のアーキテクチャ/autobuilds/current-isoに最新版のisoが置いてあります.
以下, amd64を選択したものとしてインストールを行います.
CDに書き込み出来たらさっそくインストールCDをブートします.

boot: gentoo

と入力してしばらく待つと, キーボード選択画面になるので好きな番号を押します.
日本語のキーボードが良い人は22と入力します.

livecd ~ #

とrootでログインが出来たはずです.
ネットワークが設定されていない場合, 以下のツールで簡単に設定出来ます.

# net-setup enp2s0

次に, カーネル構築を簡単にするために以下のコマンドを実行し, 赤字部分をメモしておきます.

# lspci -k |grep driver
Kernel driver in use: pcieport
Kernel driver in use: uhci_hcd
Kernel driver in use: echci-pci
Kernel driver in use: snd_hda_intel
Kernel driver in use: e1000e
Kernel driver in use: ahci
Kernel driver in use: pata_jmicron

# lspci -k |grep modules
Kernel modules: uhci_hcd
Kernel modules: ata_piix, pata_acpi, ata_generic
Kernel modules: snd_hda_intel
Kernel modules: e1000e
Kernel modules: ahci
Kernel modules: pata_jmicron, pata_acpi, ata_generic

2. パーティションの作成
パーティションの作成にはfdiskを使います.

# fdisk /dev/sda

用途や環境に応じて分割の基準は変わるので, 今回行った構成を例として載せておきます.

Disk /dev/sda: 1000.2 GB, 1000204886016 bytes, 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x99089908

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    20973567    10485760   83  Linux
/dev/sda2        20973568    54527999    16777216   82  Linux swap / Solaris
/dev/sda3        54528000   222300159    83886080   83  Linux
/dev/sda4       222300160  1953525167   865612504    5  Extended
/dev/sda5       222302208   327159807    52428800   83  Linux
/dev/sda6       327161856  1953525167   813181656   83  Linux

3. ファイルシステムの作成
パーティションに, 今回はext4ファイルシステムを適用します.
(btrfsではないです)

# mkfs.ext4 /dev/sda1    (bootパーティションへの適用)
# mkswap /dev/sda2       (swapパーティションの初期化)
# swapon /dev/sda2       (swapパーティションの有効化)
# mkfs.ext4 /dev/sda3    (rootパーティションへの適用)
# mkfs.ext4 /dev/sda5    (homeパーティションへの適用)
# mkfs.ext4 /dev/sda6    ( varパーティションへの適用)

4. パーティションのマウント

# mount /dev/sda3 /mnt/gentoo      (rootパーティションのマウント)
# mkdir /mnt/gentoo/boot           (boot用のディレクトリ作成)
# mount /dev/sda1 /mnt/gentoo/boot (bootパーティションのマウント)

5. 日時の確認

# date
もしズレていたら, 以下のように設定.
# date MMDDhhmmYYYY     M(月), D(日), h(時), m(分), Y(年)

6. 各種ダウンロードとインストール
インストール先のマウントポイントへ移動し, stageとportageのダウンロード.

# cd /mnt/gentoo
# links http://www.gentoo.org/main/en/mirrors.xml
releases/amd64/autobuilds/current-stage3-amd64/stage3-amd64-.tar.bz2
snapshots/portage-latest.tar.bz2

stageとportageのインストール.

# tar xvjpf stage3-*.tar.bz2
# tar xvjf /mnt/gentoo/portage-latest.tar.bz2 -C /mnt/gentoo/usr

7. chrootで新しい環境へ入る
chrootの準備として, 各種設定を行います.
ミラーサイトとSYNC変数の設定.

# mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf
# mirrorselect -i -r -o >> /mnt/gentoo/etc/portage/make.conf

DNS情報のコピー.

# cp -L /etc/resolv.conf /mnt/gentoo/etc/

/proc, /devファイルシステムのマウント.

# mount -t proc none /mnt/gentoo/proc
# mount --rbind /dev /mnt/gentoo/dev

新しい環境へのchroot.

# chroot /mnt/gentoo /bin/bash
# env-update
# source /etc/profile
# export PS1="(chroot) $PS1"

8. portageシステムの設定
chrootで新しい環境へ入ったので, portageツリーを更新します.

# emerge --sync --quiet

自分にあったprofileの選択をします.

# eselect profile list
# eselect profile set 設定したい番号

9. コンパイルオプションとUSEフラグの設定
コンパイルオプションの設定をします.

# gcc -v -xc -march=native /dev/null 2>&1|grep cc1 >> /etc/portage/make.conf
# nano -w /etc/portage/make.conf

make.confに次のような行が追記されます.

/usr/libexec/gcc/x86_64-pc-linux-gnu/4.7.3/cc1 -quiet -v /dev/null -march=core2...

-marchから-quietまでをCFLAGSの-pipe以下に貼り付けます.
USEフラグは, make.confのUSEよりあとに記述します.
用途や環境に応じて変わるので, 必要だと思うものを設定してください.

10. glibcロケール設定
必要なロケールを指定します. 今回は私の例を載せておきます.

# nano -w /etc/locale.gen
en_US ISO-8859-1
en_US.UTF-8 UTF-8
ja_JP.EUC-JP EUC-JP
ja_JP.UTF-8 UTF-8
ja_JP EUC-JP
# locale-gen

11. カーネルのマニュアルコンフィグレーション
いよいよお待ちかねのカーネルのマニュアルコンフィグレーションです.
ソースをインストールします.

# emerge gentoo-sources

シンボリックリンクの確認をします.

# ls -l /usr/src/linux
lrwxrwxrwx 1 root root 20 Feb 25 00:00 /usr/src/linux -> linux-3.10.25-gentoo

カーネルのマニュアル設定を行います.

# cd /usr/src/linux
# make menuconfig

まず, "/"キーを押してSearch Configuration Parameterを開きます.
ここで, 1章にてメモしたドライバとモジュールを検索し設定します.
残りは, 環境によって違うので簡単な流れだけ載せておきます.
・Processor familyをマシン構成に併せて設定.
・要らないドライバやモジュールを削る.
nVidiaカードを使っている人はnouveauにチェックを入れ以下を行う.

/etc/portage/make.confにVIDEO_CARDS="nouveau"と追記.
emerge -1 xorg-driversを行う.

構成が完璧に出来たと思ったら, コンパイルとインストールをします.
実際には出来ていない事が多いですが, とりあえず先に進みます.
(ext4やdevtmpfsは最近だとチェック済みなので死ぬことは少ないと思います)

# make && make modules_install && make install

12. Gentooのシステム設定
fstabを作成しファイル情報を記入します.
以下は私の設定例です.

# nano -w /etc/fstab
/dev/sda1               /boot           ext4            noauto,noatime  0 2
/dev/sda2               none            swap            sw              0 0
/dev/sda3               /               ext4            noatime         0 1
/dev/sda4               none            ext4            noatime         0 2
/dev/sda5               /home           ext4            noatime         0 2
/dev/sda6               /var            ext4            noatime         0 2
/dev/cdrom              /mnt/cdrom      auto            noauto,ro       0 0

ホストネームの設定

# nano -w /etc/conf.d/hostname
hostname="お好みで"

ネットワークの恒久設定(DHCPの場合)

# nano -w /etc/conf.d/net
config_enp2s0="dhcp"
# cd /etc/init.d
# ln -s net.lo net.enp2s0
# rc-update add net.enp2s0 default
# emerge dhcpcd

13. ブートローダの設定
今回はgrub2を使った設定例を載せておきます.

# mount /boot
# emerge grub
# grub2-install /dev/sda
# nano -w /boot/grub/grub.cfg
default 0
timeout 2

menuentry 'Gentoo Linux 3.10.25' {
     root=hd0,1
     linux /boot/vmlinuz-3.10.25-gentoo root=/dev/sda3
}

menuentry 'Gentoo Linux 3.10.25 (rescue)' {
     root=hd0,1
     linux /boot/vmlinuz-3.10.25-gentoo root=/dev/sda3 init=/bin/bb
}
# grub2-mkconfig -o /boot/grub/grub.cfg

この後, /etc/default/grubに色々できるので次からそちらを変更してください.
エラーがなければrootのパスワードを設定した後, rebootしてください.
もし, カーネルパニックが起きた場合, 再度マウントしてchrootし調整してください.
無事にGentoo/Linuxが起動できれば成功です.
この後は, LM(SLiM)やWM(Awesome)を入れGUI環境を整えたり, 細かい設定を行い自分好みのマシンに仕上げていきましょう.

参考文献
Gentoo Linux -- Gentoo Linux News
nouveau - Gentoo Wiki
GRUB2 Quick Start - Gentoo Wiki

GentooでECM-PCV80Uマイクをクリアな音質で使う方法

Gentooと書いていますが, 他のLinuxディストリでも簡単に利用できると思います.
今回, GentooSkypeを使い通話をするために以下のマイク(ECM-PCV80U)を購入しました.

簡単に設定できて, ノイズはなく値段も安くてとても満足しているので紹介.
(レビューでノイズがあるという方は, おそらくUSB接続ではないか設定の問題だと思います)

1. ECM-PCV80Uの導入
まず, SkypeとPulseAudioの初期設定だが, これはGentoo Wiki等を参考してもらいたいです.
次に, 付属のUSBオーディオボックス(UAB-80)経由にて先程のマイクを接続します.
USBケーブルを抜き差しし, 認識しているかチェックします.

# dmesg |grep Sony
# ここに, Sony Corporation UAB-80が含まれた表示があればよいです.

PulseAudioにて, プロファイルとしてUAB-80が読み込まれているか確認します.
ここでは, 簡単に出来るように音量調節ツールのpavucontrolを使います.

# emerge pavucontrol

pavucontrolを起動し, 設定画面を押し以下のようにUAB-80があるか確認します.
f:id:dskmrt0325:20140202230904p:plain

もし, UAB-80が見当たらない場合, USBオーディオに関するカーネルの設定ができていないと思われます. 落ち着いてみんな大好きカーネルコンフィグレーションを行いましょう.
カーネルの設定画面を開きます.

# mount /boot
# cd /usr/src/linux
# make menuconfig

以下をカーネルに組み込みます.

Device Drivers
 -> Sound card support
     -> Advanced Linux Sound Architecture
        -> USB sound devices
           -> <*> USB Audio/MIDI driver

設定をインストールします.

# make && make modules_install && make install
# umount /boot
# reboot

もう一度起動して, UAB-80が出たら成功です.

2. PulseAudioでの設定
ここの設定は, 好みもあると思うので私の設定画面を一例として載せます.
基本的に, UAB-80のミュートを外して音が出るようにすればよいです.
今回は, PC -> UAB-80 -> イヤフォン, PCV80Uマイクという接続を想定します.
再生について.
f:id:dskmrt0325:20140202232646p:plain
録音について.
f:id:dskmrt0325:20140202233346p:plain
出力装置について.
f:id:dskmrt0325:20140202232731p:plain
入力装置について.
f:id:dskmrt0325:20140202232351p:plain
設定について.
f:id:dskmrt0325:20140202225237j:plain
録音画面は, Skypeでの通話時に現れるので音声テスト等で設定します.

もし, ノイズがひどい場合はPulseAudioのスケジュール手法が問題の場合があります.
以下を試すと直るかもしれないです.
適当なエディタで, /etc/pulse/default.paと/etc/pulse/system.paを次のように編集.

load-module module-udev-detect
        ↓
load-module module-udev-detect tsched=0

書き換え終わったら, PulseAudioデーモンを再起動します.

参考文献
えぬえす工房 » SB X-Fi+PulseAudio+Skypeで雑音が入るのをどうにかする

libxml2[icu]によってブロックされるqtwebkitの解決

qtwebkitやそれを含んだqt-metaをemergeする際, 次のようなメッセージが出てブロックされてしまうことがあります.

# emerge qtwebkit
[ebuild   R    ] dev-libs/libxml2-2.9.1-r1 USE="python readline"
[ebuild  N     ] dev-qt/qtwebkit-4.8.5 USE="exceptions gstreamer jit"

!!! Multiple package instances within a single package slot have been pulled
!!! into the dependency graph, resulting in a slot conflict: 

dev-libs/libxml2:2
 
 (dev-libs/libxml2-2.9.1-r1::gentoo, ebuild scheduled for merge) pulled in by
  dev-libs/libxml2:2[!icu?] required by (dev-qt/qtwebkit-4.8.5::gentoo)

 (dev-libs/libxml2-2.91-r1::gentoo, installed) pulled in by
  dev-libs/libxml2:=[icu] required by (www-client/chromium-32.0.1700.77)
  dev-libs/libxml2:2/2=[icu] required by (www-client/chromium-32.0.1700.77)

icuに関する問題とわかるので,フラグの確認を行います.

$ euse -i icu
global use flags (searching: icu) 
[-      ] icu - Enable ICU (Internationalization Components for Unicode) support, using dev-libs/icu 

local use flags (searching: icu) 
no matching entries found 

上記の場合, /etc/portage/make.confのグローバルのUSEフラグにicuを追加すればよいです.


参考文献
Gentoo Forums :: View topic - libxml2[icu] is blocking qt-webkit [SOLVED]

Da Vinci 32U with Arduino BootloaderにGentooで書き込み

Gentooダ・ヴィンチ 32Uマイコンボードに書き込みを行う方法です.

1. Arduino IDEをインストールする下準備.

# emerge -avq icedtea crossdev layman

icedtea :
Arduino IDEは, Javaで書かれているので好きなJavaプラットフォームを入れます.
crossdev, layman :
ツールチェイン構成用.

インストールが終わったら, 以下のように設定を行います.

# echo "source /var/lib/layman/make.conf" >> /etc/portage/make.conf
# mkdir -pv /usr/local/portage

以下のようにツールチェインを作成します.

# USE="-openmp" crossdev -t avr -s4 -S --without-headers

ツールチェインの作成には,少し時間がかかるかもしれないので気長に待ちます.
もし, 以下のようなエラーメッセージが出た場合,

please convert /etc/portage/package.use to a directory

次のようにします.

# mv /etc/portage/package.use /etc/portage/use_backup
# rm /etc/portage/package.use
# mkdir /etc/portage/package.use

修正が終わったら,もう一度ツールチェインの作成コマンドを入力します.

2. カーネルの設定
みんな大好きカーネルコンフィグレーションを行います.
一応, ttyとuucpをユーザに追加します.

# gpasswd -a YOUR_USERNAME tty
# gpasswd -a YOUR_USERNAME uucp

カーネルの設定画面を開きます.

# cd /usr/src/linux
# make menuconfig

以下の2つをモジュールに設定します.

Device Drivers
  -> USB support
     -> USB Serial Converter support
        -> [M] USB FTDI Single Port Serial Driver

Device Drivers
  -> USB support
     -> [M] USB Modem (CDC ACM) support

設定をインストールします.

# make && make modules && make modules_install && modprobe ftdi_sio

ここまで終わったら, ダ・ヴィンチをPCに接続します.
dmesgで認識しているか確認できたら次に進みます.

3. Arduino IDEのインストール
Arduino IDEのインストールをします.

# emerge -avq arduino

起動するか確認してください.

4. Da Vinci 32Uのドライバ設定
初期状態では, Arduino IDEのメニュー -> ツール -> マイコンボードにDa Vinci 32Uはないと思うので設定ファイルを書き追加します.

# cd /usr/share/arduino/hardware/arduino

お好きなエディタでboards.txtを開き末尾に以下を追加します.

davinci.name=Da Vinci 32U
davinci.upload.protocol=avr109
davinci.upload.maximum_size=28672
davinci.upload.speed=57600
davinci.upload.disable_flushing=true
davinci.bootloader.low_fuses=0xff
davinci.bootloader.high_fuses=0xd8
davinci.bootloader.extended_fuses=0xcb
davinci.bootloader.path=caterina
davinci.bootloader.file=davinci.hex
davinci.bootloader.unlock_bits=0x3F
davinci.bootloader.lock_bits=0x2F
davinci.build.mcu=atmega32u4
davinci.build.f_cpu=16000000L
davinci.build.vid=0x1774
davinci.build.pid=0x8032
davinci.build.core=arduino
davinci.build.variant=leonardo

Arduino IDEを起動し, Da Vinci 32Uがあるのを確認し選択します.

5. Da Vinci 32Uへの書き込み
スケッチに以下のLEDをチカチカさせるプログラムを書き込み, 確認を行います.

int led = 13;

void setup() {
    pinMode(led, OUTPUT);
}

void loop() {
  digitalWrite(led, HIGH);
  delay(100);
  digitalWrite(led, LOW);
  delay(100);
}

もし, 以下のようなエラーメッセージが出た場合,

/usr/libexec/gcc/avr/ld: cannot open linker script file ldscripts/avr5.x: No such file or directory

次のコマンドを入力.

# ln -s /usr/lib/binutils/avr/YOUR_VERSION/ldscripts /usr/avr/lib/ldscripts

Da Vinci 32Uに書き込み, LEDが高速でチカチカしたら成功です.


参考文献
Arduino Playground - Gentoo
GentooでARM(CortexA8)クロスコンパイル環境の構築 » 旧・LGA128のメモ帳
Strawberry Linux ダ・ヴィンチ32U with Arduino Bootloader のメモ | 趣味関係のメモ帳