CentOSでオペレーションをしてるときによく調べる事をメモっておきます。細かい説明は極力省いてます。
CentOSセットアップ関連
セットアップ備忘録(超私的)
- CentOS6以前は、/bootにxfsが使えない。/bootはソフトミラーもできない(LVMで強引にできるけど、あとで痛い目を見る)
- 主なパーティションサイズ(アプリデータを別に入れると想定した場合)
/boot…500M。長期間運用サーバなら1GB
/(root)…GUI無し5G(だいたい2~3GB使用)、GUI有り10G(だいたい5GB使用)
/var…5GB(だいたい1~2GB使用)
swap…2G以下ならメモリx2。8G以下ならメモリと同容量。8G以上なら8GB。 - CentOS6で作成されるデフォルトユーザのuidは500からだが、CentOS7は1000からになるので、データ移行する際には一応注意する。
セットアップ後の備忘録(超私的)
- /etc/hostsをいい感じにする
- /etc/fstabの「defaults,noatime」にする
- UID変更
usermod <変更する項目> <USER>
※項目の指定方法は後述のuseraddと同じ - SELinuxを無効可(/etc/sysconfig/selinux→SELINUX=disabled)→再起動
- firewalldを止めたくないけど止める
# systemctl disable firewalld - yum update
- ~ここで再起動~
- yum install nmap epel-release yum-plugin-priorities yum-cron tmpwatch rsync mailx zip unzip wget screen tcpdump openssh-clients
– 仮想化ゲストならacpidも入れる
-MariaDB(Client)を使うならmariadb-libsも入れる
– NFS(Client)を使うならnfs-utilsも入れる。 - yum install figlet
- figletはepelからの導入
# yum install nfs-utils
~略~
# vi /etc/idmapd.conf
※Domainに自ドメインを追記
# systemctl status rpcbind
# systemctl start rpcbind
# systemctl enable rpcbind
- vi /etc/ssh/sshd_config
rootで直接リモートログインを許可しない
PermitRootLogin no - vi /etc/profile.d/banner.sh
#!/bin/sh
figlet -f banner -w 100 $HOSTNAME
figlet -f banner “<“$USER”>”
できればHostOSからのシャットダウンをテストした方がいい。
- グループ追加
- # groupadd -g <GID> <GROUP>
- ユーザ追加
- # useradd -u <UID> -g <GID> -d /home/<USER> -m -s /bin/bash -c <コメント> <USER>
CentOS7関連
systemctl
- systemctl –full
管理されてる物を全て表示する。あまり使わないコマンド。 - systemctl list-dependencies
管理されている物をツリー状に表示してさらにエラー状態を色分け表示。便利。 - systemctl -t service
サービス(デーモン)だけ絞って表示。ここでエラー表示があるなら原因は探った方がいいかも。 - serviceファイルを手で更新したら再読み込み。
# systemctl daemon-reload - サービス名わからない、見つからない場合
# systemctl status httpd
# ls -la /usr/lib/systemd/system/httpd
# ls -la /usr/lib/systemd/system | grep -i httpd
などなど - シェルを起動するserviceファイルを作る
残念ながらCentOS6以前の起動シェルをそのまま使うのは困難。以下、言葉の意味はググれば出てくるので略。シェルをキックする場合は、Type=forkingにしないとエラー扱いになる。直接デーモンとなるファイルをExecStartに指定できる場合は、Type=simpleでも良い。
# /etc/systemd/system/サービズ名.service
[Unit]
Description=サービス名 Server
After=network.target
Requires=
[Service]
Type=forking
ExecStart=/path/to/シェル名.sh
User=ユーザ
Group=グループ
Restart=always
[Install]
WantedBy=multi-user.target
それ以外
- ifconfigの変わり
$ ip a - どうしてもifconfigとかnetstatとかを使いたい
# yum install net-tools.x86_64
VNC Server
接続時にアカウント入力を必要とせず、接続するポート番号毎にユーザを紐付ける設定です。
まずは、 VNCサーバのインストール。
# yum install tigervnc-server
ユニットファイルの作成。
# ls -l /lib/systemd/system/vncserver@.service
-rw-r–r–. 1 root root 1828 11月 3 2018 /lib/systemd/system/vncserver@.service
# cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service
ユニットファイルの編集。この:1番(5901ポート/TCP)を紐付けるユーザIDを指定します。<USER>からユーザIDへ書き換え。
# vi /etc/systemd/system/vncserver@:1.service
ExecStart=/usr/sbin/runuser -l <USER> -c “/usr/bin/vncserver %i”
PIDFile=/home/<USER>/.vnc/%H%i.pid
VNC接続用パスワードを指定。参照専用パスワードを設定するか?はn(No)を指定。
# su – user
$ vncpasswd
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
A view-only password is not used
$ exit
ユニットファイルの有効化とデーモンの起動
# systemctl daemon-reload
# systemctl enable vncserver@:1
# systemctl restart vncserver@:1
firewalldのポートを開けます。
# firewall-cmd –permanent –zone=public –add-service=vnc-server
success
# firewall-cmd –reload
success
# firewall-cmd –list-all
public (active)
~略~
services: ssh dhcpv6-client vnc-server
~略~
これで、VNCクライアントから5901ポートへ接続できます。
仮想化関連
- qcow2ファイルの縮小(shrink)。(旧ファイルは残る)
qemu-img convert -c -O qcow2 from.qcow2 to.qcow2
※ただし、qcow2ファイルは拡大時の性能劣化が激しいので注意。
yum関連
- リポジトリ指定実行
# yum –enablerepo=mariadb search mariadb - MariaDBとPostfixの同居(mariadb-libsの競合回避)
# yum remove postfix mariadb-lib
# yum –enablerepo=mariadb install MariaDB-shared postfix
(MariaDB-commonとMariaDB-compatも依存でインストールされる)
# yum –enablerepo=mariadb install MariaDB-server MariaDB-client
Disk関連
- UUIDを見る
blkid - ノンスパースなrawファイルを作る(200G)。重いので仮想サーバが居る場合は注意。
dd if=/dev/zero of=disk.img bs=1024M count=200 - スパースファイルかの確認
# qemu-img info disk.img
(disk sizeを見る)
LVM関連
「物理パーティション→pvへ登録→vgへ登録→lvへ登録→OSへマウント」という流れ。面倒だけど、動的リサイズ(条件はあるけど)やオンラインmoveが使えるので、仮想化環境のように複雑な環境を管理する場合は使うと便利。そういうのは必要無いなら無理して使うことは無い。
- pv追加
# pvcreate /dev/sda1
先にfdiskでスライスを作っておくと良い。mkfsは不要。ディスク丸ごとも指定できたはず(# pvcreate /dev/sda) - vg追加
# vgcreate -s 32M vg_vgname /dev/sda1
-sはエクステントサイズ。32Mにすると、2TBまでのpvを扱える。デフォは4M(256GBまで)。大きく取ると容量の無駄(残が32M以下だとそこが使われない)らしいけど、そのくらいなら気にしない。小さい方が性能が良くなるらしいけど、まぁ気にする程でも無いという話もある。 - lv追加。
# lvcreate -n lv_lvname -l 100%FREE vg_vgname
サイズの指定(100Mとか)をする場合は-L 100M。指定したvgの容量を全て割り当てる場合は「-l 100%FREE」と書く。 - ファイルシステム作成
vg_vgname、lv_lvnameを作るとデバイス「/dev/vg_vgname/lv_lvname」ができるのでフォーマット。
# mkfs.xfs /dev/vg_vgname/lv_lvname
フォーマットすればblkid等でも見れるようになる。
MariaDB関連
初期設定
- DBを起動して、「mysql_secure_installation」
phpMyAdminを使えるようにする。
- # yum install httpd php php-mbstring php-gd php-mysql phpMyAdmin
- # vi /etc/httpd/conf.d/phpMyAdmin.conf
ローカルログインしか許可されてないので、アクセスする外部のIPを追加するなり、全部許可するなりする。 - ブラウザから、http://IP/phpmyadmin/
基本的な操作
また、Webアプリの多くは設定ファイルにDBのパスワードを書く場合が多く、ファイルに誰でも読めるパーミッションが設定されている事も多いことから、あまりセキュリティを意識しないでroot/パスワード無しでDB操作する人も多いけど(気持ちはわかる)、誤操作の原因になるのでせめてユーザ名くらいはDB毎に別々にした方がいい。
- ユーザ作成
接続元ホストはlocalhostとかIPとかFQDNとか。リモート接続の場合は、IPとホスト名が同じ物でも指定の仕方と定義が一致しないと繋がらない。(localhostと127.0.0.1が別物という意味)
# mysql -u root -p
mysql> grant all privileges on DB名.* to ユーザ名@接続元ホスト identified by ‘パスワード’;
※「all privileges」は全ての操作、「DB名.*」は対象DBの全てのテーブル、「ユーザ名@接続元ホスト」はその権限を与えるユーザとその接続元。接続元をサブネットレベルにしたいなら「192.168.1.%」という感じ。 - DB作成
UTF-8で作成。rootユーザで作成してもいいけど、動作確認を兼ねてユーザを変えてる。
# mysql -u ユーザ名 -p
mysql> create database DB名 DEFAULT CHARACTER SET utf8;
Docker関連
バージョンが上がることに導入方法や振る舞いが変わるので注意すること。ここでは、CentOS7.2、Docker1.11。
ちなみにここが何かと詳しい。
https://www.qoosky.net/techs/0a0bd52cd3
※以下、Docker 1.12で同じ事をするとおかしくなります。Dockerについては改めてdocker環境作成memoに記録を残してます。
導入
- ここに書いてある通り入れる。https://docs.docker.com/engine/installation/linux/centos/
- # systemctl start docker
- # systemctl stop docker
- # cp /usr/lib/systemd/system/docker.service /etc/systemd/system/
- # vi /etc/systemd/system/docker.service
- # systemctl start docker
「ExecStart=」前後を書き換える。これで。「/etc/sysconfig/docker云々」ファイルが使えるようになる。
EnvironmentFile=-/etc/sysconfig/docker
EnvironmentFile=-/etc/sysconfig/docker-storage
EnvironmentFile=-/etc/sysconfig/docker-network
ExecStart=/usr/bin/docker daemon -H fd:// $OPTIONS \
$DOCKER_STORAGE_OPTIONS \
$DOCKER_NETWORK_OPTIONS \
$BLOCK_REGISTRY \
$INSECURE_REGISTRY
shipyardも入れる
- ここに書いて有るとおり入れる。https://github.com/shipyard/shipyard
- 基本的にこれだけで導入できる。
# curl -s https://shipyard-project.com/deploy | bash -s
imageのダウンロード
- docker hub(https://hub.docker.com/)でよさげなのを探す
- # docker pull owncloud:9.0.1
イメージ名は「名前:タグ」で最新でいいならタグはlatestでもいい。使用可能なタグはDocker Hubに書いてあります。 - # docker images | grep owncloud
owncloud 9.0.1 *** 2 weeks ago 698.2 MB
コンテナの操作
- docker run -d -p 10080:80 –name hoge -v /path/to:/var/www/html イメージ名
–nameでコンテナ名を指定する。無くても大丈夫だけど、有った方がわかりやすい。
「-p ホスト側:コンテナ側」でNAT。この例だと、ホスト側の10080ポートへアクセスすると、コンテナ側の80へフォワードしてくれる。
Leave a Reply