Dell PowerEdge 2950でのブータブルUSBフラッシュメモリの利用

5日間ぐらい試行錯誤していたのでメモ。

やりたいこと&状況

Dell PowerEdge 2950にDebian 10をインストールしたい。しかし、DVD-RWドライブ経由でインストールDVDを読み込めない

ブータブルUSBフラッシュメモリの準備

Debian公式:DebianのCDから、debian-10.2.0-amd64-netinst.iso をダウンロードする。

USBフラッシュメモリを用意し、手持ちのLinuxにつなぐ。ddコマンドでISOファイルの中身をUSBフラッシュメモリにコピーする。

  • debian-10.2.0-amd64-netinst.isoは ホームディレクトリ(~/)にあるとする。
  • USBフラッシュメモリは /dev/sdb として認識されているとする。
% cd
% sudo if=debian-10.2.0-amd64-netinst.iso of=/dev/sdb bs=1MB

Dell PowerEdge 2950の設定

以下にあるようにBIOSで設定を変えないと、ブータブルUSBフラッシュメモリから起動したときに「isolinux.bin missing or corrupt」というメッセージがでてインストーラーが起動しない。
askubuntu.com

BIOSで設定を変える。

  • 起動画面(Dellのロゴがでているとき)でF2を押し、BIOS設定画面を起動する。
  • BIOS設定にてUSB Flash Drive Emulation TypeをAUTOからHard Diskに変更する。
  • 設定を保存してBIOS設定画面から抜ける
  • 起動画面(Dellのロゴがでているとき)でF11を押し、ブートメディアの切り替え設定を起動する。
  • ブートメディアの切り替え設定において、「Hard Disk」の項にUSBフラッシュメディアがあるので、USBフラッシュメディアからの起動を選ぶ。
  • 無事にインストーラーが起動する。

インストール時のトラブル

ネットワークカード用に別途ファームウェアが必要だった。このため、インストール時にはネットワークカードが認識できなかった。以下のファームウェアが必要であるというメッセージがインストール時に表示された。

  • bnx2/bnx2-mips-06-6.2.3.fw

以下のパッケージに含まれている。

ダウンロードしたものをUSBフラッシュメモリなどで当該マシンにコピーし、インストールする。

% su
# /usr/bin/dpkg -i firmware-bnx2_20190114-2_all.deb
# reboot

グラフィックカード用ファームウェア

dmesgで以下のエラーがでていた。

[   11.227470] [drm] Loading R100 Microcode
[   11.239127] radeon 0000:0f:0d.0: firmware: failed to load radeon/R100_cp.bin (-2)
[   11.239195] firmware_class: See https://wiki.debian.org/Firmware for information about missing firmware
[   11.239256] radeon 0000:0f:0d.0: Direct firmware load for radeon/R100_cp.bin failed with error -2
[   11.239304] [drm:r100_cp_init [radeon]] *ERROR* Failed to load firmware!
[   11.239359] radeon 0000:0f:0d.0: failed initializing CP (-2).
[   11.239413] radeon 0000:0f:0d.0: Disabling GPU acceleration

以下のパッケージをインストールする。

% sudo apt install firmware-amd-graphics
% sudo reboot

無事エラーがでなくなった。

