- 投稿日:2020-11-26T23:09:04+09:00
linux user 追加
1ユーザ追加 abcde
useradd abcde2パスワード追加
passwd abcde3
- 投稿日:2020-11-26T17:37:42+09:00
Linuxのディレクトリ構成の確認
勉強前イメージ
独自でインストールするときとかどこにディレクトリほったらいいかわからなくて....
なんとなくイメージでやってたけど確認する調査
今回はCentOS7のroot配下のディレクトリを取ってきました。
/
最上位のディレクトリ、つまりrootディレクトリ。
/bin
システムを管理する上で基本コマンドが入っている。
cd, cp, mvなどOSをインストールしたときの標準コマンドのプログラムが入っている/boot
ブートに必要なファイルが入っている。
カーネルイメージとかが保存されている/dev
デバイスのファイルが入っているディレクトリ。
sdaやcdromなど/etc
ほとんどの設定ファイルが置かれているディレクトリ
httpdとかインストールしたら/etc/httpd
に設定ファイルが置かれたりする/home
一般ユーザのホームディレクトリ。
ユーザが追加されるごとに/home配下にディレクトリが作成される/lib
システムを起動するのに必要なドライバモジュールやライブラリファイル用のディレクトリになります
/lib64
64bitの場合は/libでなくこちらのディレクトリが使用される。
一覧を作ったサーバは64bitだったので、libはみずにlib64を見ているってことかな。/media
CD-ROMやフロッピーディスクなどの外付けメディア用のディレクトリ。
/mnt
一時的なファイルシステムのマウントに使うディレクトリ
/opt
rpmなどパッケージ管理システムのインストール先。
/proc
プロセスのIDの付いたディレクトリが置かれています
各プロセス名によってディレクトリが存在し、現在実行されているプロセスに対する情報とデータが含まれている/root
rootユーザーのホームディレクトリ
/run
実行中のプログラムのPIDファイルを格納するときによく使われるディレクトリです
.pidというファイルを使って重複して起動しないために使われることが多い
再起動の際にデータが削除されます/sbin
システム管理者用のコマンド(再起動やファイルシステムの操作等)が置かれている
新しいコマンドの追加や変更は推奨されていません/srv
ftp、wwwなどで利用するユーザー用のスペース
/sys
動作しているプロセスやドライバのうち、ドライバ関連がまとめられている
/tmp
テンポラリデータの保存場所。
/usr
各ユーザーが共通して利用するライブラリのデータを保存する場所
ソースからコンパイルしたアプリケーションなどはこちらにインストールされる。
/etcに保存されている設定のシンボリックリンクが貼られることがある/var
ログやキャッシュなどのデータが保存されている
勉強後イメージ
/etcに設定ファイルが置かれないようなミドルウェアってあるけどあれの違いってなんなのかな...
あと/mediaにCD-ROMのディレクトリあるけど、/dev/cdromとどう違うんだろう...
いろいろ疑問が出てきたのでまた今度確認する。
今回はライブラリとかどこ置いたらいいんやろ...って思うことが多いから、どういう役割をしてるのかでも知れたので良かったと思います参考
- 投稿日:2020-11-26T14:07:49+09:00
Wordpressの「予期しないエラー」でテーマが選べない場合の対処法
環境
CentOS8、MariaDB 10.3.17、PHP 7.4.13、apache 2.4.37、SELINUX=enforcing
問題
Wordpressのテーマを変更しようとして、「新規追加」ボタンを押すと、エラーが出てテーマを選択できない。
原因
そもそも自分が操作しているクライアントPCとは繋がっており、ファイアーウォールとかではない。ということでSELinuxのログを見ると
denied
の文字が大量に出てる。# aureport --avc AVC Report =============================================================== # date time comm subj syscall class permission obj result event =============================================================== 1. 11/25/2020 19:00:36 ? system_u:system_r:system_dbusd_t:s0-s0:c0.c1023 0 (null) (null) (null) unset 141 2. 11/25/2020 19:34:17 php-fpm system_u:system_r:httpd_t:s0 0 tcp_socket name_connect system_u:object_r:http_port_t:s0 denied 226 ...RedHatのドキュメントによると、SELinuxをdisableにしていない場合、SELinuxはApacheが外部ネットワークと通信するのを許可しない。なので、テーマだけでなくプラグインの追加とか、外部ネットワークとの通信が発生する処理なら全て同じエラーが発生する。
4.4.2. Security-Enhanced Linux
This reference environment has been set up and tested with Security-Enhanced Linux (SELinux) enabled in ENFORCING mode. Once again, please refer to the Red Hat documentation on SELinux for further details on using and configuring this feature. For any other operating system, consult the respective documentation for security and firewall solutions to ensure that maximum security is maintained while the ports required by your application are opened.When enabled in ENFORCING mode, by default, SELinux prevents Apache web server from establishing network connections. On the machine hosting Apache web server, configure SELinux it to allow httpd network connections:
# /usr/sbin/setsebool httpd_can_network_connect 1対処法
- 投稿日:2020-11-26T14:04:25+09:00
LinuxにDockerをInstallするAnsible-Galaxy
「ubuntu docker install」
「centos docker install」などをググって、Docker公式サイトより手動でインストールしていました。
毎回インストールするのは手間なので、自動化したいと思っていた矢先、
OSSで素晴らしいansible-galaxyを見つけましたので、紹介したいと思います。使用するansible-galaxy
Ansible Galaxy: https://galaxy.ansible.com/geerlingguy/docker
GitHub: https://github.com/geerlingguy/ansible-role-dockerAnsible Playbookを書いてみる
VirtualBox上にUbuntu20.04のVMを作成します。
Vagrantを用いて、Provisioning ToolとしてAnsibleを使用し、そのPlaybookでDockerをインストールします。Vagrantfileを作成する
以下の
Vagrantfile
を作成します。
IPアドレスは192.168.0.3/24
としてあります。# -*- mode: ruby -*- # vi: set ft=ruby : VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.define "ansible-docker" do |node| node.vm.box = "bento/ubuntu-20.04" node.vm.hostname = "ansible-docker" node.vm.network "private", ip: "192.168.0.3", netmask: "255.255.255.0" node.vm.provider "virtualbox" do |vb| vb.memory = "1024" end end config.vm.provision "ansible" do |ansible| ansible.playbook = "./install_docker.yml" ansible.inventory_path = "./inventory.ini" ansible.limit = 'all' end endroleをインストールする
rolesディレクトリを作成して、その中に今回使用するroleをインストールします。
mkdir roles ansible-galaxy install geerlingguy.docker -p roles/InventoryとPlaybookを作る
inventory.ini
[ansible-docker] 192.168.0.3
install_docker.yml
--- hosts: all roles: role: geerlingguy.docker become: yesPlaybookを実行する
ディレクトリ構造は以下のようになっています。
. ├── Vagrantfile ├── install_docker.yml ├── inventory.ini └── roles └── geerlingguy.docker ├── LICENSE ├── README.md ├── defaults │ └── main.yml ├── handlers │ └── main.yml ├── meta │ └── main.yml ├── molecule │ └── default │ ├── converge.yml │ └── molecule.yml └── tasks ├── docker-compose.yml ├── docker-users.yml ├── main.yml ├── setup-Debian.yml └── setup-RedHat.yml以下のコマンドでVM作成します。(ホストOSでAnsible実行環境が整備されている必要があります。)
vagrant up
docker
,docker-compose
がインストールされていることを確認できます。vagrant@ansible-docker:~$ sudo docker -v Docker version 19.03.12, build 48a66213fe vagrant@ansible-docker:~$ sudo docker-compose -v docker-compose version 1.26.0, build d4451659
- 投稿日:2020-11-26T11:58:52+09:00
ubuntu20.04のlibvirtdで--listenできない
KVMを使って仮想化しようと思い、libvirtdを設定した際、いつも通り
/etc/default/libvirtd
をlibvirtd_opts="-l"
にしてリスタートしたところ、libvirtd[3872]: --listen parameter not permitted with systemd activation sockets, see 'man libvirtd' for further guidance systemd[1]: libvirtd.service: Main process exited, code=exited, status=6/NOTCONFIGURED systemd[1]: libvirtd.service: Failed with result 'exit-code'. systemd[1]: Failed to start Virtualization daemon. systemd[1]: libvirtd.service: Scheduled restart job, restart counter is at 2. systemd[1]: Stopped Virtualization daemon.と吐いて上手く起動できない。
メッセージの通り、
man libvirtd
して確認したところ、OPTIONS ... -l, --listen Listen for TCP/IP connections. This should not be set if using systemd socket activation. Instead activate the libvirtd-tls.socket or libvirtd-tcp.socket unit files. ...との事。
libvirtdのバージョン5からは
-l
は使えませんので、libvirtd-tcp.socket
使ってね。という事らしい。
しかも、libvirtd.serviceが起動する前に起動させないとならないので、/lib/systemd/system/libvirtd.service
を編集[Unit] ... Wants=libvirtd-tcp.socket ←追記 ...適用します。
# systemctl daemon-reloadlibvirtd-tcp.socketの自動起動を有効にします。
# systemctl enable libvirtd-tcp.socket念のため、システムを再起動させます。
無事にtcp16509をlistenしている事が確認できました。
※PIDが1/initでちょっとキモイ
- 投稿日:2020-11-26T01:43:05+09:00
【Linux】ブートプロセスについて
低レイヤーの学習が疎かだったので勉強中。
定期的にアウトプットしていこうと思う。TL;DR
Linuxの起動順序(ブートプロセス)は
【BIOS/UEFI → ブートローダ → カーネル → init】
の流れで行われる。1. BIOS起動〜ブートローダ起動
【BIOSとは】
ファームウェアの一つ。Basic I/O Systemの略でBIOSらしい。
最もハードウェアに近い部分を司り、物理的なハードウェア(マザーボード)上に搭載されている。BIOS自身はプログラムであり、フラッシュメモリ(フラッシュROM)に格納されている。主に以下の設定ができる。
- 日付と時刻
- 電源管理
- 起動デバイスの優先順位
- 組み込みデバイスの有効/無効化
【処理の流れ】
1-1. PCの電源投入と同時にBIOS実行
これはそのまんまの意味。
BIOSはフラッシュメモリに格納されているため、何度も繰り返し書き込みができ、通電をやめても記憶内容が維持される。1-2. POST処理
PCに接続している周辺機器(ビデオ、キーボード、メモリ、マウス、FDD、HDDなど)や組み込まれているパーツをチェックし、正常にPCを起動できるかどうかをチェックする。このことをPOST(Power On Self Test)処理というらしい。
1-3. 起動ドライブの決定
プログラムが動作し、設定された起動デバイスの優先順位に従ってOSが格納された外部記憶装置へアクセス。
BIOS → CD-DVD (優先順位:高) → HDD_01 → HDD_02 → HDD_03 → USB (優先順位:低)参照先のデバイスにOS起動ファイルがあればそいつに引導を渡し、空だったり起動用ファイルが無い場合はBIOSは次のデバイスを参照する。この過程で起動ドライブが決定し、BIOSはそのドライブの先頭セクタをロードする。
1-4. MBR読み込み ~ ブートローダ起動
起動ドライブ先頭領域(MBR)に記録されたOS起動用のプログラム(2次ブートローダ)を主記憶装置(メインメモリ/RAM)に読み込み、制御を移す。メモリ上に読み込んだ「ブートローダ」を実行する。
【MBRとは】
Master Boot Recordの略称であり、ハードディスクの先頭セクタに置かれ、PC起動時に最初に読み込まれる領域。
【ブートローダとは】
BIOSによる呼び出しを受け、外部記憶装置からOSを読み出して起動するもの。
ブートローダはプログラムであり、実際には二段階の異なるプログラムに分かれていることが多い。一般的に「ブートローダ」と言われているものは「二次ブートローダ」であり、前述したBIOSなどが「一次ブートローダ」という言葉で説明されるようなこともある。Linuxでは一般的にGRUBというブートローダが用いられることが多い。
ユーザがどれか1つのOSを選択すると、GRUBはそのOSのカーネルとRAMディスクをメモリ上にロードし、カーネルの先頭アドレスにジャンプするとその役目を終える。
2. カーネル起動
- 高度にハードウェアを認識・制御。ルートファイルシステムのマウントなど様々な初期化処理を行う。
- メモリ上に展開された初期RAMディスク内の、ファイルシステムへアクセスするために必要なドライバやスクリプトを使用してルートファイルシステムからマウントする
- その後、initと言う特別な最初のプロセスをルートファイルシステムから起動する。
3. initプロセス起動
initは、UNIXおよびUnix系システムのプログラムのひとつであり、他の全てのプロセスを起動する役目を持つ。
デーモンとして動作し、一般にPID 1 を付与される。ブートローダがカーネルを起動し、カーネルがinitを起動する。という流れになる。initの種類
BSD系/System V系のOSかによって異なる
initの代替
設計上の限界に対処するために、様々な代替が開発されてきた。
代表的なものとして
- Upstart
- systemd
がある。
その他
UEFI,GPTという存在について
実はBIOSはもう古くて、現在はUEFIというものに変わりつつある。
(UEFIはUnified Extensible Firmware Interfaceの略)
こいつは従来のBIOSを拡張した新しいファームウェアで、
- GUI操作をサポート
- ファームウェアが使用可能なメモリ量の上限緩和
などといった点でBIOSより優れている。
その他にもBIOSとUEFIの違いはいくつかあるが、その内のひとつとしてMBRとGPTがある。
HDDやSSDのディスクの先頭には、MBRかGPTというディスクのパーティション形式を規定する領域があり、
- BIOSでインストールするとMBR
- UEFIでインストールするとGPT
になる。システムドライブのパーティション形式は必ずこのようになり、前者をBIOSブート、後者をUEFIブートとも言う。
この辺の違いについても、後日追って書くようにしていきたい。