φ(.. )メモシテオコウ systemdのjournalによるログの確認方法

Fedora20からはsyslogがデフォルトでインストールされなくなって代わりにsystemdのjournalという機能が使われるのでメモ。
この辺りの変更についてFedoraではwikiページにプロポーサルがあります。日本語のニュースだとマイナビさんに
ちょっと使った感じではjournalのほうが使いやすい感じがします。

さて、syslogがなくなってどうか変わるかというと、一番大きいのは/var/log/messagesが無くなったということですね。

masami@saga:~$ ls /var/log
.   anaconda  boot.log  btmp-20131001  cluster  dnf.log      firewalld  glusterfs  journal  libvirt  ppp      README  speech-dispatcher  tallylog  Xorg.0.log      yum.log
..  audit     btmp      chrony         cups     dnf.rpm.log  gdm        grubby     lastlog  pluto    prelink  samba   sssd               wtmp      Xorg.0.log.old

それで今までのようにログを見たい場合はどうするかというとjournalctlというコマンドを使います。
引数無しでコマンドを使った場合は一番古いログから現在までのログが出るので今日の分だけ見るなら-bオプションを使うと良いです。

引数無しで実行した場合は一番古いログから出てきます。

masami@saga:~$ journalctl | head -n 2
-- Logs begin at Fri 2013-09-27 15:18:59 JST, end at Thu 2013-10-10 16:30:22 JST. --
Sep 27 15:18:59 localhost.localdomain systemd-journal[116]: Runtime journal is using 3.5M (max 1.5G, leaving 2.3G of free 15.6G, current limit 1.5G).

オプションの-bを使った場合は一番新しいbootのところからになります。

-- Logs begin at Fri 2013-09-27 15:18:59 JST, end at Thu 2013-10-10 16:31:12 JST. --
Oct 10 12:11:24 saga systemd-journal[141]: Runtime journal is using 3.5M (max 1.5G, leaving 2.3G of free 15.6G, current limit 1.5G).

この-bは整数を引数に取ることができて、例えば1回前のbootからのログを見たい場合は以下のようになります。

$ journalctl -b -1

引数に負数を渡した場合は最新から、正の整数の場合は一番古いログからという意味です。

オプションで-kを渡した場合はdmesgコマンドと同じです。

$ journalctl -k

dmesgと違う点は出力されるログの内容によっては文字列がボールドされてたり、赤字だったりと視覚的に見やすくなっています。
f:id:masami256:20131010164042p:plain

他に便利そうなオプションとしては--system、--userなんてのがあります。機能は名前から大体想像付くと思います。前者はカーネルとかのシステムが出すログですね。

逆順から見たい場合の-rも良いですね。

masami@saga:~$ journalctl -b -r | head -3
-- Logs begin at Fri 2013-09-27 15:18:59 JST, end at Thu 2013-10-10 16:44:31 JST. --
Oct 10 16:44:31 saga kernel: IPv6: MLD: clamping QRV from 1 to 2!
Oct 10 16:44:07 saga gnome-session[1371]: [2273:2279:1010/164407:ERROR:platform_thread_linux.cc(99)] Failed to set nice value of thread to -10

出力する期間を指定することもできます。--since、--untilで両方使っても良いし片方だけでもOKです。

masami@saga:~$ journalctl -b --since "2013-10-10 16:12:00" --until "2013-10-10 16:17:30"
-- Logs begin at Fri 2013-09-27 15:18:59 JST, end at Thu 2013-10-10 16:46:36 JST. --
Oct 10 16:12:01 saga dbus-daemon[512]: dbus[512]: [system] Activating service name='org.freedesktop.PackageKit' (using servicehelper)
Oct 10 16:12:01 saga dbus[512]: [system] Activating service name='org.freedesktop.PackageKit' (using servicehelper)
Oct 10 16:12:01 saga dbus-daemon[512]: dbus[512]: [system] Successfully activated service 'org.freedesktop.PackageKit'
Oct 10 16:12:01 saga dbus[512]: [system] Successfully activated service 'org.freedesktop.PackageKit'
Oct 10 16:13:16 saga kernel: IPv6: MLD: clamping QRV from 1 to 2!
Oct 10 16:15:21 saga kernel: IPv6: MLD: clamping QRV from 1 to 2!
Oct 10 16:16:49 saga gnome-session[1371]: [2039:2045:1010/161649:ERROR:platform_thread_linux.cc(99)] Failed to set nice value of thread to -10
Oct 10 16:17:26 saga kernel: IPv6: MLD: clamping QRV from 1 to 2!

