20210129のLinuxに関する記事は10件です。

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-MaxQ

Alter Linuxのインストール

公式ページからイメージを落とし、balenaEtcherなどでUSBメモリに焼く。その後、UEFIから起動して、インストーラーに従って作業を進める。
以上でインストールは終わり(めっちゃ簡単)。

VSCode

CommunityのOSS版と、AURの公式ビルド版の2種類が存在する。
(OSS版の初期設定では、拡張機能の検索先が公式版と異なるらしい。詳細はこちら)

[OSS版]
$ sudo pacman -S code
[公式ビルド版]
$ yay -S visual-studio-code-bin

OSS版については、Alter Linux付属のパッケージマネージャー(GUI)でもインストールできる。

Docker

こちらもpacmanかGUIのパッケージマネージャーからインストール可能。

$ sudo pacman -S docker docker-compose docker-machine

GUIの場合は、「docker」で検索すると上記のパッケージが出てくるため、それぞれ選択してインストール。
image.png
また、VScodeの拡張機能「Remote Container」を使う場合は、ログインユーザーをdockerグループに追加する必要がある。
dockerグループへのユーザー追加は、セキュリティが低くなる恐れがある(詳細はこちら)ようなので注意。

$ sudo gpasswd -a {ログインユーザー名} docker

Nvidiaドライバー

インストール

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-qt

qtはGUIの設定やアイコンを追加するパッケージ。

Timeshift

スナップショットを作成し、システムのバックアップを行うソフト。AURからインストールできる。

$ yay -S timeshift

GPUのドライバー関係をいじっていると正常に起動しなくなることがあったが、これを使うことで簡単に巻き戻すことができた。
起動時や一定期間ごとに自動でスナップショットを作成してくれるため、自身で作成しなくても安心できる点も素晴らしい。

日本語入力の設定

デフォルトで日本語入力にはMozcが使われている。筆者の環境ではアプリケーションメニューにMozcの設定が見当たらなかったが、以下のコマンドでGUIの設定メニューを呼び出すことができた。

$ /usr/lib/mozc/mozc_tool --mode=config_dialog

最後に

Alter Linuxは、Arch Linuxのインストールの複雑さが解消され、Ubuntuなどと同じようにインストーラーで簡単にインストールできた。その上、Arch Linuxの豊富なリポジトリも利用できるため、ソフトやパッケージのインストールもスムーズだった。また、一部のアプリに関してはAlter LinuxのGUIアプリケーションからインストール可能で信頼性が高い。総じて非常に使いやすく、設定が容易なディストリビューションだった。
今後環境に変化があれば随時追記していく予定。

参考サイト

Alter Linux公式サイト
Arch Wiki

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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と書き換えること。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

小技の寄せあつめ

これは、何?

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.ui

sshでログインする際に、ログイン先のディレクトリを変更(2021.1.31追加)

% ssh -X raspi4 -t "cd /home/pi/share; bash --login"

sshログイン時に、タイムアウトを防止(2021.1.31追加)

~/.ssh/configに、以下を追加。

ServerAliveInterval 30

Raspberry Pi編

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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.html

CentOS7・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 ...
----
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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 share

mdsの自動展開を無効

自動展開を無効にしておかないとノードに意図した役割を持たせることができません。(勝手にmdsが展開されます。)
自動でやってくれるのはありがたいのですが、今回はノード毎に役割を決めているので無効化しておきます。

cephadm shell
  ceph orch apply mds share --unmanaged

mds daemonの数を指定

cephadm shell
  cceph fs set $shareName max_mds 3

mds 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-mds21

dashboardの確認(cephFSボリューム)

dataとmetaのボリュームがあれば問題ありません。device_health_metricsは自動生成されました。
01.PNG

dashboardの確認(mds)

Ranksにあるmdsが稼働中のものです。StandbysはRanksにあるmdsが何らかの理由で止まった場合にアクティブになり、Ranksに入るようです。
02.PNG

おわりに

