Seeker's Memo

個人的で技術的かもしれないメモがメインのブログです。http://seekers.hatenablog.jp/about

【2017年09月版・手順抜粋メモ】Gentoo Linuxにデスクトップ環境をインストールする

前半記事の

【2017年09月版・手順抜粋メモ】Install Gentoo Linux (case for Base System) for amd64 & systemd - Seeker's Memo



↑これの続きです。

デスクトップ環境選定

初心者も安心なGNOME3をまず入れたいが、USEフラグで詰まったり、大量の時間が必要になる。
そこで軽量な、awesomeを先に入れて、Google-Chromeを使えるようにしたい。
日本語入力はいろいろ考えた結果、ibusとmozcにすることにする。

開始

Xとドライバ関係

# nano /etc/portage/make.conf
入出力ドライバ:libinputを選択。
INPUT_DEVICES="libinput"
うちはGeForceなので、VIDEO_CARDSには以下を設定
VIDEO_CARDS="nvidia"
USE変数に"alsa X opengl gtk gtk2 gtk3"などを設定。
# emerge --ask -uDN nvidia-drivers xorg-server mesa-progs xrandr
# eselect opengl set nvidia
# eselect opencl set nvidia
あとは好きなフォントも入れておく。私は手動でRictyを作って入れた。

ターミナル

とりあえず依存関係の少ないlxterminal(LXDE環境のターミナルだけどね)を入れた。
USE変数をいじる必要があったかも?
あとで、guakeやgnome-terminalとかterminator入れてもいい。

Google-Chrome

# nano /etc/portage/package.license
www-client/google-chrome google-chrome
上記追記。USE変数も要求されるかもなのでもしされたら追記しておく。
# emerge --ask www-client/google-chrome
google-chrome-stableがコマンド本体として入る。

awesome

# emerge --ask awesome feh
とりあえず用意されたデフォルトのやつをコピー
$ mkdir -p ~/.config/awesome/
$ cp /etc/xdg/awesome/rc.lua ~/.config/awesome/
用意されたテーマをコピー
$ mkdir -p ~/.config/awesome/themes/
$ cp -r /usr/share/awesome/themes/default ~/.config/awesome/themes/default
・設定編集
$ nano ~/.config/awesome/rc.lua
とりあえずterminal = "lxterminal"に変更しておく
また、メニューのところ(「{"open terminal", terminal}」とある辺りの下)に、
「,{"Google-Chrome", "google-chrome-stable"}」としておくと、awesomeから直接Chromeが起動できる。

lightdm (グラフィカルログイン、ディスプレイマネージャー)

# emerge --ask -uDN lightdm
# systemctl enable lightdm

日本語入力(ibus+mozc)

※make.confのUSEに、"ibus qt4"を追加しておく。他にも必要になるかも?
# emerge --ask ibus mozc -uDN

細かな設定

ログイン時にibusを起動して、日本語が正常に打てるように以下をやっておく。
$ touch ~/.xprofile
export LANG=ja_JP.UTF-8
export GTK_IM_MODULE=ibus
export QT_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
export XIM=ibus
以上を追記しておく。

ibus自動起動
$ nano ~/.config/autostart/ibus.desktop
Encoding=UTF-8
Name=ibus-mozc
Comment=ibus-mozc
Comment[ja_JP]=ibus-mozc
Exec=ibus-daemon --xim --replace --daemonize
Icon=ibus-daemon
Type=Application
StartupNotify=true
Keywords=InputMethod

どうあがいても自動的に日本語配列にならないとき

$ nano ~/.config/autostart/setxkbmap-jp.desktop
Encoding=UTF-8
Name=setxkbmap-jp
Comment=setxkbmap jp
Comment[ja_JP]=setxkbmap jp
Exec=setxkbmap jp
Icon=setxkbmap
Type=Application
StartupNotify=true
Keywords=InputMethod

とりあえずリブートして完成

無事、LightDMの画面が出たなら、おめでとうございます。
画面右上から、awesomeセッションを選択し、ログインしてください。
初期設定では真っ黒っぽい画面とともにawesomeのデスクトップ環境が起動します。
操作方法などは、割愛して他の詳しいサイト様に任せる。
Windowsキー(Mod4)か右クリックでメニューが出る。
Chromeを起動したら、[Mod4+Return]でターミナルも起動させれば完璧。
mplayerでも入れてターミナルからmplayer起動して音楽聴きながら気持よくカスタマイズだ。