systemdのunit名を指定してそれに関するログだけ出力させることもできます。

masami@saga:~$ journalctl -b -u sshd
-- Logs begin at Fri 2013-09-27 15:18:59 JST, end at Thu 2013-10-10 16:51:44 JST. --
Oct 10 12:11:33 saga sshd[1022]: Server listening on 0.0.0.0 port 22.
Oct 10 12:11:33 saga sshd[1022]: Server listening on :: port 22.
Oct 10 12:11:33 saga systemd[1]: Starting OpenSSH server daemon...
Oct 10 12:11:33 saga systemd[1]: Started OpenSSH server daemon.

"-p"オプションでログのレベル(journalctlだとpriority)による指定もできます。このレベルはsyslog(3)のlevelと一緒です。
レベル:名称
0:emerg
1:alert
2:crit
3:err
4:warning
5:notice
6:info
7:debug

このオプションは数値、名称どちらも使えます。

masami@saga:~$ journalctl -b -p err | head -n 3
-- Logs begin at Fri 2013-09-27 15:18:59 JST, end at Thu 2013-10-10 17:01:11 JST. --
Oct 10 12:11:27 saga kernel: sd 6:0:0:0: [sdc] No Caching mode page found
Oct 10 12:11:27 saga kernel: sd 6:0:0:0: [sdc] Assuming drive cache: write through
masami@saga:~$ journalctl -b -p 3 | head -n 3
-- Logs begin at Fri 2013-09-27 15:18:59 JST, end at Thu 2013-10-10 17:01:11 JST. --
Oct 10 12:11:27 saga kernel: sd 6:0:0:0: [sdc] No Caching mode page found
Oct 10 12:11:27 saga kernel: sd 6:0:0:0: [sdc] Assuming drive cache: write through

と、こんな感じで色々とできますが、manによるとまだまだ機能があります♪

φ(・・*)ゞ ウーン Fedora 20 Alpha ネットワークインストール版

テスト環境としてインストールしたのでGnome版との違いをめも。環境はFedora 20のvirt-namangerです。

Fedora20のvirt-managerは既にFedora20がリストに入ってます。
f:id:masami256:20131008234535p:plain
そして適当に仮想環境を設定します。

起動画面は特に変わらず。
f:id:masami256:20131008234620p:plain

起動するとAnacondaが立ち上がって言語設定画面になります。
この時、言語環境は自動検出してくれます。
f:id:masami256:20131008234709p:plain

言語の設定をして運命を受け入れるを選択するとメニュー画面がでます。
ライブCD版のAnacondaとの違いはインストール元の選択とインストールするソフトウェアグループの選択ができるってとこですね。
f:id:masami256:20131008234916p:plain

インストールソースはミラーサイトを指定しましょう。
ちょっと悩んだのは"updates"のとこですね。インストールメディア提供時点でのパッケージを入れるか最新のパッケージを入れるかで、正式リリース版なら最新版を選んでも安全だと思いますがまだα段階なのでここはチェックせずにインストールしときました。
f:id:masami256:20131008235107p:plain

インストールするパッケージのグループはここに出ているものの他に素のXwindowシステム、ミニマム等があります。
f:id:masami256:20131008235412p:plain

ここで選択できる内容は以下のようにyumでも確認できます。

[masami@kerntest ~]$ yum grouplist
There is no installed groups file.
Available environment groups:
   GNOME Desktop
   KDE Plasma Workspaces
   Xfce Desktop
   LXDE Desktop
   Cinnamon Desktop
   MATE Desktop
   Sugar Desktop Environment
   Development and Creative Workstation
   Web Server
   Infrastructure Server
   Basic Desktop
   Minimal Install
Available Groups:
   3D Printing
   Administration Tools
   Authoring and Publishing
   Books and Guides
   C Development Tools and Libraries
   Cloud Infrastructure
   Design Suite
   Development Tools
   Editors
   Educational Software
   Electronic Lab
   Engineering and Scientific
   Fedora Eclipse
   FreeIPA Server
   Games and Entertainment
   LibreOffice
   Medical Applications
   Milkymist
   Network Servers
   Office/Productivity
   RPM Development Tools
   Robotics
   Security Lab
   Sound and Video
   System Tools
   Text-based Internet
   Window Managers
Done

ディスクの設定、rootユーザの設定、一般ユーザの作成なんかはGnome版と同じです。

φ(・・*)ゞ ウーン Fedora 20 Alpha Gnome版