[   11.545455] [drm] radeon kernel modesetting enabled.
[   11.545935] [drm] initializing kernel modesetting (RV100 0x1002:0x515E 0x1028:0x01B2 0x02).
[   11.546057] radeon 0000:0f:0d.0: VRAM: 128M 0x00000000F0000000 - 0x00000000F7FFFFFF (16M used)
[   11.546059] radeon 0000:0f:0d.0: GTT: 512M 0x00000000D0000000 - 0x00000000EFFFFFFF
[   11.546066] [drm] Detected VRAM RAM=128M, BAR=128M
[   11.546067] [drm] RAM width 16bits DDR
[   11.546172] [TTM] Zone  kernel: Available graphics memory: 16468426 kiB
[   11.546173] [TTM] Zone   dma32: Available graphics memory: 2097152 kiB
[   11.546174] [TTM] Initializing pool allocator
[   11.546182] [TTM] Initializing DMA pool allocator
[   11.546208] [drm] radeon: 16M of VRAM memory ready
[   11.546209] [drm] radeon: 512M of GTT memory ready.
[   11.546221] [drm] GART: num cpu pages 131072, num gpu pages 131072
[   11.566869] [drm] PCI GART of 512M enabled (table at 0x0000000036300000).
[   11.566901] radeon 0000:0f:0d.0: WB disabled
[   11.566905] radeon 0000:0f:0d.0: fence driver on ring 0 use gpu addr 0x00000000d0000000 and cpu addr 0x(____ptrval____)
[   11.566907] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[   11.566907] [drm] Driver supports precise vblank timestamp query.
[   11.566932] [drm] radeon: irq initialized.
[   11.566941] [drm] Loading R100 Microcode
[   11.596569] radeon 0000:0f:0d.0: firmware: direct-loading firmware radeon/R100_cp.bin
[   11.597286] [drm] radeon: ring at 0x00000000D0001000
[   11.597312] [drm] ring test succeeded in 1 usecs
[   11.597935] [drm] ib test succeeded in 0 usecs
[   11.598210] [drm] Radeon Display Connectors
[   11.598211] [drm] Connector 0:
[   11.598212] [drm]   VGA-1
[   11.598213] [drm]   DDC: 0x60 0x60 0x60 0x60 0x60 0x60 0x60 0x60
[   11.598214] [drm]   Encoders:
[   11.598215] [drm]     CRT1: INTERNAL_DAC1
[   11.646197] [drm] fb mappable at 0xF0040000
[   11.646198] [drm] vram apper at 0xF0000000
[   11.646198] [drm] size 1572864
[   11.646199] [drm] fb depth is 16
[   11.646200] [drm]    pitch is 2048

エラーメッセージ「kvm: disabled by bios」

www.linux-kvm.org

リンク:中日新聞「南海トラフ80%の内幕 小沢慧一(社会部)」

とても読み応えのある記事だった。中日新聞の小沢記者 Good Job!

文部科学省は、議事録のすべてを最初から公開したわけではなかった。「税金を優先的に投入」「まず、お金を取らないと」。80%の確率を採用する決定打となったこれらの衝撃的な発言が記録された議事録は当初、文科省に開示を拒否された。それも「議事録はないので、公開できない」と担当者が伝えてきたのだ。結果的に公開されたのは、他の議事録の中に、このくだりの存在を暗示する発言を偶然見つけたからだ。

(7)実力不足の地震学より)

南海トラフ80%を報じたNHKWebの例
www3.nhk.or.jp

Ubuntu 18.04LTS上でのRuby on Rails公開環境の構築

はじめに

Dell Precision 5820に標準でインストールされていたUbuntu 18.04LTSにRuby on Railsの公開環境を構築する。

環境

# more lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.3 LTS"

Ubuntu 18.04をCUIモードで動かす

デフォルトがGUI(ランレベル5)で動いているが、サーバとしてしか使わないのでCUI(ランレベル3)で動かす。

% sudo systemctl set-default runlevel3.target

不要なサービスを止める

/etc/rc3.d/にシンボリックリンクされているものを眺めて不要なものはリンクを外す。

% ls /etc/rc3.d/
% sudo update-rc.d -f avahi-daemon remove 
% sudo update-rc.d -f bluetooth remove
% sudo update-rc.d -f cups remove
% sudo update-rc.d -f cups-browesed remove
% sudo update-rc.d -f speech-dispatcher remove

参考:

再起動する。

rbenvをシステムワイドにインストールする

CentOSでrbenvをシステムにインストールする - Qiitarbenvでsystem wideに入れるときに気をつけたいこと - Qiitaを参考にインストールする。

Githubからrbenv, ruby-build, そして rbenv-default-gemsを取得する。

