コンテンツへスキップ

借りていたサーバーを移転しなければならないので、新たにVPSを借りてブログのデータを移行していました。
せっかくだからOSは題名の通りUbuntuに変えました。環境の練習になるので。

Ubuntuのログイン方法はCentOSとは異なるから注意。
慌ててOSの再ダウンロードとかしないように。

まずは、ログイン方法としてユーザー名は、[root]ではなく[ubuntu] であることに注意。
そして、スーパーユーザーに昇格するためにrootのパスワードを作成する必要があります。

passwd root

上記で新しいパスワードを設定した後に su - コマンドから設定したパスワードを入力するとroot権限になります。

参考
https://qiita.com/_toki/items/cced337d72103ed4387c

この後はssh接続方法を公開鍵認証方式にするとかやりますが、ミドルウェアのインストールで失敗とかしたら
最悪OSの再インストールとか面倒なので、先にデータベースをインストールしました。

MariaDBのインストールは下記サイトの通りに進めています。
https://www.server-world.info/query?os=Ubuntu_20.04&p=mariadb&f=1

Apache2とかPHPも上記サイトのカテゴリを参考にしてインストールしました。

ミドルウェアを落とすと次に必要なのは、データです。
まず、移転元のサーバーにssh接続をして、WordPressの対象データをアーカイブ圧縮します。
私の場合はドキュメントルート以下と証明書のファイルをアーカイブして圧縮しました。

tar -czvf アーカイブ.tgz 対象ファイル

ファイルのアーカイブを作成しgzip形式で圧縮する

次にデータベースをダンプします。

mysqldump --opt データベース名 > 適当なデータベース名


上記のデータをFTP等を利用して新サーバーに転送します。

新サーバーでは、データを入れるためにmysqlにログインし、
データベースを作成します。

mysql -u ユーザー名 -pパスワード
create database データベース名

mysqlから接続を遮断後、データベースをリストアします。

mysql 作成したデータベース < ダンプデータベースファイル名

リストアの確認はmysqlにログイン後、対象のデータベース内のテーブルを確認してみたらいいと思います。

次にドキュメントルート以下にファイルを解凍

tar -xzvf アーカイブ.tgz

gzipで圧縮されたアーカイブを展開する

この後はWordPressのコンフィグファイルの設定でパスワード等をいじったら、サイトの確認をしてください。
http://対象のIP で確認できると思います。
私の場合は、サイト内で下記エラーが発生していました。


お使いのサーバーの PHP では WordPress に必要な MySQL 拡張を利用できないようです。

エラーに従ってMySQLの拡張モジュールをインストールしました。

apt -y install php-mysql

その後、サイトを確認すると
データベースの接続ができません
のエラーに変化していました。
大抵はWordPressのコンフィグファイルのパスワードの打ち間違いとかですが、そうでもなく少しハマりました。
色々調べたところ、WordPressのコンフィグファイルのhostname を localhost から 127.0.0.1 に変えたところ
サイト内が重大なエラーが発生と表示が変わりました。
上記の場合、Apache内のエラーログを確認したら原因がわかります。
今回の場合、とあるpluginからエラーが発生していたのでそれの権限を000にするとサイトが正常に表示されました。
サイトが見れたからいいものの、コードをみやすくするためのプラグインだったので少し不便になりましたw
代わりのプラグイン見つけないと......

次に証明書の設置です。
下記サイトが参考になりました。
https://blog.fileshelfplus.com/vps/280

少しハマったところは、新サーバーのサイト内に証明書の期限が有効であるのに証明書としては無効であること。
結果的にDNSサーバーのAレコードを移転元から移転先に変更すれば問題なく証明書が有効となりました。

これでひとまずはデータ移行の終了です。

その他参考
ubuntuでcronの設置
https://intellectual-curiosity.tokyo/2018/10/12/ubuntu%E3%81%A7%E3%81%AEcron%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9/

ubuntuでファイアウォールの設置
https://lifework-blog.com/ubuntu-server-firewall/

スイッチングとかハブとか入り乱れる言葉のせいでハブについてよくわかっていなかった。

昔はリピータハブとシェアードハブとか呼ばれていて、一つの端末の転送が終わるまで他の端末は通信ができなかったらしい。

今はハブと言えばスイッチングハブと呼ばれていて、端末から受け取ったデータをハブが宛先を確認して、ポートを選びデータを送ってくれるそう。

そんなハブでもインテリジェンス性じゃないハブはバカハブと呼ばれていてかわいそうなこともあるとかw

ちなみにインテリジェンス性は輻湊した場合、自動で自分の電源を落とすそうだ。
輻湊とはハブの穴1にいれたランケーブルのつなぎ先を同じハブの穴2に入れる状態。
ネットワークがぐるぐる回ってサーバーに負荷がかかることで全端末のネットワークが落ちるそうで気を付けないといけない。