$ ibus-setupでibusとmozcの設定しておく。これで日本語入力もできるはず。
ダメだったら、とりあえず「$ setxkbmap -model jp106 -layout jp」しておけばどうにかなる。localectlコマンドで設定見直し。
xrandrを使ってデュアルディスプレイなどの設定変更をしておくと良い。詳細は省く。

あとはglxinfoでNVIDIA+OpenGLが有効になってるか確認したり(もちろん/var/log/X.0.logなどを参照しても良い)。

ここからが勝負

さらに最適化するなり、このままawesomeのカスタマイズするなり、他の好きなデスクトップ環境にしてみたり。
他にも使いたいソフトをemergeして設定するなりお好きに。

上記以外に追加で入れたであろうもの一覧

mplayer
vlc
sshクライアント既に入ってた
dev-vcs/git

【2017年09月版・手順抜粋メモ】Install Gentoo Linux (case for Base System) for amd64 & systemd

というわけで、久々にインストールします。
やったこととかのメモ抜粋。手順等が間違ってる可能性があります。
なので詳細はGentooのハンドブックに従ってください
インストール後の設定などは、Gentoo以外にもディストリビューションが違いますがArch LinuxのArch Wikiも合わせてみるととても参考になります。
いつもお世話になってます。両方好きなディストリビューションです。
なおデスクトップ環境導入編(インストール後半。awesome+ibus+mozc+googlechrome)は、

【2017年09月版・手順抜粋メモ】Gentoo Linuxにデスクトップ環境をインストールする - Seeker's Memo



となります。

ターゲット

Gentoo Linux (amd64, systemd)
今回は、stage3-tarballからsystemd版使ってみます。

システム構成

CPU: Intel Core i7 7700K 4.20GHz
M/B: ASUSTeK ROG STRIX Z270F GAMING
Mem: Corsair DDR4 2800 32GB(Dual-Channel)
Disk:
SSDWindows 10),SSD(インストール予定),残りHDD
Sound: Onboard
LAN: Onboard
Graphics: ASUStek GeForce 1060(6GB)
Input: Keyboard=K270 & Mouse適当

インストール開始

今回は既に他の領域にインストールしてあるArch Linux上からchrootで構築する。
インストール時に必要になるコマンドは、予めインストールした。
gdiskやlinks(正直、GUIでもいいけど)、その他、便利なaur/gentoo-mirrorselectパッケージやgenfstabが入ってるaur/arch-install-scriptsなど。

とりあえず、Gentoo amd64ハンドブックに従って、ディスクの準備とそのマウント。
その前にBIOSで、Secure Bootは切っておく。UEFI-fastにしてCSMをオンにしておく。
作業するLinux上で「efivar」を確認し、EFIでブートしていることを確認しておく

ディスクに関してはUEFIでGPTを想定して、gdiskコマンドを使って切り分け、BIOSパーティションは作らない。
ESPはtype=EF00で512MiB確保する。
今回、/homeはわけないことにする。
※誤って他のOSが入ってるディスクや領域に触らないこと。

/boot=/dev/sdb1(esp,vfat)と/=/dev/sdb2=ext4は分けた。メモリ余ってるくらいなのでSwapは作成しない方針で。

# mkfs.vfat -F32 /dev/sdb1
# mkfs.ext4 /dev/sdb2 -L gentoo-root でラベルをつけてフォーマットした。

# mkdir -pv /mnt/gentoo
# mount /dev/sdb2 /mnt/gentoo
※この時点で/bootをマウントしないほうがいいらしい

ハンドブックに戻る。

tarball取得と展開。
・今回はsystemdのやつを選んだ。

/etc/portage/make.confの編集など
CFLAGS="-O2 -pipe -march=native"
MAKEOPTS="-j7"ぐらいか。
FEATURES="parallel-fetch userfetch ccache"も設定してもOK?
CCACHE_SIZE="2G"
CCACHE_DIR="/var/tmp/ccache"

USEはとりあえず"cjk unicode nls symlink systemd "ぐらいは追記。
L10N="ja en"
LINGUAS="ja en"
も書いておくか。

# mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf
日本サーバーを全部スペースで選択しておいた。

次がわりかし久々なワシには変更点。
# mkdir /mnt/gentoo/etc/portage/repos.conf
# cp /mnt/gentoo/usr/share/portage/config/repos.conf /mnt/gentoo/etc/portage/repos.conf/gentoo.conf
edit gentoo.conf, change to Japanese Server.