% cd /usr/local
% sudo git clone https://github.com/rbenv/rbenv.git rbenv
% sudo chgrp -R staff rbenv
% sudo chmod -R g+rwxXs rbenv
% sudo mkdir rbenv/plugins
% cd rbenv/plugins
% sudo git clone https://github.com/rbenv/ruby-build.git ruby-build
% sudo chgrp -R staff ruby-build
% sudo chmod -R g+rwxs ruby-build
% sudo git clone https://github.com/rbenv/rbenv-default-gems.git rbenv-default-gems

グループstaffに現在のユーザhogehogeを付け加える。

% sudo usermod -aG staff hogehoge

rbenvの設定をログイン時を読み込むことができるように/etc/profile.d/rbenv.shを作成する。

% sudo touch /etc/profile.d/rbenv.sh
% sudo vi /etc/profile.d/rbenv.sh

中見は以下のようにした。

export RBENV_ROOT=/usr/local/rbenv
export PATH="$RBENV_ROOT/bin:$PATH"
eval "$(rbenv init --no-rehash -)"

rbenvで初期化を行う。

% sudo su
# source /etc/profile
# exit

rbenvでsystem wideに入れるときに気をつけたいこと - Qiitaでおすすめのrbenv-default-gemsを設定する。これを設定することでrubyのインストール時に合わせてインストールするべきgemライブラリを指定することができる。

% sudo touch /usr/local/rbenv/default-gems
% sudo vi  /usr/local/rbenv/default-gems

中見は以下のようにした。

bundler
pry
rbenv-rehash

rubyのインストール

rubyのコンパイルに必要なパッケージをインストールする。

% sudo apt-get install -y libssl-dev libreadline-dev zlib1g-dev

rubyのインストール

% sudo su
# source /etc/profile
# which rbenv
# rbenv install --list | 2.6.5
# rbenv install 2.6.5
# rbenv rehash
# rbenv global 2.6.5

gemのバージョンを最新にしておく。

# gem update --system
# gem -v
3.0.6

gemパッケージをインストールする際にドキュメントをつくらないように設定する。

# touch ~/.gemrc
# vi ~/.gemrc

.gemrcの中見は以下の通り。

install: --no-document
update: --no-document

Ruby on Railsのインストール

SQLite3関連のパッケージをインストールする。

sudo apt install libsqlite3-dev sqlite3

Rails6から webpackerというものを使うようになる。このために必要なパッケージをインストールする。

% sudo apt install -y curl
% curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
% echo "deb  https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
% sudo apt update
% sudo apt install yarn


Ubuntu 18.04LTSの標準のNode.jsは古いため、Node.jsを別途インストールする。

% sudo apt install -y nodejs npm
% sudo npm install n -g
% sudo n stable
% sudo apt purge nodejs npm
% exec $SHELL -l

% which node
/usr/local/bin/node

% node -v
v12.13.1

Ruby on Railsをインストールする。

% sudo su
# source /etc/profile
# gem install rails
# which rails
/usr/local/rbenv/shims/rails
# rails -v
Rails 6.0.1

Ruby on Railsの動作確認&gem ライブラリをインストールする。

# cd /tmp
# rails new demo
# cd demo
# rails webpacker:install
# rails generate scaffold person name:string age:integer
# rails db:migrate
# rails server

nftableによるアクセス制限

Debian 10 (buster)のnftablesでアクセス制御 - 発声練習を参考にする。

40080, 400081をアプリ用に公開する。/etc/nftables.confに以下を追加する。

tcp dport 40080 counter 
tcp dport 40081 counter

反映させる。

% sudo nft -f /etc/nftables.conf

確認する。

% sudo nft list ruleset

ApacheとPassengerのインストール

Installing Passenger + Nginx on Ubuntu 18.04 LTS (with APT) - Passenger LibraryにしたがってPassengerをインストールする。

Passengerをaptでインストールできるように設定する。GPG鍵の登録。