これでcephの設定は完了です。あとは作ったボリュームをsambaで公開すればwindows等からも使えるようになります。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

超初心者向けLinuxの基礎(ファイル操作関連)

Linuxとはなんぞや

オペレーティングシステムの一種で主にCUIで操作します。

GUI

ユーザへの情報提供にグラフィックを多用
利点:直感的で操作性がよい
Windows,MacOS

CUI

ターミナルと文字でのやりとり
利点:開発が楽、ネットワーク負荷低い、ファイルの細かい操作性機械学習と相性がよい(と思う)

Linux基礎コマンド(ファイル操作関連)

CD :ディレクトリの異動

ls :ファイルやディレクトリの一覧出力

mkdir :ディレクトリの作成

rm 名前 :指定したファイルを削除

rmdir 名前 :指定した空のディレクトリを削除

基本コマンド CDとディレクトリの概念

image.png
CDを使ってディレクトリの移動を行います。図でのようにhomeの下のディレクトリにいるとします。

image.png

CD ../ と打つことで親ディレクトリ、つまりhomeに移動できます

相対パス

現地点からの相対的な位置指定のこと
image.png
bbbに移動したいとき、cd ../aaa/bbb

絶対パス

ルートディレクトリからの絶対的な位置指定
bbbに移動したいとき cd /home/aaa/bbb

比較的近い位置に移動する場合は相対パス
絶対パスは今自分がどこにいるか関係なく飛べる利点がある
※自分が今どこにいるか迷子になった時絶対パスで返してくれるコマンド pwd を使う

基本コマンド ls

image.png
参考URL:http://dogandrun.hatenablog.jp/entry/2013/11/30/181606

ls-lで表示したファイルの中身について

image.png
ファイルもしくはディレクトリの所有者名
image.png
ファイルもしくはディレクトリの所有者名
image.png
バイトサイズ、最終更新日時、名前
image.png
一行目はファイルならば - ディレクトリならd
以降はファイルへの権利
r:読む権利がある
w:書く権利がある
x:実行する権利がある
-:権利がない
image.png

その他知っておくと便利なこと

Linuxはファイルやディレクトリ名を指定するとき、途中まで入力した状態でTABキー押すと予測してくれる

終わり

以上、超簡単なLinuxの説明になります。コマンドはオプション色々ありますが、今回は割愛。時間あったら詳しく書きます。また、その他基礎コマンドについても書いていきたいと思います~
初歩的なことなので書くのためらったのですが、誰かのお役に立てればと思い載せます。
暖かい目で見守ってください。ありがとうございました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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分以上かかっても大丈夫な要件に向きます。
GCP_InfoScale_RHEL_GoogleDisk_PrivateIP.jpg
この構成は、Zone全体障害時はサービス停止になるので、ベリタスとしてはあまり推奨いたしません。

異なるZoneを跨いだ、ローカルディスクの仮想ミラーリングを用いたクラスター
GCPでは、異なるZoneを跨いで単一のサブネットを構成する事ができます。従ってZone跨ぎでもPrivateIPを切り替えるクラスターは可能です。しかし、異なるZoneに属するインスタンス間で同じブロックストレージを共有する事はできません。このような場合のクラスタリング要求に対応するための解決策の1つが、ローカルディスクの仮想ミラーリングを用いたクラスター構成です。InfoScale独自のSDS機能により、各インスタンスのローカルディスクを仮想共有してミラーリングし、その上にクラスターファイルシステムを実装し、Zoneを跨いだクラスター切り替えを可能にします。ただし、仮想ミラーリングを用いる関係上、稼働系と待機系を結ぶクラスター専用ネットワークの遅延時間は数ミリ秒以内が求められますので、リージョンを跨いだ構成は現実的ではありません。この構成では、クラスターノード間のローカルディスクのデータを仮想ミラーリングにより同期し、PrivateIPをクラスターのノード間で切り替える事で、Zone跨ぎのクラスタリングを実現する事ができます。
GCP_InfoScale_RHEL_FSS_PrivateIP.jpg
詳しい実装方法については、ベリタスよりホワイトペーパーが公開されています。是非こちらをご覧ください。