イーサネットとは、ネットワークやコンピューター間での通信モデル TCP/IPプロトコルのネットワークインターフェース層に対応する有線の規格です。

とか言うけど、実際はインターネットをつなぐケーブルとしか思ってなくて、もっと言えば、各イーサネットの規格用に電気を流しているところと接続するためのものと思っていた。
例えば、Cat5eにはそれ専用の電気を流す物体、Cat6にはそれ専用の......

でも、そのあと先輩からイーサネットについての説明を聞いて分かったことは、
電気を流す物体はどれも同じで、イーサネットのカテゴリによって伝送帯域や(~100MHz)、速度(~Mbps)とかを決めていることがわかった。

確かに言われてみたら、イーサネットごとに電気を流す物体を用意のするのは非効率すぎる。。。なんなら電気と光を流す物体さえ違うと思っていたので恥ずかしい限り。

つまりイーサネットの銅線の巻き方の種類で電気の流れを変更しているということ。
光ファイバーを考えた人って天才だよな......

参考
https://wifi-style.otoku-keitai.net/basics-of-wifi/ethernet/

オンラインゲームをするときにネットワークはデータ(IPパケット)を宛先コンピューター(サーバー)と送受信することで成り立つ。データを一度に送信できる量は決まっている。
それがMTU(aximum Transfer Unit)値だ。

サーバーのMTU値がゲーム機のMTU値より低い場合、データの分割、いわゆるフラグメンテーションが発生する。分割が発生した場合、分割されたデータには新しくデータの順番を付けるなどの情報がついたヘッダーが付く。

そしてサーバー上で分割されたデータはヘッダーの情報を元にデータを再構築する。
ヘッダーの情報には後に続くフラグメントがある場合は1、最後のフラグメントの場合には0といった
振り分けをすることでサーバー側が判断をして再構築をしている。

このように、適切なMTU値を設定しないと、データの分割、分割されたデータへのヘッダー付与、サーバー側でのデータの再構築といった余分な処理が発生する。だから遅延が発生する。
逆に言えばこの処理を抑えらればインターネット回線速度の上昇が期待できる。

私の場合は、下記サイトで自分のPCのMTU値を確認した上で、任天堂switchのMTU値を変更した。
https://www.speedguide.net/analyzer.php

任天堂switchのMTU値はオンラインの設定画面で変更可能だから試してみてほしい。

情けないことにルーティングテーブルの見方がこれまでよくわかっていなかったので
先輩方に教えていただいたことで一部理解した。とはいえメトリックとかはまだ知らない。
※追記 0626 メトリックは優先度のことを指し、複数のルートがある場合数値が低いほうが優先される。
例えばこれ。windowなら cmdからroute print で表示

簡単にいえば、ネットワーク宛先のIPと接続するために、どのインターフェイス(NIC)を利用したらいいか書かれている表だ。
例えば、127.0.0.0のネットワーク宛先にパケットを送るNICは127.0.0.1のNICを利用するといったところ。
ネットワーク宛先に当てはまらないパケットはデフォルトゲートウェイを介してインターネットへの接続を試みる。
パケットの立場としてはNICが二つあるときとかどちらのNICからパケットを飛ばせばいいかわからないからね。(当時私はネットワーク宛先を外部からきたIPのことを指すとか思っていてよくわかっていなかった。)

ルーティングテーブルを引くと、ローカル内で別のネットワークと接続ができるようになる。
例えばVPNをつないだり、印刷機とつないだりだとか。
私の場合は、仕事にてクラウド上でVPNをひくために、ネットワーク宛先を対象のサーバーのローカルIPとし、
デフォルトゲートウェイを対象のVPCルータのローカルIPにした。

その時、windowサーバーからの接続だったからコマンドは下記のようにした。

route -p add 宛先IPアドレス MASK サブネットマスク ゲートウェイIPアドレス eth1 

ちなみに[add]の箇所を[del]にしたら消せるから自分の端末で気軽に練習できる。

参考

https://www.atmarkit.co.jp/ait/articles/0111/01/news002.html

容量を使いすぎているアカウントを整理した後、
whmのアカウントリストを確認すると整理した容量に反映されていなかった。
いつもなら下記コマンドで反映してからrepquota -a で治っていたけど
今回は治らなかった。

/usr/local/cpanel/scripts/fixquotas

問題はキャッシュ

cPanelに問い合わせると
mailmanのキャッシュの有効期間は最大 30 日間のようで、Mailman のアーカイブを手動で調整しても何もクリアされません。そのファイルを削除して再生成すると、cPanel は Mailman のディスク使用量に対してより適切なサイズを報告するようになりました。


とのことなので、下記ディレクトリ以下に各アカウントのメーリングリストのキャッシュファイルがあることを確認。