% sudo apt-get install -y dirmngr gnupg
% sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 561F9B9CAC40B2F7
% sudo apt-get install -y apt-transport-https ca-certificates

/etc/apt/source.listに追加する。

sudo sh -c 'echo deb https://oss-binaries.phusionpassenger.com/apt/passenger bionic main > /etc/apt/sources.list.d/passenger.list'
sudo apt-get update

PassengerおよびApacheモジュールのインストール。

% sudo apt-get install -y apache2 apache2-dev libapache2-mod-passenger

Apacheにモジュールを付け加える。

% sudo a2enmod passenger
% sudo apache2ctl restart

正しくインストールできているかどうかを確かめる。Apacheを使う方を選ぶ。

sudo /usr/bin/passenger-config validate-install

PassengerInstanceRegistryDirを設定する。

% sudo mkdir -p /var/run/passenger-instreg

/var/runは tmpfsとして設定されているため、そのままだと再起動の度に削除されてしまう(参考:/var/run の中身が再起動すると消えてしまうので・・・お前らもさっさとハマって泣くべきCentOS7の落とし穴4つ - Qiita)。そこで、 /etc/tmpfiles.d に設定を記載する。

% sudo touch /etc/tmpfiles.d/passenger.conf

/etc/tmpfiles.d/passenger.confの中見は以下のとおりにする。

d /var/run/passenger-instreg 0755 root root

rootのホームディレクトリ(/root)のシェルの設定ファイルに上記の添付ファイルに関する設定を記述する。たとえば、.bash_profileに以下を記述する。以下の例では合わせてRailsの実行モードについても記載する。

export PASSENGER_INSTANCE_REGISTRY_DIR=/var/run/passenger-instreg
export RAILS_ENV=production

railsのソースファイルが/home/hogehoge/rails-serverとし、http://hogehoge.net/rails/でアクセスできるようにするとき、シンボリックリンクをはる。Apacheのデフォルトが/var/www/htmlになっているのでその下に置く。

% sudo ln -s  /home/hogehoge/rails-server/public /var/www/html/rails

Apacheの設定

/etc/apache2/ports.conf に新しく開けたポートの記述を追加する。

Listen 40080
Listen 40081

