Gentoo is painful_but_useful

26
I love Gentoo! うさたーん(@usaturn) #ssmjjp 2017/01/27

Transcript of Gentoo is painful_but_useful

I love Gentoo!

うさたーん(@usaturn)

#ssmjjp 2017/01/27

おまえ誰よ

Go YAMADAWeb広告配信会社で雑用の合間に DNS、メール、Hadoop等の運用、構築をやってます

最近の仕事

席移動したらパソコンが重いんです、500MB のエクセルファイル開くと重いんですなんとかしてください案件から Hadoop クラスタリプレースまで幅広く

好きな Linux ディストリ

Gentoo 教 systemd 派

最近の悩み

重要な雑用が増えるわかめちゃん状態

コミュニティ

Sphinx-Users.JP

Python mini hack-a-thon

2

usaturn

宣伝 Sphinx-Users.JP

「Sphinx」というPythonのドキュメンテーションツールのユーザ会で活動しています。

月1で「Sphinx + 翻訳 hack-a-thon」

「Sphinx Tea Night」を開催中。気軽に遊びに来てね!

3

現在ユーザ会のメンバ(#ssmjp 運営の@togakushi さん含む)でSoftwareDesign 誌にSphinxの記事を2年に渡り連載中!次回フィナーレ!

発表者の Gentoo 歴

Gentoo を使い始めたのは 3年半前に今の会社に転職してから。バリバリ初心者です。

職場は物理、仮想マシン(KVM)、クラウド合わせて 400 ノード弱の Gentoo サーバを運用、構築

デスクトップ環境には疎いです

Gentoo を端的に言い表している言葉

Gentoo is all about choices.

(Gentoo とは選択です)

インストール手順が選択の嵐

1. なんらかの Linux ディストリビューションの LiveCD で起動(お勧めは SystemRescueCd)

2. ディスクのパーティション作成

3. ファイルシステム作成(好きなファイルシステムを選択)

4. stage3(Gentoo のユーザランド)をダウンロード、展開

※CPUアーキテクチャ、init、Cライブラリに応じて選択

5. chroot

6. カーネルコンフィグ(必要なカーネルの機能を選択)

7. ネットワーク、fstab 等の基本設定

8. ブート設定(ブートローダを選択)

9. リブート

10. 必要な基本パッケージを選択してインストール cron

syslog

ntpd....etc

Gentoo とは

https://www.gentoo.org/

Gentoo とは

Linux ディストリビューションの一種。

Linux 以外のディストリビューションもある

Gentoo for Mac OS X

Gentoo/FreeBSD, Gentoo/NetBSD, Gentoo/OpenBSD, Gentoo/DragonFlyBSD

Plan 9 For Gentoo

StormOS-Next(illumos ※幻)

Larry the Cow was a bit frustratedat the current state of Linux distributions…

…until he tried Gentoo Linux.

Gentoo が使われているところ

pepper

NASDAQ(未確認http://www.computerworld.com/article/2510334/financial-it/how-linux-mastered-wall-street.html)

Chrome OS や CoreOS の元

アドテク企業系(2社確認済み)

Gentoo の特徴

source-based Linux distribution

カスタマイズ性の高さ

対応しているアーキテクチャが豊富

バージョン番号がない(ローリングリリース形式)

アップデート後の各アプリの更新された設定ファイルの管理が可能

source-based Linux distribution

多くの Linux ディストリビューションがコンパイル済みのバイナリを提供するのに対して、ソースベースで配布されている

Linux カーネル

アプリケーション各種

よく質問される事

Q. Gentoo って、自分で全部コンパイルしないといけないんでしょう?

A. 誤解しないで下さい。

コンパイルすると言っても手動で面倒なコマンドを打ったり、設定をする事はありません。

他のディストロのパッケージ管理ツール apt や yum と同様の使い勝手だと思って下さい。

パッケージ管理ツールを選択

Portage標準のパッケージ管理ツール

Paludis

パッケージ管理ツール「portage」

コンパイルオプション「USE フラグ(#Gentoo の要)」

各パッケージをコンパイルする際、手動だと ./configure 等で指定するオプション(からパッケージメンテナが選んだ物)を portage では「USE フラグ」と呼びパッケージをコンパイルする際に反映する事ができます

#vim のインストール時に LuaJITを有効にする例

USE=luajit emerge -avt vim(luajit を有効にすると自動的に依存関係にあるLua等のUSEフラグが有効になる)

コンパイル時の gcc のオプションを設定し、CPU に最適化したバイナリを作成できます

バイナリパッケージを作成する機能(同じマシン構成が多いと役に立つ)

複数のバージョンを選択

スロットの概念 パッケージのバージョンを複数選択する事ができます。

例えば、Python の場合は 2017年1月現在 2.7系、3.4系、3.5系を利用できます。各バージョンを使い分ける事も簡単で開発環境に適しています。

他のディストロで簡単にはできない事

例えば多くのアプリケーションに組み込まれている OpenSSL を排除し、よりセキュアな LibreSSL を組み込む事が簡単にできます

標準外のパッケージも簡単に使える

overlay 非公式のパッケージリポジトリや、自作のリポジトリを使う仕組み

アップデート時の設定ファイル管理

アップデート後の各アプリの更新された設定ファイルの管理が可能

標準で 2 つのコマンドが用意されています。後者については rcs と連携し設定ファイルのバージョン管理ができます。

etc-update

dispatch-conf

どちらのコマンドも、アプリケーションのアップデート後に打つ事により、設定ファイルの diff を表示してマージする/マージしないを選択する事ができます。

アーキテクチャを選択

もちろんラズパイに入るよ

ルータにも入っちゃう!

EdgeRouter というVyatta(VyOS)のフォークを利用しているルータにインストールする方法が公開されてます。

プロセス管理を選択

openrc sysvinit の Gentoo 独自のラッパー

Docker が標準採用している Alpine Linux が利用しArch Linux 等でもパッケージが提供されている

systemd 最近の有名な Linux ディストロのほとんどが採用している

今までパッケージを別途インストールしていた基本機能(cron、ntpdクライアント、syslog等)を内包している為、Gentoo で最小インストールする際の相性が非常に良い

標準 C ライブラリを選択

glibc

uClibc(サイズが小さい)

Alpine Linux が利用している

musl (サイズが小さい)

glibc の代わりに uClibc や musl(マッスル)を使った stage3 のイメージはサイズが非常に小さくなる事を生かしてコンテナや組み込みに!

まとめ

Gentoo とは選択です 他のディストロの基本的なパッケージも選択できます パッケージ管理ツールすら選択できます パッケージのバージョンを複数選択できます パッケージの USE フラグを選択します 標準外のパッケージも簡単に選択できます Intel CPU 以外も選択できます

選択の幅が広い事により最小環境が構築しやすい 機能を USE フラグで絞る事により依存関係のパッケージの数を必要最小限にしてインストールできます

最小環境で構築する事によりセキュリティの向上、動作の安定性に期待できます

コンパイル時のチューニングで使っている CPU に最適化したバイナリを簡単に作成する事ができます

Web の参考情報

Gentoo 公式サイト

https://www.gentoo.org/

Arch Linux Wiki も非常に参考になります

https://wiki.archlinuxjp.org