システムのマウント
mount -t proc /proc /mnt/gentoo/proc
mount --rbind /sys /mnt/gentoo/sys
mount --make-rslave /mnt/gentoo/sys
mount --rbind /dev /mnt/gentoo/dev
mount --make-rslave /mnt/gentoo/dev

chroot /mnt/gentoo /bin/bash と source /etc/profile

あとでやるenv-update && source /etc/profile && export PS1="(chroot) $PS1"

# mkdir -pv /boot
# mount /dev/sdb1 /boot

portage更新?
# emerge-webrsync
# emerge --sync --quiet

# eselect news read 番号 で一応目を通す。

#eselect profile list でsystemdを使うやつになってることを確認。***desktop/gnome/systemdとかのやつ

# echo "Asia/Tokyo" > /etc/timezone
# emerge --config sys-libs/timezone-data

・ccache入れておく。
# emerge --ask ccache
make.confにCCACHE_SIZE="2G"追加。CCACHE_DIR="/var/tmp/ccache"も必要なら追記

・今のうちにシステム全体更新
# emerge -avDN @world


・ガイドに従ってマニュアルカーネルインストール。
※重要:別のハンドブックにてsystemdの設定項目や導入方法も確認しておく。

・ホストネームやネットワーク設定
とりあえずルーター挟んで有線LAN内固定IPにしたいので、今回は以下のようにする。
# nano /etc/systemd/network/wired.network
[Match]
Name=enp*

[Network]
Address=192.168.11.10/24
Gateway=192.168.11.1

# systemctl enable systemd-networkd
# ln -snf /run/systemd/resolve/resolv.conf /etc/resolv.conf
# systemctl enable systemd-resolved.service

・パスワード設定
一般ユーザ作成&パスワード設定
グループに参加 gpasswd -a [USER] wheel
今後のことを考えて、video,usb,cdromも追加しておくといい。

・追加のツール
syslog-ng cronie mlocateを選択。
ファイルシステムツールを入れた。
e2fsprogs
fuse-exfat
exfat-utils
dosfstools
ntfs3g

sudoを入れて設定
念の為dhcpcdかdhclientを入れておく。

・grub2入れる
# echo 'GRUB_PLATFORMS="efi-64"' >> /etc/portage/make.conf
# emerge --ask --verbose sys-boot/grub:2
# grep -v rootfs /proc/mounts > /etc/mtab ※やっちゃったけどこの手順必要?
# grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=gentoo-grub
--bootloader-id指定は任意かつ命名自由。他のOSのブートローダーのIDと被らないようにする。ヘタすると起動しなくなるし、Windows環境などもぶっ壊す羽目になる。
# grub-mkconfig -o /boot/grub/grub.cfg

細かな設定と再起動

# systemd-machine-id-setup

アンマウントしてリブート。

追加でやるべきこと

無事起動したら、
(キーがおかしかったらloadkeys jp106で応急処置。あとで設定し直す)
localectl set-keymap jp106
localectl set-keymap jp-OADG109A --noconvert

他にもhostnamectlやtimedatectlなどオプションを指定しながら実行して、念の為もう一度リブート。

「# ip addr」でネットにも繋がっているか確認したり、
dmesg やjournalctlを使ってエラーなどが殆ど無いかどうか調べる。
だめだったら、クリティカルにだめな箇所だけは1個ずつ潰す。
よくあるのが、ファイルシステムやマウントエラーとか。ヘタすればカーネルパニックになるやつ。

ベースシステム完成

とりあえず、コンソールベースのシステムはこれにて出来上がり。

追加設定(任意)

# touch /etc/portage/package.mask
# touch /etc/portage/package.use
# touch /etc/portage/package.license

emacsのXサポートを外す(いわゆるemacs-noxにする)
# nano /etc/portage/package.use
app-editors/emacs -X
で保存して、Let's emerge

パッケージ管理サポートツール

# emerge --ask -uDN app-portage/eix
# eix-update
※eix [検索したいやつ]でとりあえず見つけられる。emerge --searchよりずっと早い。詳細はman eixなどで。

あとは、app-portage/gentoolkitとapp-portage/portage-utilsも使うと便利らしい。
紹介などはこちらのサイトさんの記事などでどうぞ。
gnu.hatenablog.com

source-highlight