ポート番号40080でアクセスする設定を/etc/apache2/sites-available/001-vhost1.confとして設定する。以下の設定ファイルでSECRET_KEY_BASEの環境変数を定義しているのは、passenger経由だとユーザディレクトリの設定ファイル(.bash_profileなど)で設定した環境変数が反映されないため(参考→http://blog.mkt-sys.jp/2015/11/secret-key-base-on-production.html)。

PassengerInstanceRegistryDir /var/run/passenger-instreg #上述のディレクトリ

<VirtualHost *:40080>
	ServerName サーバのFQDN

	ServerAdmin 連絡先メールアドレス
	DocumentRoot /var/www/html

	ErrorLog ${APACHE_LOG_DIR}/vhost1_error.log
	CustomLog ${APACHE_LOG_DIR}/vhost1_access.log combined

	PassengerRuby /usr/local/rbenv/versions/2.4.2/bin/ruby # rbenvで導入したrubyを指定する
	PassengerFriendlyErrorPages off  #onにするとエラー時にログが表示される。
	
	SetEnv SECRET_KEY_BASE 「秘密鍵につかう文字列 bundle exec rails secret で生成」
	RackEnv production
	RackBaseURI /rails

</VirtualHost>

設定を反映させる。

% sudo a2ensite vhost1
% sudo systemctl reload apache2

Railsアプリを修正したとき

passengerを再起動する(参考:Restarting applications)。

% sudo passenger-config restart-app

Linux OOM Killerメモ

バックグラウンドで動かしているプロセスが突然停止しており、理由がわからない。多分、OOM Killerのせい。

環境

  • Ubuntu 18.04 LTS

対処方法: OOM Killerを停止する

/proc/sys/vm/overcommit_memory の値を2にする(デフォルトは0)

現在の値を変更。

% sudo su
# echo 2 > /proc/sys/vm/overcommit_memory

起動時に変更

% sudo su
# touch /etc/sysctl.d/10-overcommit.conf
# echo "vm.overcommit_memory = 2" >> /proc/sys/vm/overcommit_memory

対処方法: OOM Killer呼び出ししきい値を変更する

/proc/sys/vm/overcommit_ratio の値を適切なものにする(デフォルトは50。メモリ容量の50%でOOM Killerが呼び出される)

現在の値を変更。

% sudo su
# echo 90 > /proc/sys/vm/overcommit_ratio

起動時に変更

% sudo su
# touch /etc/sysctl.d/10-overcommit.conf
# echo "vm.overcommit_ratio = 90" >> /proc/sys/vm/overcommit_memory

Debian 10上のGitLabをMuninで監視する

やりたいこと

複数のサーバの負荷状況をmuninで可視化する。

  • muninデータのとりまとめは別サーバで行う
  • 本サーバではサーバの負荷状況&Gitlabの状況を監視する

muninのインストールと設定ファイルの変更

% sudo aptitude install munin munin-node

設定ファイルを修正し、muninの親サーバからアクセスできるようにする。

% cd /etc/munin
% sudo cp -p munin-node.conf munin-node.conf.org
% sudo vi munin-node.conf

変更場所は以下のとおり

% diff munin-node.conf.org munin-node.conf
37a38
> host_name hogehoge.localdomain  #このサーバのFQDNを記載
45c46,47
< allow ^::1$
---
> #allow ^::1$
> allow ^192\.168\.11\.100$  # muninの親サーバのIPアドレスを記載

監視対象の確認

% sudo munin-node-configure

ハードディスクの監視

Debian 9 (Stretch) - munin 各種監視追加! - mk-mode BLOGに従い、設定する。

smartmontoolsのインストール

% sudo apt install smartmontools

ハードディスク監視用の設定の記述。

% sudo touch /etc/munin/plugin-conf.d/hddtemp_smartctl
% sudo vi /etc/munin/plugin-conf.d/hddtemp_smartctl

監視対象とするハードディスクドライブのディスク情報を確認する。私の環境では /dev/sda が監視対象。

% df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
udev             7.8G     0  7.8G    0% /dev
tmpfs            1.6G   17M  1.6G    2% /run
/dev/sda2        900G  6.9G  848G    1% /
tmpfs            7.9G   12K  7.9G    1% /dev/shm
tmpfs            5.0M     0  5.0M    0% /run/lock
tmpfs            7.9G     0  7.9G    0% /sys/fs/cgroup
/dev/sda1        511M  5.1M  506M    1% /boot/efi
tmpfs            1.6G     0  1.6G    0% /run/user/1000

/etc/munin/plugin-conf.d/hddtemp_smartctlの中見

[hddtemp_smartctl]
user root
env.drives sda
env.smartctl /usr/sbin/smartctl
env.args_sda --all -d ata

プラグインを組み込む。

% sudo ln -s /usr/share/munin/plugins/hddtemp_smartctl /etc/munin/plugins/

CPUや電源の監視

lm-sensorsと関連パッケージをインストールする。

% sudo apt -y install lm-sensors libsensors5 fancontrol

sensors-detect を実行する。いいなりにEnterキーをおし、最後の /etc/modulesへの書き込みはYesを選択する。

% sudo sensors-detect 

センサーのチェック

% sudo sensors

センサー監視用の設定ファイルを作成する。

% sudo touch /etc/munin/plugin-conf.d/sensors
% sudo vi /etc/munin/plugin-conf.d/sensors

/etc/munin/plugin-conf.d/sensorsの中見は以下の通り。

[sensors_*]
user root

プラグインを組み込む。

% sudo ln -s /usr/share/munin/plugins/sensors_ /etc/munin/plugins/sensors_volt
% sudo ln -s /usr/share/munin/plugins/sensors_ /etc/munin/plugins/sensors_temp
% sudo ln -s /usr/share/munin/plugins/sensors_ /etc/munin/plugins/sensors_fan

GitLabの監視

GitHub - MatthiasLohr/munin-plugins-gitlab: Munin-plugins for monitoring a GitLab instanceで提供されているプラグインを利用する。Readmeに従い作業する。

関連するパッケージをインストールする。

% sudo apt install python-psycopg2

プラグインをクローンする。

% cd /usr/local/share
% sudo git clone https://github.com/MatthiasLohr/munin-plugins-gitlab.git
% ls -d munin-plugins-gitlab
munin-plugins-gitlab

プラグインの設定ファイルを作成する。

% sudo touch /etc/munin/plugin-conf.d/gitlab
% sudo vi /etc/munin/plugin-conf.d/gitlab

/etc/munin/plugin-conf.d/gitlabの中見は以下の通り。

[gitlab_*]
user git
env.gitlab_dir /var/opt/gitlab    # optional, defaults to GitLab omnibus package
 setup directory
 
## using a PostgreSQL database
env.db_engine postgresql          # optional, defaults to postgres, valid values
: postgresql. mysql
env.db_dsn host=/var/opt/gitlab/postgresql user=gitlab dbname=gitlabhq_productio
n  # optional, defaults to GitLab omnibus database
env.db_pg_search_path gitlab     # optional, set search_path before executing an
y query. Useful if not using GitLab omnibus package
  
## using a MySQL database
#env.db_engine mysql
#env.db_dsn host=localhost user=gitlab db=gitlabhq_production
  
[gitlab_redis_*]
user gitlab-redis
env.redis_socket /var/opt/gitlab/redis/redis.socket  # optional, defaults to Git
Lab omnibus redis instance
  
[gitlab_total_registry_size]
user registry

自分に必要そうなプラグインを導入する。今回は以下を導入した。

% sudo ln -s /usr/local/share/munin-plugins-gitlab/gitlab_redis_used_memory /etc/munin/plugins/
% sudo  ln -s /usr/local/share/munin-plugins-gitlab/gitlab_total_repo_count /etc/munin/plugins/
% sudo  ln -s /usr/local/share/munin-plugins-gitlab/gitlab_total_repo_size /etc/munin/plugins/
% sudo  ln -s /usr/local/share/munin-plugins-gitlab/gitlab_users /etc/munin/plugins/
% sudo  ln -s /usr/local/share/munin-plugins-gitlab/gitlab_users_active /etc/munin/plugins/

Readmeにかかれているとおりにして、Gitlabで使用しているnginxを監視する。

% sudo mkdir -p /etc/nginx/conf.d/
% sudo touch /etc/nginx/conf.d/status.conf
% sudo vi  /etc/nginx/conf.d/status.conf

/etc/nginx/conf.d/status.confの中見は以下の通り。

server  {
    listen *:80;
    listen [::]:80;
    server_name localhost;
    location /nginx_status {
        stub_status on;
        access_log off;
        allow 127.0.0.1;
        allow ::1;
        deny all;
    }
}

/etc/gitlab/gitlab.rb の該当部分を修正する。

# nginx['custom_nginx_config'] = "include /etc/nginx/conf.d/example.conf;"
 nginx['custom_nginx_config'] = "include /etc/nginx/conf.d/status.conf;"

設定を再読込する。

% sudo gitlab-ctl reconfigure

プラグインを導入する。

% ln -s /usr/share/munin/plugins/nginx_request /etc/munin/plugins
% ln -s /usr/share/munin/plugins/nginx_status /etc/munin/plugins

munin-nodeを再起動する。

% sudo systemctl restart munin-node

余談:Apacheの監視

% ln -s /usr/share/munin/plugins/apache_accesses /etc/munin/plugins/apache_accesses
% ln -s /usr/share/munin/plugins/apache_processes /etc/munin/plugins/apache_processes
% ln -s /usr/share/munin/plugins/apache_volume /etc/munin/plugins/apache_volume