Fedora 20のAlpha版がリリースされました( ´∀`)bグッ! そこでGnome版のライブイメージでどんな幹事なのかを確認。テスト環境はkvmです。

まずは起動画面。
f:id:masami256:20130926120702p:plain

起動するとライブイメージの場合、そのままデスクトップを使うかインストールするかの選択に。
f:id:masami256:20130926120756p:plain

インストールを選択すると言語設定画面になります。
f:id:masami256:20130926120843p:plain

使用しているのはリリース版ではないので、インストールを続ける場合はいかなる運命も受け入れる必要があります。
f:id:masami256:20130926120913p:plain

ディスク以外はデフォルトで設定してくれてます。タイムゾーンも自動設定してくれるので通常はいじらなくてもOKかな。
f:id:masami256:20130926121023p:plain

PCに接続されているディスクの一覧が出るので、Fedoraをインストールするディスクを選択します。
ここでは1台しかディスク無いですけど、ディスクが2台あって/と/homeのディスクを分けたいとかだと2台選択する必要がありますね。
f:id:masami256:20130926121127p:plain

パーティショニングをどうするか。自分で決めたい場合は「I want to ~」を選択。
f:id:masami256:20130926121303p:plain

パーティションの作成。「+」を押して1個ずつ作るか、「Click here to ~」を押してデフォルトのパーティションを作成してそれを変更することも可能。
f:id:masami256:20130926121351p:plain

編集したら最後に左上の「DONE」を押す。
f:id:masami256:20130926121513p:plain

確認画面が出るので問題なければ「Accept Changes」を。
f:id:masami256:20130926121624p:plain

ディスクの編集が終わるとインストールのメニュー画面に戻って右下の「Begin Installation」ボタンが押せるようになります。
f:id:masami256:20130926121718p:plain

インストールが開始するとrootパスワード設定、ユーザ作成のボタンのある画面になります。(画面は既に両方設定した後ですが。。。)
f:id:masami256:20130926121859p:plain

まずはrootパスワードを設定。
f:id:masami256:20130926121811p:plain

ユーザ作成画面。
f:id:masami256:20130926122054p:plain

プログレスバーに「Complete!」と出ればインストール完了。「Quit」ボタンを押してAnacondaを終了し、PCをリブートで完了です。
f:id:masami256:20130926122132p:plain

grub
f:id:masami256:20130926122449p:plain

ログイン画面のユーザ選択画面。
f:id:masami256:20130926122502p:plain

選択したアカウントのパスワードを入力
f:id:masami256:20130926122522p:plain

ログインするとどの言語でGnome3を使うか聞かれる。
f:id:masami256:20130926122553p:plain

IMEの設定。
f:id:masami256:20130926122619p:plain

オンラインアカウントの設定。(使ったこと無いので詳細はわかりません。。)
f:id:masami256:20130926122641p:plain

前の設定まで片付けるとインストールすべて完了!
f:id:masami256:20130926122806p:plain

( ..)φカキカキ armで遊んでみる on Fedora

ARMにも興味がある今日この頃、ARMで学ぶ アセンブリ言語入門
という本を買ってみました。
特に読みたかったのはチャプター7の例外と割り込みの所ですねー。初めて読む486を読んだり、自作OS作成経験ある人には面白い章なんじゃないかと思います。

さて。早速遊んで見ようと思って気づいたことなどをめも。

まずは、必要な物としてエミュレータ(うちは遊べるような実機ないですし)、クロスコンパイラですね。
コンパイラgcc-arm-linux-gnuパッケージを入れます。yumで入れれば依存関係でbinutils-arm-linux-gnuパッケージも入るのでクロス開発環境としてはこれでOKです。あとはqemu-system-armパッケージを入れましょう。
これで環境はd( ^ω゜ )バッチリ!!と思ったら罠があります。

[masami@saga:~/codes/mikoto]$ yum info gcc-arm-linux-gnu
Loaded plugins: langpacks, refresh-packagekit
Installed Packages
Name        : gcc-arm-linux-gnu
Arch        : x86_64
Version     : 4.7.2
Release     : 2.aa.20121114svn.fc19.1
Size        : 28 M
Repo        : installed
From repo   : fedora
Summary     : Cross-build binary utilities for arm-linux-gnu
URL         : http://gcc.gnu.org
License     : GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions and LGPLv2+ and BSD
Description : Cross-build GNU C compiler.
            :
            : Only building kernels is currently supported.  Support for cross-building
            : user space programs is not currently provided as that would massively multiply
            : the number of packages.

Descriptionを読むとgccのクロスコンパイラパッケージはカーネルのビルドしかまだサポートしていないんですね。なので↓のコードもarm用に作ることができません。

#include <stdio.h>

int main(int argc, char **argv)
{
    printf("hello, world!\n");
    return 0;
}

すくなくとも2013/6/30時点でFedoraをホストにしてアプリをコンパイルしようと思ったら自前でツールチェイン等構築するか、エミュレータのarm環境が必要になります。
しかし、アプリはクロスビルドできなくてもカーネルはOKなので、一応遊べます。
俺のなかのマリー・ナントカネットさんが「アプリをクロスコンパイルできないならカーネルを書けば良いじゃない」と言っていましたw

ということで、単純なハローワールドを書いてみました。
書いたのは以下の4個です。

「ARMで学ぶ アセンブリ言語入門」の後半でirqやソフトウェア割り込みの扱いが載っていてそこで使用しているスクリプトを参考にしています。

では、まずはリンカースクリプトから。

ENTRY(mikoto_kernel_start)

SECTIONS
{
	. = 0x10000;
	.text : {
		*(.entry);
		*(.text, rodata);
	}

	.data : {
		*(.data);
	}

	.bss : {
		*(.bss);
	}

	.stack : {
		. = . + 0x1000;
		. = ALIGN(4);
		stack_top = .;
		. = . + 0x1000;
		. = ALIGN(4);
		irq_stack_top = .;
	}
}

bootで最初に呼ばれるのがmikoto_kernel_start、開始アドレスは0x10000で、スタックは0x1000からと言う感じです。
今回はirqは使って無いけど、一応記述は入れてあります。

次にboot時に呼ばれるアセンブラコード。

.text
.code 32

.globl 	mikoto_kernel_start

mikoto_kernel_start:
	ldr sp, =stack_top
	bl kernel_main

こちらはものすごく単純にして、スタックを設定したらc関数のkernel_main()を呼ぶだけです。
出力はシリアルポート(UART)です。
cのコードはこちら。

#define UART0 ((volatile unsigned int *) 0x101f1000)
#define UARTFR 0x06
#define UARTFR_TXFF 0x20

void 
puts(const char *s)
{
	while (*s) {
		while (*(UART0 + UARTFR) & UARTFR_TXFF)
			;

		*UART0 = *s;
		s++;
	}
}

void
kernel_main(void)
{
	puts("hello, world!");
	while (1);
}

最後にMakefileはこちら。

CC = arm-linux-gnu-gcc 
CFLAGS= -mcpu=arm926ej-s -marm -nostdlib --no-builtin -Wall

LD = arm-linux-gnu-ld
LDFLAGS = -T mikoto_kernel.ld

kernel = mikoto_kernel.img

objs = kernel_main.o \
	   head.o

all: $(objs)
	$(LD) $(LDFLAGS) $(objs) -o $(kernel) 

.c.o: 
	$(CC) -c $(CFLAGS) $< -c

.S.o:
	$(CC) $(CFLAGS) $< -c

clean:
	-rm *.o  *~

test:
	qemu-system-arm -M versatilepb -nographic -kernel $(kernel)

.PHONY: clean all

標準ライブラリは使わないので-nostdlibを付けるのと、gccがビルトインのputsが使おうとするのを防ぐため--no-builtinを付けてます。

そして、qemuで実行する場合はこんな感じのオプションで実行するとちゃんと動きます。

[masami@saga:~/codes/mikoto]$ qemu-system-arm -M versatilepb -nographic -kernel mikoto_kernel.img
pulseaudio: set_sink_input_volume() failed
pulseaudio: Reason: Invalid argument
pulseaudio: set_sink_input_mute() failed
pulseaudio: Reason: Invalid argument
hello, world!

こんな感じでFedora 19(x86_64)をホストにしてarmバイナリのコンパイル・実行ができました( ´∀`)bグッ!