lessコマンドを色分け表示で便利にする奴。
$ sudo emerge --ask source-highlight
~/.zshrcなどに、追加の変数などを設定すると色分け表示してくれるようになる。
export PAGER=less
export OUTPUT_CHARSET=utf-8
export LESS='-R '
#export LESSOPEN="| /usr/bin/source-highlight-esc.sh %s"
#export LESSOPEN='| /usr/share/source-highlight/src-hilite-lesspipe.sh %s'
export LESSOPEN='| /usr/bin/src-hilite-lesspipe.sh %s'
export LESS_TERMCAP_me=$(printf '\e[0m')
export LESS_TERMCAP_se=$(printf '\e[0m')
export LESS_TERMCAP_ue=$(printf '\e[0m')
export LESS_TERMCAP_mb=$(printf '\e[1;32m')
export LESS_TERMCAP_md=$(printf '\e[1;34m')
export LESS_TERMCAP_us=$(printf '\e[1;32m')
export LESS_TERMCAP_so=$(printf '\e[1;44;1m')
#export LV='-Ou8 -c'

ここまでに、追加で入れたもの一覧

pciutils
lshw
ccache
sys-fs/sysfsutils
mlocate
syslog-ng
cronie
e2fsprogs
fuse-exfat
exfat-utils
dosfstools
ntfs3g
sudo
dhcpcd
zsh
nkf
wget
links
app-editors/emacs -X
app-portage/eix
gdiskなどのディスクユーティリティsys-apps/gptfdiskすでに入ってた

入れて使うか悩んでる

flaggie

Arcn Linuxでパッケージのアップデートに失敗したとき

pacmanやyaourtなどでGPGキーが古いと怒られたら


# pacman -Sy archlinux-keyring


これでいけるっぽい?最新の署名にするってことなんだけど。

※ローリング・リリースな代わりに、Arch Linuxは定期的にパッケージ署名リストの更新をしなくちゃならんらしいので。

C(C++)で何かを字句解析してみる(?) その6

進捗どうですか?

ええ、はい……。
率直に言うと、進んでない。

正確には両方のリポジトリでちょっと躓いてしまったので、ソースコードフルスクラッチで書き直してる最中です。

やったこと

リポジトリ名変更。
・今までの名前のリポジトリに、同じような(少し違う別のアプローチ版)boost::xpressiveを使ったプログラム置いてみた。
 =>かなりバグってるで・・・・・?
・今までの分はソースコードフルスクラッチ書き直し。

具体的には?

・字句解析時点では数値は個別に数値化せず、std::stringで保持しておいて、構文解析とかのときに数値化する方向で書き直し。
・上記に伴う変更箇所多数。
・メンバー変数を参照しないメソッドは、メソッドにしておかないで名前空間で括ってとりあえずグローバル関数しておいた。
・stringのlength()チェック追加。そのままにしておくとバグの温床になりそうだったので。足りてないかもだが。

さてどうしよう?

ミニ言語を作るために、汎用的なライブラリ風に実装していくのではなく、
もうハードコードバリバリで作り込んでしまおうかなと、考えている。

どんな言語にするかは未定です。


とりあえず、シンタックスツリー作って評価するあたりまでは頑張って作らないと、簡易電卓にさえならない……
今までのソースコード(書き直し)=>https://github.com/seekerkrt/lexer
別のアプローチ分https://github.com/seekerkrt/compiler

C(C++)で何かを字句解析してみる(?) その5

あそこまで実装しておいたが、すべて投げ捨てた

いや正確には、残しておいて、別名に変更して取っておいた、が正しい。

boost::xpressiveを使用して1から書き直してみた

・動的に正規表現で、字句の種類やらを定義及び字句解析できるようにしてみた。
・とりあえず、かんたんにいくつか定義して、切り出しができてるかとりあえず確認するぐらいまでをMain.cppにガッツリ書いた。

ソースコードはこちら
GitHub - seekerkrt/compiler

今後の予定

・字句の正規表現による定義リストの優先順位がついてないので、下手にいじると意図しない動作になる可能性があるみたいなので、そこらへんどうにかする。
・HEXリテラル、整数リテラル、実数リテラル、文字リテラルあたりはきちんと別個に分解できるようにしたい。
※符号付き数値と演算子については、ソースコードの実装的に構文解析の領域に踏み込めるようになったら考えることにする。
・それらあとのことは上記ができたら考える。