/var/cpanel/mailman/diskusage_cache

該当のファイル名を変更等してから以下コマンド実行

/usr/local/cpanel/scripts/update_mailman_cache


クォーテーションの話はLPIC1でよく見たものの忘れがちなので改めてまとめてみる。

エスケープ

エスケープとは特殊文字の機能を無効にすること。

シングルクォーテーション

''に囲まれた文字列は全て文字列のままとして扱われる。
例えば、下記は変数が展開されない 

TEST=test
echo '$TEST'
$TEST

ダブルクォーテーション

””に囲まれた文字列は一部を除いて文字列として扱われる
一部とは、$  [\]バックスラッシュ [‘]バッククォート のこと。
例えば、下記は変数が展開される。

TEST=test
echo "$TEST"
test

バッククォーテーション

``に囲まれた文字列をコマンドとして実行できる。

ls
test1 test2
TEST=ls
echo `$TEST`
test1 test2
lsを予めバッククォートにいれても可能
TEST=`ls`
echo $TEST
test1 test2

まとめ

シングルクォーテーションは全て文字列に入れておくことを前提に、
変数を展開しつつ各文字列を一つにしたいならダブルクォーテーション、
コマンドを利用したいならバッククォーテーションと覚える。

おまけ
一文字だけをエスケープしたい場合、[\]バックスラッシュをつける

サーバー移転作業後に移転後のアカウントで新しいメールアカウントを作成したときにメールテストをしたときの話。
メールの送信はどのサーバーにもできるけど受信ができないときがあった。
・メールが受信できるのは送信元サーバー内と送信先が一緒のときだけ。

上記のことはローカル配送のことを指す。
ローカル配送とは上記のように送受信サーバーが一緒の場合、
メールサーバーの性質上名前解決をせずにメールを配送するから受信ができたということ。

まぁ、メールテストはDNSを切り替えてからしましょう。


参考
https://faq.cpi.ad.jp/faq/show/106?category_id=33&site_domain=default

仕事中、RAID1構成のsdbのハードディスクが故障したから交換作業を実施した。
交換したハードディスクのパーティションを切った。sdb1とする。sdb1をsda1からコピーして、
sdb1、sda1によるRAID1構成を作成した。これで終わりではなく
その後になぜsdbにgrubをインストールするのかがわからなかった。

grub-install --root-directory=/ /dev/sdb

自分の理論ではsda全体の中身をsdbに入れたからgrubもインストールされているだろうと思っていた。
後から先輩に教えてもらったけど、grubのインストールはマスターブートレコード(MBR)を指しているとのこと。
MBRはディスク内のセクタの先頭にあり一番初めに読まれるデータ。
MBR内にはブートローダとパーティションテーブルがある。ブートローダはパーティションテーブルの内容を元に
各パーティションであるsdb1やsdb2ブートセクタを起動できるようにする。ブートセクタによって各パーティションのOSが起動する仕組みだ。

つまり、sdb1をsda1にコピーしたところで、MBRが含まれていないので、別途MBRをインストールする必要があった。
ddコマンドでもMBRをコピーできるようだけど、ddコマンドをミスしてディスクを壊すと危ないのでコマンドでMBRをインストールしているとのこと。

参考
わかりそうでわからないシリーズ

とあるクラウドからubuntu20.04の環境にNICを2つ設置後に、コンソール上からIPを追加する機会があった。
簡単につける場合、nmtuiをたたいてからGUI上で設置できるんだけど今回はできなかった。理由は割愛。

ubuntu20.04の場合は、まず、/etc/network/以下にある設定ファイル名を変更して無効化にした。
ファイル名は環境によって変わるからファイルの中身を確認したらいいと思う。

その後、[99-netcfg.yaml]をvimで編集。

自分の場合は次のように記載。

network:
    version: 2
    ethernets:
        eth00:
            addresses: [10.1.1.1/24]
            gateway4: 10.1.1.255
            nameservers:
#               addresses: [111.111.111.111,111.111.111.112]
                addresses: [8.8.8.8]
                search: []
            optional: true
network:
    version: 2
    ethernets:
        eth01:
            addresses: [10.111.111.111/24]
                search: []
            optional: true

コメントアウトしている箇所は、クラウド上で認証のネームサーバーだったけど、名前解決が上手くいかなかったから[8.8.8.8]に変更したら成功した。わかる人教えてください。

ファイルを作成後は

netplan apply

で変更。成功した場合、何も返答がない。
インデントには厳しいのでスペース一つの差でエラーが返ってくるから気を付けること。

余談だけど、毎回sudoコマンドからパスワードを打つのが面倒な場合、
sudo su - で一度権限を昇格してしまうのオススメ。

参考
Ubuntu 20.04 LTSで固定IPアドレスを設定する方法【サーバー編】