FedoraのARMプロジェクトではVersatile Expressのイメージを配布しているのでこれで遊ぶこともできます。このイメージのディストリビューションはFedora18となっています。
イメージの取得、動かし方はFedoraProjectのWikiに書かれています。XFCEも動くようなのでGUIありで動かしてみたのが↓の写真です。
f:id:masami256:20130630205839p:plain

φ(.. )メモシテオコウ fedoraインストール後の設定ですることvirt-manager編

virt-managerもいくつかメモ。

# yum install libvirt qemu-kvm virt-manager

として、後は依存関係の解決を任せるという方法でやったらlibvirt-kvm-daemonが無いって怒られましたw
こいつはlibvirt-kvm-daemonが依存関係で自動的にインストールされないのでこれも入れてあげる必要アリ。

これが無い場合、virt-managerがこんな感じのエラーを出してくる。
f:id:masami256:20130601212054p:plain

  • 「libvirtError: unsupported configuration: hda-duplex not supported in this QEMU binary」と言われる(´・ω・`)

多分、virt-manager等をインストールしたらという感じで起動時にlibvirdが立ち上がるようにしますが、

# chkconfig libvirtd on
# systemctl start libvirtd.service

OS再起動前にvirt-managerを起動するとこれが出ることがあるらしい。これはfedoraのbugzillaでも報告されていてOS再起動したら直ったという報告があります。自分も再起動したら出なくなったので再起動必須なのかも。。。

φ(.. )メモシテオコウ fedoraインストール後の設定ですること

Fedora 19のBetaがリリースされてます。ということでインストールした訳ですが(いつもならBetaのRCテスト中にインストールするから普段に比べれば遅いタイミングだけど)毎回忘れる設定はメモっときます。

別のマシンからsshで接続したときにpermission deniedで接続できない場合、まずは接続先~/.ssh、~/.ssh以下のファイルのパーミッションを見ますけど、それでも接続できない場合はselinuxの設定が原因
デスクトップ環境があるならsealertをチェックすると理由と対処法が書かれていると思います。
↓のように。これはsshのアラートではありませんが。
f:id:masami256:20130601124220p:plain
ちなみにこれはselinuxのポリシーとしてsys_ptraceがkillall5を使うのを許可するかどうかで、許可するならThen this is solutionに書かれていることを実行するということです。

話を戻して、sshの場合はauthorized_keysの読み取りが~というような内容になっているのでこれを許可する場合は以下のように。プロンプトが違うのはrootで実行するか、一般ユーザで実行するかという基本的なところ。

# semanage fcontext -a -t ssh_home_t 'authorized_keys' 
$ restorecon -v 'authorized_keys'
  • LXDEで起動時にプログラムの自動起動

.config/autostartにスクリプトを置いておくんですが、自分はlxterminalをtmux起動した状態で立ち上げたいので
/usr/share/applications/fedora-lxterminal.desktopをベースに.config/autostart/fedora-lxterminal.desktopというファイルを以下の作って置いてます。

[Desktop Entry]
Encoding=UTF-8
Name=LXTerminal
GenericName=Terminal
Comment=Use the command line
TryExec=lxterminal
Exec=lxterminal -e tmux
Icon=lxterminal
Type=Application
Categories=GTK;TerminalEmulator;System;
X-Desktop-File-Install-Version=0.19

〆(.. )カリカリッ!! シリアルコンソールめも

virt-managerを使っていて普段はsshでゲストにつないでいるけどシリアル経由の設定もしておきたかったのでめも。
OSはゲスト・ホストともにFedora 18です。ゲストはvirt-managerを使ってインストールしています。ゲストのハードウェアに関する設定は特にいじっていません。

まずはカーネルのコマンドラインにシリアルの設定を渡すためにgrub2の設定。grubの設定を変更するため/etc/default/grubを修正します。
デフォルトだとこのようになっていると思います。

[masami@kerntest:~]$ cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_CMDLINE_LINUX="rd.md=0 rd.lvm=0 rd.dm=0 rd.luks=0 $([ -x /usr/sbin/rhcrashkernel-param ] && /usr/sbin/rhcrashkernel-param || :) rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
GRUB_THEME="/boot/grub2/themes/system/theme.txt"

このファイルに以下の3行を追加。

GRUB_CMDLINE_LINUX='console=tty0 console=ttyS0,115200n8'
GRUB_TERMINAL=serial
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"

/etc/default/grubを変更したらgrub2-mkcnofigコマンドで新しいgrub.cfgを作ります。

[masami@kerntest:~]$ sudo grub2-mkcnofig -o /boot/grub2/grub.cfg

これでゲスト側はリブートすれば準備完了です。
ホスト側は特にすることはないのでvirshのconsoleコマンドでゲストの名前を指定して接続できます。

[masami@saga:~]$ sudo virsh console kerntest
Connected to domain kerntest
Escape character is ^]

Fedora release 18 (Spherical Cow)
Kernel 3.6.5-2.fc18.x86_64 on an x86_64 (ttyS0)

kerntest login: masami
Password:
Last login: Fri Nov  2 11:24:11 on ttyS0
[masami@kerntest:~]$