異なるZoneを跨いだ、レプリケーションを用いたクラスター
前述の構成では、稼働系と待機系を結ぶクラスター専用ネットワークの遅延時間に制限がありますので、Zone間の遅延時間が大きい場合は現実的ではありません。このような場合のクラスタリング要求に対応するための解決策が、レプリケーションを用いたクラスターです。InfoScale独自のSDS機能により、各インスタンスのローカルディスクをレプリケーションします。この構成では、クラスターノード間のローカルディスクのデータをレプリケーションにより同期する事でZone跨ぎのクラスタリングを実現する事ができます。レプリケーションは同期モードと非同期モードを選択できますので、同期モードのみ可能な仮想ミラーを用いたクラスターよりは柔軟性が高いと言えます。
GCP_InfoScale_RHEL_VVR_PrivateIP.jpg
この構成は、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のタグを必ずご記入ください。
ご記入いただきました内容はベリタスのプライバシーポリシーに従って管理されます。

その他のリンク

【まとめ記事】ベリタステクノロジーズ 全記事へのリンク集もよろしくお願いいたします。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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アダプタが認識されていたので net-setup アダプタ名 で設定をすすめる。 以下wpa_supplicantでの設定を参照。
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.conf
net.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プロンプトで print すると、grubの領域ができているのが確認できた。
同様にほかも進める。

(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.conf

Gentooの環境に入る

の前に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 @world

tmuxとvimのインストール

少しずついつもの環境に近づけていく。

$ emerge -av tmux
$ tmux new -s hogepiyoセッション名

続けてvimも。参考にした先ではデスクトップ環境向けの部分をガン無視して(USEに -X )ビルドしていたので、真似る。
この処理も少しかかるので待機。

$ USE="-X" emerge -av vim

USEフラグの編集

これ、ちょっと曖昧なのだが、Portageパッケージマネージャでビルドする際にデフォルト使うフラグを、 /etc/portage/make.confUSE="hoge -piyo" などと付けておけるものの様子。
まだどれが必要か、というのがわからないので、ひとまず見ていて必要そうだと思ったもののみ記述してみた。
あと、ローカライズ設定もここからできるらしいのでついでに。

/etc/portage/make.conf
USE="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/pciutils

menuconfigを実行して、インストールするカーネルをカスタマイズする。

$ cd /usr/src/linux
$ make menuconfig

このあたりはこの記事を参照させていただく。
まず走っているカーネルから設定を入手できるよう設定。一旦saveして終わる。
チェックをつけるには y

menuconfig
General setup --->
    <*> Kernel .config support
        [*] Enable access to .config through /proc/config.gz

ということでハードをすべて調べ上げるべきなのだが、
まずはネット関係のみ確実に

有線、無線LAN

$ lspci -k | grep -A 2 -i ethernet
Kernel driver in use: sky2

vimを使い、 sky2 を検索
(vimの初期設定だと大文字と小文字の違いを認識してしまうので :set ignorecase してからの /sky2 )

.config
...
CONFIG_SKY2=y
# CONFIG_SKY2_DEBUG is not set

DEBUGはついていないが、一応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と表示されればOK

swapは swapon で。swapし直す。

$ swapoff /dev/sdb3
$ mkswap -L swap /dev/sdb3
$ swapon LABEL=swap

fstab ( /etc/fstab )を書き換える。

/etc/fstab
LABEL=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 mlocate

DHCPクライアント

$ emerge -av dhcpcd

あと、公式で推奨しているOpenRCのネットワーク設定スクリプトも。noreplaceオプションも付いているので注意。

$ emerge -avn net-misc/netifrc

grub(ブートローダ)のインストール

ようやく...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 さんの記事ばっかりパクって参照してました。大変参考になりました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

最近の仮想マシンは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.rb
require "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
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む