- 投稿日:2021-01-29T23:15:03+09:00
Alter Linux(Xfce版)でDockerとGPU対応の開発環境を作る
Alter Linuxで開発環境を作る
Arch Linux系ディストリビューション「Alter Linux」(Xfce版)の使用感が非常に良かったため、ノートPCにインストールして環境構築を行いました。
その際、躓いた点が幾らかあったので記録を残しておこうと思います。筆者の環境
Alter Linuxのバージョン: RC3 (Xfce版)
PC:ASUS Zenbook Pro 14
i5-8565U,8GB,GTX1050-MaxQAlter Linuxのインストール
公式ページからイメージを落とし、balenaEtcherなどでUSBメモリに焼く。その後、UEFIから起動して、インストーラーに従って作業を進める。
以上でインストールは終わり(めっちゃ簡単)。VSCode
CommunityのOSS版と、AURの公式ビルド版の2種類が存在する。
(OSS版の初期設定では、拡張機能の検索先が公式版と異なるらしい。詳細はこちら)[OSS版] $ sudo pacman -S code [公式ビルド版] $ yay -S visual-studio-code-binOSS版については、Alter Linux付属のパッケージマネージャー(GUI)でもインストールできる。
Docker
こちらもpacmanかGUIのパッケージマネージャーからインストール可能。
$ sudo pacman -S docker docker-compose docker-machineGUIの場合は、「docker」で検索すると上記のパッケージが出てくるため、それぞれ選択してインストール。
また、VScodeの拡張機能「Remote Container」を使う場合は、ログインユーザーをdockerグループに追加する必要がある。
dockerグループへのユーザー追加は、セキュリティが低くなる恐れがある(詳細はこちら)ようなので注意。$ sudo gpasswd -a {ログインユーザー名} dockerNvidiaドライバー
インストール
pacman、GUIどちらでも可能。インストール後は再起動が必要。
$ sudo pacman -S nvidia-dkms nvidia-settings nvidia-prime※nvidia-primeについては、CPUグラフィックとGPUを両方使いたい方だけでいいと思います。
問題
再起動後にターミナルでnvidia-smiで状態を確認すると、GPUが使われていない状態だった(メモリ使用量が0Bでかつプロセスがなにもない)。また、nvidia-settingが起動できなかった(ターミナルから起動してもエラーを吐く)。
解決策
AURのxfce4-sensors-plugin-nvidiaをインストールする。
$ yay -S xfce4-sensors-plugin-nvidia原因は不明…LinuxのGPU関連はよくわからない…
今回は、ArchWikiのXfceのページを見て、運良く解決できた。
他のデスクトップ環境では起こらないと思う(未検証)ので、GPUを使うなら他のデスクトップ(Cinnamonなど)でもいいかもしれない。その他
ブラウザ
初めからChromiumがインストールされている。
pacman、AURからChromeやFirefoxもインストールできる。
AURにはMicrosoft-edgeのDev版もあった(同期機能やChromeの拡張機能が使えない)。Optimus-manager
IntelとNvidiaのGPUを自動(手動も可)で切り替えてくれるソフト。AURからインストールできる。
電源接続時と非接続時、それぞれの起動GPUを選べたりもするので、GPU搭載ノートPCを利用している方におすすめ。$ yay -S optimus-manager optimus-manager-qtqtはGUIの設定やアイコンを追加するパッケージ。
Timeshift
スナップショットを作成し、システムのバックアップを行うソフト。AURからインストールできる。
$ yay -S timeshiftGPUのドライバー関係をいじっていると正常に起動しなくなることがあったが、これを使うことで簡単に巻き戻すことができた。
起動時や一定期間ごとに自動でスナップショットを作成してくれるため、自身で作成しなくても安心できる点も素晴らしい。日本語入力の設定
デフォルトで日本語入力にはMozcが使われている。筆者の環境ではアプリケーションメニューにMozcの設定が見当たらなかったが、以下のコマンドでGUIの設定メニューを呼び出すことができた。
$ /usr/lib/mozc/mozc_tool --mode=config_dialog最後に
Alter Linuxは、Arch Linuxのインストールの複雑さが解消され、Ubuntuなどと同じようにインストーラーで簡単にインストールできた。その上、Arch Linuxの豊富なリポジトリも利用できるため、ソフトやパッケージのインストールもスムーズだった。また、一部のアプリに関してはAlter LinuxのGUIアプリケーションからインストール可能で信頼性が高い。総じて非常に使いやすく、設定が容易なディストリビューションだった。
今後環境に変化があれば随時追記していく予定。参考サイト
- 投稿日:2021-01-29T23:07:08+09:00
Rotrics DexArm をLinux で動かす
Rotrics DexArm を入手しました。Ubuntu 20.04 で動かしてみる。
lsusb を使うと$ lsusb STMicroelectronics Virtual COM Port無事に認識できている。
$ ls /dev/serial/by-id/ usb-STMicroelectronics_STM32F407ZG_CDC_in_FS_Mode_305C356B3439-if00$ ls -l /dev/serial/by-id/usb-STMicroelectronics_STM32F407ZG_CDC_in_FS_Mode_305C356B3439-if00 lrwxrwxrwx 1 root root 13 1月 29 18:30 /dev/serial/by-id/usb-STMicroelectronics_STM32F407ZG_CDC_in_FS_Mode_305C356B3439-if00 -> ../../ttyACM0下記コマンドを実行するとシリアル通信にも成功。
$ screen /dev/ttyACM0 115200こちらのリポジトリーのサンプルスクリプトを実行すればロボットは無事動く
https://github.com/Rotrics-Dev/DexArm_API上記の例だとttyACM0にマウントされているので、パスを/dev/ttyACM0と書き換えること。
- 投稿日:2021-01-29T18:56:49+09:00
小技の寄せあつめ
これは、何?
Mac、Raspberry Piを使うなかで、ちょっと便利だと思った小技を寄せあつめたものです。
都度、書き足します。Mac編
zshの関数を利用してpyuic5の入力を楽にする(2021.2.2追加)
最近Qt Designerをよく使うのでpyuic5を頻繁に使用している。
そのたびに% pyuic5 hogehoge.ui -o hogehoge.py
とするのが面倒になったので.zshrcにfunctionとして登録しました。
設定は、以下の内容を.zshrcに追加するだけです。関数名(コマンド名)は、ui2pyにしました。
同じ名前でも、.zshrcの設定が先に呼ばれるので問題ありません。function ui2py(){ pyuic5 $1 -o $1:r.py }使う前には、
% source ~/.zshrc
してください。
使い方(必要ないと思いますが、念のため)は以下のとおりです。% ui2py hogehoge.uisshでログインする際に、ログイン先のディレクトリを変更(2021.1.31追加)
% ssh -X raspi4 -t "cd /home/pi/share; bash --login"sshログイン時に、タイムアウトを防止(2021.1.31追加)
~/.ssh/configに、以下を追加。
ServerAliveInterval 30Raspberry Pi編
- 投稿日:2021-01-29T18:01:16+09:00
sudo 脆弱性 CentOS・RHEL・Ubuntu・AmazoLinux系 対応方法 (CVE-2021-3156)
概要
sudo 脆弱性が発表されたので (CVE-2021-3156)
各OSでアップデート対応手順をまとめました。
実際の手順は検証してから作業お願いします。
私の場合はAWS環境で各OSのAMIで確認してます。対象となる製品とバージョンは次のとおりです。なお、各ディストリビューションにおける対象バージョンは、ディストリビュータの情報を参照ください。
- sudo バージョン 1.8.2 から 1.8.31p2
- sudo バージョン 1.9.0 から 1.9.5p1
なお、本脆弱性を発見したQualys社は、"sudoedit -s /"コマンドを実行し、"sudoedit:"から始まるエラーが表示されると脆弱性の影響を受け、"usage:"から始まるエラーが表示されると影響を受けない、という情報を公開しています。
https://www.jpcert.or.jp/at/2021/at210005.html参考:
https://www.jpcert.or.jp/at/2021/at210005.html
https://security.sios.com/vulnerability/sudo-security-vulnerability-20210127.htmlCentOS7・AmazonLlinux2・AmazonLlinux・RHEL8・RHEL7
sudo 脆弱性対応 手順書作成 ■CentOS7・AmazonLlinux2・AmazonLlinux・RHEL8・RHEL7 - 作業前確認 (sudoedit: ~ と表示される場合は対応が必要です。) $ sudoedit -s / ---- sudoedit: /: 通常ファイルではありません ---- - パッケージアップデート $ sudo yum update sudo - 確認 (usage: ~ 始まれば対応完了です。) $ sudoedit -s / ---- usage: sudoedit [-AknS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-T timeout] [-u user] file ... ----※サポート終了のOS (CensOS6とCentOS5)
■CentOS6 rpm -Fvh https://github.com/sudo-project/sudo/releases/download/SUDO_1_9_5p2/sudo-1.9.5-3.el6.x86_64.rpm sudoedit -s / ---- usage: sudoedit . . . ---- ■CentOS5 rpm -Fvh https://github.com/sudo-project/sudo/releases/download/SUDO_1_9_5p2/sudo-1.9.5-3.el5.x86_64.rpm sudoedit -s / ---- usage: sudoedit . . . ----Ubuntu 16.4LTS 18.04LTS 20.04LTS
Ubuntu 16.4LTS 18.04LTS 20.04LTS ■バージョン確認 $ cat /etc/issue ---- Ubuntu 18.04.5 LTS \n \l ---- ■対象か確認 $ sudoedit -s / ---- sudoedit: /: not a regular file ---- ■パッケージリストを確認 dpkg -l sudo ---- Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Architecture Description +++-===================-==============-==============-=========================================== ii sudo 1.8.21p2-3ubun amd64 Provide limited super user privileges to sp ---- ■パッケージリストの更新 sudo apt update ■sudo パッケージ更新 sudo apt install sudo ■確認 sudoedit -s / ---- usage: sudoedit [-AknS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-T timeout] [-u user] file ... ----
- 投稿日:2021-01-29T17:43:30+09:00
Ceph(Octopus)の構築(設定編 cephFS/mds)
はじめに
この記事では、タイトルのとおり現時点(2021.01)で最新であるceph(octopus)の構築を目的としています。
また、自分で構築した手順の備忘録を兼ねているので、細かいところで間違いなどあるかもしれません。基本的には公式のDOCUMENTATIONが必要なことを全て網羅しているので一読しておくことをお勧めします。
Linuxの知識もある程度必要になるので他サイトや書籍などで事前に基本は押さえておくとよいでしょう。準備編等は関連記事を参照してください。
関連記事
Ceph(Octopus)の構築(準備編 ハードウェア)
Ceph(Octopus)の構築(準備編 ソフトウェア)
Ceph(Octopus)の構築(設定編 共通)
Ceph(Octopus)の構築(設定編 ブートストラップ)
Ceph(Octopus)の構築(設定編 mon/mgr/osd)
Ceph(Octopus)の構築(設定編 cephFS/mds) この記事cephFSボリュームの作成
ここで作成するcephFSのボリューム名は「share」とします。作成自体はコマンド1つで完了です。
cephadm shell ceph fs volume create sharemdsの自動展開を無効
自動展開を無効にしておかないとノードに意図した役割を持たせることができません。(勝手にmdsが展開されます。)
自動でやってくれるのはありがたいのですが、今回はノード毎に役割を決めているので無効化しておきます。cephadm shell ceph orch apply mds share --unmanagedmds daemonの数を指定
cephadm shell cceph fs set $shareName max_mds 3mds daemonの追加
cephadm shell ceph orch daemon add mds share ceph-mds01 ceph orch daemon add mds share ceph-mds11 ceph orch daemon add mds share ceph-mds21dashboardの確認(cephFSボリューム)
dataとmetaのボリュームがあれば問題ありません。device_health_metricsは自動生成されました。
dashboardの確認(mds)
Ranksにあるmdsが稼働中のものです。StandbysはRanksにあるmdsが何らかの理由で止まった場合にアクティブになり、Ranksに入るようです。
おわりに
これでcephの設定は完了です。あとは作ったボリュームをsambaで公開すればwindows等からも使えるようになります。
- 投稿日:2021-01-29T15:53:22+09:00
超初心者向けLinuxの基礎(ファイル操作関連)
Linuxとはなんぞや
オペレーティングシステムの一種で主にCUIで操作します。
GUI
ユーザへの情報提供にグラフィックを多用
利点:直感的で操作性がよい
Windows,MacOSCUI
ターミナルと文字でのやりとり
利点:開発が楽、ネットワーク負荷低い、ファイルの細かい操作性機械学習と相性がよい(と思う)Linux基礎コマンド(ファイル操作関連)
CD :ディレクトリの異動
ls :ファイルやディレクトリの一覧出力
mkdir :ディレクトリの作成
rm 名前 :指定したファイルを削除
rmdir 名前 :指定した空のディレクトリを削除
基本コマンド CDとディレクトリの概念
CDを使ってディレクトリの移動を行います。図でのようにhomeの下のディレクトリにいるとします。CD ../ と打つことで親ディレクトリ、つまりhomeに移動できます
相対パス
現地点からの相対的な位置指定のこと
bbbに移動したいとき、cd ../aaa/bbb絶対パス
ルートディレクトリからの絶対的な位置指定
bbbに移動したいとき cd /home/aaa/bbb比較的近い位置に移動する場合は相対パス
絶対パスは今自分がどこにいるか関係なく飛べる利点がある
※自分が今どこにいるか迷子になった時絶対パスで返してくれるコマンド pwd を使う基本コマンド ls
参考URL:http://dogandrun.hatenablog.jp/entry/2013/11/30/181606ls-lで表示したファイルの中身について
ファイルもしくはディレクトリの所有者名
ファイルもしくはディレクトリの所有者名
バイトサイズ、最終更新日時、名前
一行目はファイルならば - ディレクトリならd
以降はファイルへの権利
r:読む権利がある
w:書く権利がある
x:実行する権利がある
-:権利がない
その他知っておくと便利なこと
Linuxはファイルやディレクトリ名を指定するとき、途中まで入力した状態でTABキー押すと予測してくれる
終わり
以上、超簡単なLinuxの説明になります。コマンドはオプション色々ありますが、今回は割愛。時間あったら詳しく書きます。また、その他基礎コマンドについても書いていきたいと思います~
初歩的なことなので書くのためらったのですが、誰かのお役に立てればと思い載せます。
暖かい目で見守ってください。ありがとうございました。
- 投稿日:2021-01-29T15:46:44+09:00
Permission Denied Error Doker Laravel
Dockerでlaradockを導入し、laravelを起動したとき、以下のエラー文が出ました。
docker The stream or file "/var/www/storage/logs/laravel.log" could not be opened in append mode: failed to open stream: Permission denied
chown -R www-data:www-data /var/www
chmod -R 777 /var/www/storage
権限を変更してあげると、無事にlaravelを表示することができました。
以下のサイトを参考に、しました。
https://stackoverflow.com/questions/48619445/permission-denied-error-using-laravel-docker
- 投稿日:2021-01-29T15:10:49+09:00
GCP上のRedhat でInfoScaleを用いてクラスターを構築しよう
はじめに
InfoScale は、Google Cloud Platform(以降GCPと記述)上のRHELでのクラスタリングを保証しています。ただし、顧客要件によって実装パターンが複数存在します。そして、InfoScaleをGCP上のRHELに構築する場合は、以下2つのポイントに留意する必要があります。
1.どのような要件を満たすために、どのような構成のクラスターを構築するか
2.オンプレとは異なるInfoScaleの前提条件
本記事では、上記2つのポイントを中心に、GCP上でクラスタリングが必要になった場合に、要件毎の最適なソリューションと、実装上の注意点を説明します。どのような要件を満たすために、どのような構成のクラスターを構築するか
同一Zone内で、共有ディスクを用いたクラスター
もっとも単純なクラスター構成です。クラスターの稼働系と待機系を同じZoneに配置するので、Zone全体障害時のクラスターによるリカバリーの必要がない要件や、データ量が膨大且つ高いI/Oパフォーマンスが必要で共有ディスク構成が必須の場合に用います。同一サブネット内ですので、GCPのPrivateIPをクラスターのノード間で切り替える事も可能です。Active-Standby型のクラスターで、切り替え時間が3分以上かかっても大丈夫な要件に向きます。
この構成は、Zone全体障害時はサービス停止になるので、ベリタスとしてはあまり推奨いたしません。異なるZoneを跨いだ、ローカルディスクの仮想ミラーリングを用いたクラスター
GCPでは、異なるZoneを跨いで単一のサブネットを構成する事ができます。従ってZone跨ぎでもPrivateIPを切り替えるクラスターは可能です。しかし、異なるZoneに属するインスタンス間で同じブロックストレージを共有する事はできません。このような場合のクラスタリング要求に対応するための解決策の1つが、ローカルディスクの仮想ミラーリングを用いたクラスター構成です。InfoScale独自のSDS機能により、各インスタンスのローカルディスクを仮想共有してミラーリングし、その上にクラスターファイルシステムを実装し、Zoneを跨いだクラスター切り替えを可能にします。ただし、仮想ミラーリングを用いる関係上、稼働系と待機系を結ぶクラスター専用ネットワークの遅延時間は数ミリ秒以内が求められますので、リージョンを跨いだ構成は現実的ではありません。この構成では、クラスターノード間のローカルディスクのデータを仮想ミラーリングにより同期し、PrivateIPをクラスターのノード間で切り替える事で、Zone跨ぎのクラスタリングを実現する事ができます。
詳しい実装方法については、ベリタスよりホワイトペーパーが公開されています。是非こちらをご覧ください。異なるZoneを跨いだ、レプリケーションを用いたクラスター
前述の構成では、稼働系と待機系を結ぶクラスター専用ネットワークの遅延時間に制限がありますので、Zone間の遅延時間が大きい場合は現実的ではありません。このような場合のクラスタリング要求に対応するための解決策が、レプリケーションを用いたクラスターです。InfoScale独自のSDS機能により、各インスタンスのローカルディスクをレプリケーションします。この構成では、クラスターノード間のローカルディスクのデータをレプリケーションにより同期する事でZone跨ぎのクラスタリングを実現する事ができます。レプリケーションは同期モードと非同期モードを選択できますので、同期モードのみ可能な仮想ミラーを用いたクラスターよりは柔軟性が高いと言えます。
この構成は、Zone間の遅延時間が大きい場合だけでなく、リージョン跨ぎのクラスターにも応用が可能です。オンプレとは異なるInfoScaleの前提条件
GCP上にRHELインスタンスを構築すると、一部オンプレ上と異なる挙動になります。InfoScaleを構築する場合、その違いによって構築が上手くいかない事があります。以下の点に注視してください。
RHELのインスタンスにsshを用いてrootでパスワードを用いてログインできること
InfoScaleのインストール時は、1台のノードからpush installを行いますが、その際に他のノードにsshを用いてrootでパスワードを用いてログインします。GCP上でdeployされるRHELは、デフォルトでsshを用いてrootでパスワードを用いてログインできるようになっていません。/etc/passwdや/etc/ssh/sshd_configを変更してパスワードを用いてrootでsshができるようにしてください。yumが使用できること
GCP上でdeployされるRHELには、InfoScaleが必要とするパッケージの幾つかがインストールされていません。そのため、InfoScaleのインストーラーの中でyumを用いて必要なパッケージをインストールします。適切なネットワークの設定(クラスターを構築するインスタンスにパブリックIPをアサインするのは一般的ではないので、Cloud NAT を設定し、それを経由してyumのサーバーにアクセス等)もしくはyumのリポジトリの設定を行い、yumが使用できるようにしてください。Python SDK for GCPが使用できること
InfoScaleは、クラスタリングに必要なネットワークやディスクの管理のためにPython SDK for GCPを使用してIAM経由で必要な制御を行います。InfoScaleがインストールされるノードにPython SDK for GCPをインストールし、IAM経由でIPアドレスやブロックストレージをコントロールできるようにしてください。swapがあること
GCP上に配備されるRHELには、swapがありません。InfoScaleのインストール時は、swapが必須ですので、ファイルを作成してswapに割り当ててください。おわりに
如何でしたでしょうか? 今回の記事と記事中に紹介したホワイトペーパーによって、GCP上のRHELでクラスターを構築する際のハードルはかなり下がったのではないでしょうか?
商談のご相談はこちら
本稿からのお問合せをご記入の際には「コメント/通信欄」に#GWCのタグを必ずご記入ください。
ご記入いただきました内容はベリタスのプライバシーポリシーに従って管理されます。その他のリンク
【まとめ記事】ベリタステクノロジーズ 全記事へのリンク集もよろしくお願いいたします。
- 投稿日:2021-01-29T08:25:31+09:00
32bitのポケットPCにGentooを入れてみたい人生だった (WIP
Macはいいんだが、度々思うことがある。
フルカスタムできるLinuxがほしい。
Archが良いんじゃないか?
32bitに対応してない。
Linuxはどこも64bitのみの配布に切り替わっていくらしい。よしわかった。Gentooを入れよう(決意)。
ネタバレ:
途中で心折れてとまりました。いつか続きやる
手順としては終わっているので、初めて入れる場合の参考にはなるかもと思い投下。環境
余ってるマシン
- VAIO Pシリーズ VGN-P90NS
もともとVista入ってたポケットPC。 ポインティングデバイスはトラックポイント。いいゾこれ。インストール手順
手持ちのマシンが32bitだったため、基本的にこちらの公式wikiの手順どおりにすすめていく。
なお、shellについてはプロンプトを
$
としているが、実際はrootユーザで行っているので、あしからず。インストールディスク用意
iso拾ってくる
Gentooはビルドの段階に
Stage
というものがあり、本当にベースから組みたい人はStage1
からビルドするらしい。
よしわかった。ほとんど揃ってるStage3
でインストールしよう。(逃げ腰)USBメモリに焼く
このあたり曖昧なのだが、Vaio type P はUSBからの起動の際、MBR だとうまくいくようす。
このため、ディスクユーティリティからUSBをフォーマットする時、FAT の MBR でフォーマットしている。
母艦がMacなので、漢は黙ってdd
$ diskutil list # USBらしきものを確認 # さっき見たN番を入れてアンマウント $ diskutil unmountDisk /dev/diskN # ifにはisoのパス、ofはdiskにr付き(RAW)で番号をいれる。 $ dd if=/path/of.iso of=/dev/rdiskN bs=4mブート、初期設定
vaioはF2でBIOSが開いた。
USBメモリが優先的に読まれるように変える。起動
どのカーネルでBootするか聞かれたので、F1で一覧を見せてもらい、
ひとまずgentooを選択。
ここでハードウェア類のオプションなんかをつけられる様子。まずつけないでなんとかしてみる。この後、起動の最中に一瞬だけキーボード配列を確認されるタイミングがある。
ほっとくと勝手に進んでしまうので、JPと書かれた22番を指定。jisキーボードとして認識される。
※22じゃなくなってる可能性あるので要確認ただ、できなくても後で設定ができるので、以下の通り編集。
$ vi /etc/conf.d/keymaps # エディタ初心者はnano使ったほうがいいかも # 以下のように編集して保存 ...省略... keymap="jp106" ...省略... $ rc-service keymaps restartネットワーク設定
プロンプトが立ち上がったので
ifconfig
すると、無線LANアダプタが認識されていたので以下wpa_supplicantでの設定を参照。net-setup アダプタ名
で設定をすすめる。
SSIDを一覧で表示して、旦那様どれになさいます?なんてことはないので、
Macで接続している情報を元に、
SSID、セキュリティの種類、password、を入力して接続。
ping -c 3 google.com
として疎通を確認する。
ただ、8.8.8.8
は飛ぶが、google.com
は飛ばない。
原因はipv6だった模様。ipv6のせいではなかった。
wpa_supplicantで接続するとdhcpまでしっかり行い、ちゃーんとつながってくれた。
wpa_supplicantでの設定についてはArchWikiでかんたんな方法が書いてあるのでこちらでやる
https://wiki.archlinux.jp/index.php/Wpa_supplicant最近のwifiはだいたいWPA2とかの暗号方式かと思うので、net-setupでは役不足。このあたりはArchwikiのネットワークの設定あたりがわかりやすいので参照のこと。
https://wiki.archlinux.jp/index.php/ワイヤレス設定追記: DNSが疑われる場合はdhcpcdあたりで
dhcpcd <your network interface>
するとDHCPサーバにローカルipやらdnsのipやら教わってきてくれる。一応、以下は備忘録で残す。
標準でipv6が有効になっていて、ipv4しか対応していない弊家回線では使えなかったらしい。
/etc/sysctl.d/
に以下の内容でファイルを作成、ipv6をdisableしてくる。/etc/sysctl.d/disable_ipv6.confnet.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1$ sysctl -p /etc/sysctl.d/disable_ipv6.conf # 設定読み込みこれで
ifconfig
して、inet6
のアドレスが消えていればOK※余談
最初、なにを思ったか-p
のオブションをQだと空目して、syscrl: cannot stat /proc/sys//etc/sysctl.d/...
とエラーが出て、パスの設定とかマウントとか色々疑って時間を浪費してしまった。恥ずかしい。ディスクの準備
http://note.kurodigi.com/gentoo-uefi-install/
↑GPTで進めてみている。パーティション切りもこの方法を真似るパーティション初期化、設定
ハードディスクがどこにあるか、
df -h
とかparted -l
とかで確認。
追記:# lsblk # ざっくりディスク名やどのtype(lvmとかdiskとかpartitionとか)とかを表示してくれる # df -h # 容量みるとき使う # lvscan # lvmなら大体、余計なものが刺さってなければ
/dev/sdb/
にあるかも。今回、マザボがUEFI Readyとなっていたので、GPTでインストールしてみる。
以下の作業で元のディスクは読めなくなる。$ parted /dev/sdb # 今回はsdbだった (parted) mklabel gpt # YesとかIgnoreしてすすめる。 (parted) print # パーティションテーブルがgptになってるか確認この後パーティションテーブルを切っていくが、面倒なので以下の設計も参考に。
Gentooをインストールして、XmonadでGUI環境を整える - Qiitaパーティション構成(MiB単位)
- grub: 1 - 3 (2MiB)
- boot: 3 - 131 (128MiB)
- swap: 131 - 16515 (16GiB)
- root: 16515 - -1 (のこり全部)追記: ちなみに、このあと数台ArchLinuxをインストールした覚えだと、boot領域がこれだと少々少ない気がする。念の為に200MiBよりはあるとよさそうかなと思う。今使っているArchは余裕もって512MiB取ってる
更にいうとswapについてはメモリが16GBあるマシンを使用しているため、正直いらないと思って使っていない。最悪欲しくなればパーティションではなくswapファイルとして使えばいいし、この柔軟性を確保したければパーティションをLVMで切るのが安牌なきがする。ここでは切っていないが、最近Linuxマシンをセットアップする際には必ずLVMにしている。インストールの際にはGentooWikiのLVMの項を確認し、カーネルに含めるのをわすれないとよさそう。LVMだとわりとかんたんにボリュームサイズを変更したり分けたりくっつけたりできるので、よさそう。例としてはこんな感じ↓
https://densan-hoshigumi.com/server/lvm-change-home-root以下、公式のインストール手順通り進める。
# 単位をMiBに (parted) unit mib # GRUB2用のブートローダ領域 (parted) mkpart primary 1 3 (parted) name 1 grub (parted) set 1 bios_grub on # grub用のフラグを立てるpartedプロンプトで
同様にほかも進める。(parted) mkpart primary 3 131 (parted) name 2 boot (parted) set 2 boot on # bootフラグ (parted) mkpart primary 131 16515 (parted) name 3 swap (parted) mkpart primary 16515 -1 (parted) name 4 rootfs (parted) print # 確認 (parted) q # quitしておくファイルシステムの適用
パーティションを分け終わったのでファイルシステムを適用していく。
fdisk -l
すると、さっき切ったパーティションのパスが見える。
ので、これを参考に、最初にswap領域。$ mkswap /dev/sdb3 $ swapon /dev/sdb3 $ free -g # 認識されているか確認その他の領域も適用していく。今回はどちらもext4で。
$ mkfs.ext4 /dev/sdb2 # boot領域 $ mkfs.ext4 /dev/sdb4 # root領域追記: bootでコケるのもアレなので、最近はbootもFAT32
mkfs.fat -F32 /dev/<yourdevice>
でフォーマットしてるパーティションのマウント
rootパーティションを
/mnt/gentoo
にマウントする。$ mount /dev/sdb4 /mnt/gentoo
tarballの展開と準備
stage3 tarballのダウンロード
マウントしたディスクに入る
cd /mnt/gentoo/
コマンドラインのブラウザを使い、以下からstage3のtarballを落とす。$ links https://www.gentoo.org/downloads/mirrors/
JPのミラー配布場所に飛び、
releases/x86/autobuilds/
内に。
とりあえず、i686のbuildを見つけたので、d
でダウンロード。
終わったらq
でブラウザを終了する。tarballを展開する
$ tar xpvf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner今回落としたファイルは
tar.bz2
ではなくtar.xz
だったので、公式のコマンドから修正。コンパイルオプションの設定
公式「エディタはnanoを使います」
小生「ヤダ。小生viがいい。」Gentoo最適化のためにPortageパッケージマネージャの設定をしていく。
/etc/portage/make.conf
が設定として使われるので、そこに記入していく。$ vi /mnt/gentoo/etc/portage/make.conf
(viの使い方は面倒なので、nanoを使うことをおすすめ。)
以下暫定だが、設定をしてみる。
...省略... COMMON_FLAGS="-O2 -march=native -pipe" # ↑もともとはmarchはi686だが、native指定で現在のシステムのアーキテクチャを指定してくれるので、一応書き換え。 ...省略... MAKEOPTS="-j2" # ↑パッケージインストール時の並行実行数。コア数+1がおすすめされているので、2で。Gentooのベースシステムのインストール
サーバー、リポジトリの設定
ソースを落とす速度を考え、ミラーサーバーを選択しておく。
公式のmirrorselect
コマンドでインタラクティブにえらぶ。$ mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.confスペースでチェックがつけられるので、jaistのサーバーを選択しておいた。
次に ebuildリポジトリの設定。
# おそらく無いので以下ディレクトリを切って、Portageのリポジトリファイルをコピー $ mkdir --parents /mnt/gentoo/etc/portage/repos.conf $ cp /mnt/gentoo/usr/share/portage/config/repos.conf /mnt/gentoo/etc/portage/repos.conf/gentoo.confGentooの環境に入る
の前にDNS情報のコピー
$ cp -L /etc/resolv.conf /mnt/gentoo/etc/必要になるファイルシステムのマウント。
$ 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これ、公式ではprocを
--types
オプションで指定してるんだが、/etc/fstab
に設定がないよ、とか怒られて、後々うまくいかない。
Gentooのコミュニティとか漁ってたら省略系の-t
オプション使ってるのを目にして、ダメ元でやったらうまくいった。さて次。chrootしてGentooの環境をrootにして、
profileを読み込んで、プロンプトをちょっと変えておく。$ chroot /mnt/gentoo /bin/bash $ source /etc/profile $ export PS1="(chroot) ${PS1}" # なんでもいいけど、わかるようにだけ。ここがようやくセーブポイント。
ここからは中断してもルートのパーティションをマウントした後、mkswapとかswaponとか、DNS情報をコピーするあたりから戻れる。ブートパーティションのマウント
あとでカーネルのビルドと、ブートローダーのインストールでつかう。$ mount /dev/sdb2 /boot
Portageの設定
パッケージマネージャの設定
リポジトリ関係
ebuildリポジトリのスナップショット(Portageのツリーってことか)をアップデート。
以下のコマンドではrsync(873番ポート)が使えない環境向けに、web(80番ポート)で落としてくるものらしい。
要らないけど一応更新掛けて、少し待つ。$ emerge-webrsync
プロファイルの設定
$ eselect profile list
上記リストから選択。
とりあえずデスクトップ環境は要らない(時間もかかってしまう)ので、そのままなにもないやつを選択。
(今回は[1]番目のdefault/linux/x86/17.0 (stable)
を選択)$ eselect profile set 1
@World
の更新world setを更新
参考: world setを使おう - 突破してみる?これでベースシステムの構築ができるらしい。
結構時間食うので、余裕を見て実行されたし。$ emerge --ask --verbose --update --deep --newuse @worldtmuxとvimのインストール
少しずついつもの環境に近づけていく。
$ emerge -av tmux $ tmux new -s hogepiyoセッション名続けてvimも。参考にした先ではデスクトップ環境向けの部分をガン無視して(USEに
-X
)ビルドしていたので、真似る。
この処理も少しかかるので待機。$ USE="-X" emerge -av vimUSEフラグの編集
これ、ちょっと曖昧なのだが、Portageパッケージマネージャでビルドする際にデフォルト使うフラグを、
/etc/portage/make.conf
にUSE="hoge -piyo"
などと付けておけるものの様子。
まだどれが必要か、というのがわからないので、ひとまず見ていて必要そうだと思ったもののみ記述してみた。
あと、ローカライズ設定もここからできるらしいのでついでに。/etc/portage/make.confUSE="unicode git gzip mp3 ogg wifi networkmanager vim-syntax" ... LINGUAS="ja" L10N="ja"タイムゾーン、ロケール
タイムゾーン、ロケールを日本にする。
ロケールは複数選択できるそうだが、utf-8のロケールを最低1つは入れる必要があるとのこと。
その他は使うとは思えないので、en_US.UTF-8 UFT-8
のみ選択
なんでjpでないかというと、後でところどころ日本語になったときに、豆腐文字化けして(▪▪▪)悲しいので。$ ls /usr/share/zoneinfo # Japanがあったので今回はそれ $ echo "Japan" > /etc/timezone $ emerge --config sys-libs/timezone-data # 設定を適用/etc/locale.gen... # 以下コメントを取った en_US.UTF-8 UTF-8 ja_JP.UTF-8 UTF-8$ locale-gen # さっきのファイルに従ってロケールを生成 $ eselect locale list # en_US.utf8の番号を控える $ eselect locale set 2 # 今回は[2]となっていた環境をリロードする
$ env-update && source /etc/profile $ export PS1="(chroot) ${PS1}" # これはプロンプトの識別用に一応。カーネルのインストール
長い...まだカーネルだ...
ブートローダーまでながい...カーネルソースをインストール
カーネルのソースをインストールするそうです。
ここもまた、選択のGentooといったところか。
gentoo-sourcesパッケージを使うことが推奨されているので素直に従う。
これまた少々時間がかかる。$ emerge -av sys-kernel/gentoo-sources # /usr/src 以下にインストールされていることを確認 $ ls -l /usr/src/linuxさて、この次は2つのアプローチがあるそうだ。
1.カーネルを マニュアル で設定およびビルドする。
2.Linuxカーネルを 自動的 にビルド・インストールするgenkernelを使用する。おお、自動設定が有るんですか。それではその...
ここ (Gentoo公式Wiki) では、環境を最適化するのに最も適した "マニュアル設定" をデフォルトとして説明します。
おし、やったろみゃーか(血涙)
楽しようとしてgenkernel使ったら、丸1日かけてビルドしたものがコケて心折られたとは言っていないカーネルをマニュアルでインストール
この
Gentoo Install Battle™
に於いて、マニュアルにできるところがあるならば、マニュアルでするしか無いのです。
それがGentooにドハマリした先駆者への礼儀というもの。(なにが)カーネルのマニュアル設定は難しいと言われるが、幾度かやってみればそんなことはない(Gentoo公式Wiki談)んだそうだ。
そのとき、ハードウェアの構成を知っておくのが大事、とのことで、
lspci
などのツールを以下でまとめてインストールしておく。$ emerge -av sys-apps/pciutilsmenuconfigを実行して、インストールするカーネルをカスタマイズする。
$ cd /usr/src/linux $ make menuconfigこのあたりはこの記事を参照させていただく。
まず走っているカーネルから設定を入手できるよう設定。一旦saveして終わる。
チェックをつけるにはy
menuconfigGeneral setup ---> <*> Kernel .config support [*] Enable access to .config through /proc/config.gzということでハードをすべて調べ上げるべきなのだが、
まずはネット関係のみ確実に有線、無線LAN
$ lspci -k | grep -A 2 -i ethernet Kernel driver in use: sky2vimを使い、
sky2
を検索
(vimの初期設定だと大文字と小文字の違いを認識してしまうので:set ignorecase
してからの/sky2
).config... CONFIG_SKY2=y # CONFIG_SKY2_DEBUG is not setDEBUGはついていないが、一応SKY2はついているので良しとする。
こんな感じで、探して行くのだが、どうやら
.config
の並びとmake menuconfig
の並びが一致するようなので、
大まかなデバイスの種類(EthernetとかNetworkとか)がわかれば、あたりをつけて検索できそう。
まず起動したら今度ビルドし直そう。そして、カーネルのビルドとインストール。
$ make && make modules_install $ make installで、インストールまで完了。
genkernelで楽する(できませんでした。)以下は失敗したものなので、あくまで手順の記録として。
genkernelでは、最初にGentooのインストールディスクをブートした時と同様に、
自動で判断してカーネルを設定してくれる。
選択のGentooの良さをぶち壊すインストール方法だが、他に勉強しなければならないことがあるので、あしからず。
これはこれで結構インストールに時間がかかった。$ emerge -av sys-kernel/genkernelとしたのだが、どうやらインストールされていない様子。
何故かと思って調べていたら、Portageにupdateが来ており、それをしていなかったからと言うことのようだ。
ご丁寧にIMPORTANT!
と書いていたアップデートを見ていなかった...
調べたフォーラムでは、IMPORTANT is Important.
という、ありがたいお言葉があったので、肝に銘じることにする。
さて、気を取り直して、公式を参考に
etc-update
を行い、再度genkernel
のインストールを行った。つぎ、
/etc/fstab
を編集し、/boot
のマウントポジションを記述しておく。/etc/fstab/dev/sda2 /boot ext2 defaults 0 2カーネルソースをコンパイルする。
ただし、この方法だと何もかもコンパイルするので、小生の低スペ&シングルコアPCでは膨大な時間がかかった。$ genkernel all
コケました
ビルドに失敗していたようで、結局手動でやりました。
以下続き。initramfsのビルド
今回ファイルシステムは分けていないのだが、
勉強のためにブート時のRAMベースのファイルシステムをビルドしてみる。genkernelのインストールは上記のボツ見出しを参考に...
$ genkernel --install initramfsおわったと思ったら
... * WARNING... WARNING... WARNING... * Additional kernel cmdline arguments that *may* be required to boot properly... * With support for several ext* filesystems available, it may be needed to * add "rootfstype=ext3" or "rootfstype=ext4" to the list of boot parameters. ...最後ちょっと気になる表示があったが、調べてみてもそのままで問題になってる人がいなかったのでスルーしておく。
ファームウェアのインストール
一応、インストール後に無線が使えないことが無いように、大凡の無線に対応するファームウェアを入れておく。
$ emerge -av sys-kernel/linux-firmware実際、入っていたがビルドが数日前の物だった(このインストール自体かなりかかってやっている)ので、一応更新された。
fstabの設定
パーティションに名前をつけて、簡単に指定できる、というものがあるので、使ってみる。
$ e2label /dev/sdb2 boot $ e2label /dev/sdb4 root $ e2label /dev/sdb2 # bootと表示されればOKswapは
swapon
で。swapし直す。$ swapoff /dev/sdb3 $ mkswap -L swap /dev/sdb3 $ swapon LABEL=swapfstab (
/etc/fstab
)を書き換える。/etc/fstabLABEL=boot /boot ext4 noauto,noatime 1 2 LABEL=root / ext4 noatime 0 1 LABEL=swap none swap sw 0 0
/etc/conf.d/hostname
にホスト名(hostname
)、/etc/conf.d/net
にドメイン(dns_domain_lo
)をよしなに。
/etc/hosts
にも同様に上記を設定。システム用ツール
それぞれ入れて設定をする。
ログ
$ emerge -av metalog $ rc-update add metalog default #起動時立ち上がるようにcron
/etc/crontab
でcronを使えるように設定しておく。$ emerge -av fcron $ rc-update add metalog default $ crontab /etc/crontabシステム内の検索高速化のため、インデックスを張ってくれる locate コマンド
参考にしていた記事でmlocateパッケージで入れていたのでついでに。$ emerge -av mlocateDHCPクライアント
$ emerge -av dhcpcdあと、公式で推奨しているOpenRCのネットワーク設定スクリプトも。noreplaceオプションも付いているので注意。
$ emerge -avn net-misc/netifrcgrub(ブートローダ)のインストール
ようやく...GRUBまできた...USB起動から開放される...
grubのインストール後、設定ファイルまで生成する。
$ emerge -av grub $ grub-install /dev/sdb $ grub-mkconfig -o /boot/grub/grub.cfg最後に再起動。grubから起動するか...
所感、勉強になったこと
initシステムってなんぞ
もともとGentooではOpenRCというものが使われるらしいが、Portageのプロファイル選択でsystemdを選択することもできる。
このinitはLinuxの機能で、Linuxのランレベルに応じて/etc/init.d/
内のプロセスを実行するというもの。参考: Linuxシステムのブート
PortageのUSEフラグ
Portageでは、環境ごと要る要らないという要素をUSEフラグで管理しているようで、
環境ごとに、X Window向けのコードが要らない、とかUnicodeほしい、とかのフラグを立てると、ビルド時に自分の好きなようにカスタマイズできる、ということらしい。
さすが、選択のGentooである。GRUBからの起動、fstabの設定
GRUB自体はすんなりインストールできていて、USBなしで単体のブートはできたものの、
!! Could not find the root block device in UUID= ... !! ...と表示されて、起動の途中で止まってしまった。
このままshellが開けたので/etc/fstab
が原因だと思ってviで開いたが
これ、おそらく初回にfstabの設定を中途半端にしていたのが原因で、今後の展望
- キー配列の変更 (CapsLock ⇔ Ctrl)
参考
ほぼ @YoshikuniJujo さんの記事ばっかり
パクって参照してました。大変参考になりました。
- 投稿日:2021-01-29T01:10:04+09:00
最近の仮想マシンはTickタイムも案外正確で感心した次第
1年に1回ぐらい、「そういえば仮想マシンではTickタイムが不正確だから、パフォーマンス試験を仮想マシン上の時計で計るのは不適切なんだったか?」と思いだすものの、実際どのくらい不正確なのかねというのは未検証で10年ぐらい過ごしてきたのだが、今回は簡単に確認するところまではたどり着き、認識を新たにした。
思いのほか正確である。constant_tscとかnonstop_tscとか、難しいことはわからないが最近の進歩の結果らしい。
要らん心配事が減るのは大変良いことだ。検証の仕方
1.手元のWindows 10 PC(物理)で現在時刻を表示する。
2.Windows 10 PCからcurl.exeで、Linux仮想マシン上のプログラムにhttpでアクセスする。プログラムはsleepで10分(600秒)待った後、応答を返す。
3.再度、手元のWindows 10 PC(物理)で現在時刻を表示する。
4.Windows 10 PCからcurl.exeで、Linux仮想マシン上のプログラムにhttpでアクセスする。プログラムはアクセス開始からtickカウントが10分(600秒)増えたら、応答を返す。
5.最後にまた、手元のWindows 10 PC(物理)で現在時刻を表示する。
Windowsで実行する具体的なコマンドは以下。
> powershell "get-date; curl.exe http://<仮想マシンのIPアドレス>/sleep; get-date; curl.exe http://<仮想マシンのIPアドレス>/ticktime; get-date;Linux仮想マシン上で実行し、httpリクエストを受け付けるプログラム。Ruby+sinatra。
time.rbrequire "sinatra" set :bind => "0.0.0.0" set :port => "80" get "/sleep" do res = "" res += Time.now().to_s() + "\n" res += `date` res += "sleep\n" `sleep 600` res += Time.now().to_s() + "\n" res += `date` end get "/ticktime" do res = "" res += Time.now().to_s() + "\n" res += `date` res += "ticktime\n" start = Process.clock_gettime(Process::CLOCK_MONOTONIC) while (Process.clock_gettime(Process::CLOCK_MONOTONIC) - start) <= 600.0; end res += Time.now().to_s() + "\n" res += `date` end検証1:Windows 10 PC&VMware Workstation上のCentOS 8
Windows 10 PC(物理)で動作するVMWare Workstation 16 Proに、CentOS 8.3のゲストOSを導入して実行した結果。
2021年1月29日 0:40:17 → 「1.」の時間 2021-01-28 10:40:16 -0500 Thu Jan 28 10:40:16 EST 2021 sleep 2021-01-28 10:50:16 -0500 Thu Jan 28 10:50:16 EST 2021 2021年1月29日 0:50:17 → 「3.」の時間 2021-01-28 10:50:16 -0500 Thu Jan 28 10:50:16 EST 2021 ticktime 2021-01-28 11:00:16 -0500 Thu Jan 28 11:00:16 EST 2021 2021年1月29日 1:00:17 → 「5.」の時間一応、OSで取得した/proc/cpuinfoのCPUフラグ。
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc cpuid pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch cpuid_fault invpcid_single ssbd ibrs ibpb stibp ibrs_enhanced fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 xsaves arat md_clear flush_l1d arch_capabilities検証2:Amazon Lightsail上のCentOS 7
Sleepのところで一秒ずれるが、プログラム起動やhttpのオーバーヘッドもあるし、許容出来る。
2021年1月28日 23:49:21 → 「1.」の時間 2021-01-28 14:49:21 +0000 Thu Jan 28 14:49:21 UTC 2021 sleep 2021-01-28 14:59:21 +0000 Thu Jan 28 14:59:21 UTC 2021 2021年1月28日 23:59:22 → 「3.」の時間 2021-01-28 14:59:21 +0000 Thu Jan 28 14:59:21 UTC 2021 ticktime 2021-01-28 15:09:21 +0000 Thu Jan 28 15:09:21 UTC 2021 2021年1月29日 0:09:22 → 「5.」の時間flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc rep_good nopl xtopology eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm fsgsbase bmi1 avx2 smep bmi2 erms invpcid xsaveopt検証3:IBM Cloud(Classic)上のRHEL 8
LocationをTokyoとして仮想マシン作ったのに時刻がCSTとはこれ如何に、という事に気が付いたが、まあ、時間の精度は申し分ない。
2021年1月29日 0:00:14 → 「1.」の時間 2021-01-28 09:00:13 -0600 Thu Jan 28 09:00:13 CST 2021 sleep 2021-01-28 09:10:13 -0600 Thu Jan 28 09:10:13 CST 2021 2021年1月29日 0:10:14 → 「3.」の時間 2021-01-28 09:10:14 -0600 Thu Jan 28 09:10:14 CST 2021 ticktime 2021-01-28 09:20:14 -0600 Thu Jan 28 09:20:14 CST 2021 2021年1月29日 0:20:14 → 「5.」の時間flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush acpi mmx fxsr sse sse2 ht syscall pdpe1gb rdtscp lm constant_tsc rep_good nopl cpuid pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch cpuid_fault invpcid_single ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt clwb xsaveopt xsavec xgetbv1 xsaves pku ospke md_clear flush_l1d