CentOS(ConoHa) Mattermostテンプレート

ConoHa設定

実験のため、ConoHa メモリ1GBプランでMattermostのテンプレートを立ち上げてみた。

SSHキー設定し忘れたのでrootパスワードを利用し、TeraTermから接続。

CentOS(ConoHa) 初期設定 独自ドメイン

CentOS(ConoHa) 初期設定 LAMP

SSH接続とファイアーウォール設定あたりを実行。

Mattermostの設定

ブラウザからアクセスし、メールアドレス、ユーザー名、パスワードを決め、チーム(Create a team)を作成する。ここで、チーム名とURLを決める。

・日本語化

メニュー>Account Settings>Display>Language
日本語に変更

システムコンソール>言語>
デフォルトのサーバー言語、デフォルトのクライアント言語の2つを
日本語に変更

・トークン発行

システムコンソール>統合機能管理
パーソナルアクセストークンを有効にする

メニュー>アカウントの設定>セキュリティ>パーソナルアクセストークン
トークンを生成する

C#にてRestAPIを利用するサンプル

Ubuntu Rocket Chatインストール

同じようなソフトのRocketChatの場合。
少し操作してみただけで利用していない。

・インストール

snap install rocketchat-server

・ufw

ufw allow 3000/tcp
ufw reload

・アンイストール

snap remove rocketchat-server

・ufw

ufw status numbered(番号確認)
ufw delete 番号
ufw reload

CentOS(ConoHa) 初期設定 LAMP

久しぶりにConoHaにてCentOSのインスタンスを作成。

コントロールパネル

インスタンス作成時、SSH Keyだけ作成し、その他はデフォルトのまま。

左側メニューのサーバー>インスタンスのネームタグ
クリックすると詳細が見れるので、IPアドレスを確認する。

公開鍵で、TeraTermとWinSCPで接続できるように設定する。

Ubuntu セキュリティ関連設定

Apache

インストールされているか
yum list installed | grep httpd

インストール
yum -y install httpd

状態
service httpd status

起動(初期設定ではスタートアップしない)
service httpd start
OR
systemctl start httpd

スタートアップ設定
systemctl enable httpd

パス
/var/www/html
/etc/httpd/conf/httpd.conf

ファイアーウォール設定
firewall-cmd –add-service=http –permanent
firewall-cmd –reload

PHP

・インストール

何が入っているか確認する場合。
yum list installed | grep php

PHP関連のパッケージを削除する場合。
yum remove php-*

個別で何が入るか。

yum -y install php
php.x86_64
php-cli.x86_64
php-common.x86_64
php-fpm.x86_64

yum -y install php-devel
php-devel.x86_64

yum -y install php-pdo
php-pdo.x86_64

yum -y install php-gd
php-gd.x86_64

yum -y install php-mbstring
php-mbstring.x86_64

yum -y install php-mysqlnd
php-mysqlnd.x86_64

yum install php-json
php-json.x86_64

実際は、
yum -y install php php-devel php-pdo php-gd php-mbstring php-mysqlnd
のようにする。

必要な場合下記等も追加。
php-xml.x86_64
php-xmlrpc.x86_64
php-pecl-mcrypt.x86_64
php-pecl-mysql.x86_64

・Apacheの再起動

systemctl restart httpd

MySQL

・MariaDBの削除
sudo yum remove mariadb-libs
sudo rm -rf /var/lib/mysql

・リポジトリの追加
sudo rpm -ivh http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm

・MySQLのインストール
sudo yum install mysql-community-server

・バージョン確認
mysqld –version

・起動
sudo systemctl start mysqld.service

・自動起動
sudo systemctl enable mysqld.service

・rootのパスワード設定

pass=$(head /dev/urandom | tr -dc a-km-np-z2-9 | head -c 13); sudo mysql -u root -e “alter user root@localhost identified by ‘${pass}'”; echo $pass;

・文字コード変更

/etc/my.cnf
の中で以下のように修正。

[mysqld]
character-set-server = utf8
default_password_lifetime = 0

再起動
sudo systemctl restart mysqld.service

・MySQL Workbench

基本的に操作はWorkbenchから。

今回は外部にポート開けていないので、SSHポートフォワーディングで接続。

・Connection Method:Standard TCP/IP over SSH
・SSH Hostname:サーバーIPアドレス
・SSH User:root
・SSH Key File:鍵ファイル
・MySQL Hostname:127.0.0.1
・MySQL Server Port:3306
・Username:root
・Password:MySQLのrootパスワード

このような感じ。

WordPress

cd /var/www/html
sudo curl -LO http://ja.wordpress.org/latest-ja.tar.gz
sudo tar xzf latest-ja.tar.gz
sudo mv wordpress blog
cd blog
sudo cp wp-config-sample.php wp-config.php
sudo vim wp-config.php

以下を設定

define(‘DB_NAME’, ‘wpd’);
define(‘DB_USER’, ‘wpd_user’);
define(‘DB_PASSWORD’, ‘+6xya6=)RKn2+6xya6=)RKn2’);

apache用

sudo chown -R apache:apache /var/www/html/blog

最終処理

http://192.168.102.6/blog/wp-admin/install.php
にアクセス。

Ubuntu MySQLバックアップ(cron,rsync)

cron

以下の3つの方法がある。

***

cd /etc/cron.d

拡張子がないファイルを直接保存する。
rootで644にする。

・記述方法

分 時 日 月 曜日 実行ユーザ 実行コマンド
となる。

(-)ハイフンでつなげて範囲を指定することもできるし、(,)カンマで区切って複数指定することもできる。(*)アスタリスクは全ての範囲という意味。

指定した数字は間隔ではなく、その数字と同じ値のときに実行されるという意味。間隔は(/)スラッシュで指定できる。

日と曜日については、2つとも(*)アスタリスクなら毎日。どちらか指定があればその指定した日となる。2つとも指定があればいずれかに当てはまる日となる。

指定がない場合の実行間隔は1分。例えば、 * */1 * * * とすると、(時=/1)は1時間ごとだが、(分=*)が1分ごと(*は全範囲)という意味なので、1分ごとになる。1時間ごとにしたい場合、0 * * * * のようにすればOK。ちなみに、(/)スラッシュを削除しただけの場合どうなるかというと、* 1 * * * となり、(時=1)なので、1時だけと思いがちだが、(分=*)が1分ごとなので、1:00から1:59まで1分ごとに実行されてしまう。

状態確認
sudo systemctl status cron

ログ確認
journalctl -e -u cron
uオプション:サービス指定
eオプション:最新のみ表示

***

/var/spool/cron/ユーザー名

ユーザー単位で管理される。
コマンドで管理する。

・基本コマンド

一覧
crontab -l

設定がなければ、crontab -e
で作成。

削除
crontab -r

編集
crontab -e

ユーザーの指定は不要。

***

/etc/crontab

root権限で管理される。

以下のファイルを変更すると反映される。

毎時実行
/etc/cron.hourly 
毎日実行
/etc/cron.daily
毎週実行
/etc/cron.weekly
毎月
/etc/cron.monthly

***

・タイムゾーン設定

sudo timedatectl set-timezone Asia/Tokyo
確認の場合、
sudo timedatectl
変更したら、
sudo systemctl restart cron

rsync

rsync オプション コピー元 コピー先
コピー元の最後に/があるとフォルダの中身だけ、/がないとフォルダ自身も含めてとなる。同期先の/は関係ない。

共有にバックアップでフルアクセスにしたい場合、
rsync -p –chmod=a+rwx -r src dst
chmodとpが必要でハマった。

送信元に無いファイルを削除、特定のファイルを除外する場合、
–exclude=’xxx’ –delete

・rsync + ssh

転送先で鍵作成
sudo ssh-keygen -t rsa

ファイル名を聞かれるのでidとする。パスフレーズも聞かれるが指定しない。

秘密鍵:id、公開鍵:id.pubが生成される。

公開鍵の内容は転送先にある
.ssh/authorized_keys
に記載する必要があるので、
sudo cat id.pub >> .ssh/authorized_keys
もし、
.ssh配下にauthorized_keysがない場合は、
mv id.pub authorized_keys
などとしてもOK。作成した場合、パーミッション注意
chmod 600 authorized_keys

(すでに.ssh/authorized_keysがある場合、複数可なので追記する)

秘密鍵:idを転送元に持ってくる。ここではid.keyという名前にしておく。
必要な場合、
sudo chown root:root id.key
sudo chmod 400 id.key

転送元で以下のように実行すればOK。

sudo rsync -auz -e “ssh -i /home/ubuntu/id.key” /home/ubuntu/mysql/ ubuntu@転送先アドレス:/home/ubuntu/share

MySQLのバックアップ

・rsyncスクリプト

sudo vim /home/ubuntu/backup.sh
にファイルを作成する。

所有者rootでパーミッションは700
sudo chmod 700 /home/ubuntu/backup.sh

フォルダを作成する
mkdir /home/ubuntu/mysql

・cron設定

/etc/cron.d
の中に、
適当な名前でファイル作成、今回は
sudo vim /etc/cron.d/mysql_backup
とする。

所有者rootで、パーミッションは644(rw/r/r)

中には、
0 2 * * * root /home/ubuntu/backup.sh
と記入する。

起動しているかどうか
sudo systemctl status cron

手動バックアップの場合

mysqldump –single-transaction –skip-lock-tables -u ユーザー名 -pパスワード -h ホスト名 db名 > xxx_date +%Y%m%d.sql

Ubuntu(Indigo) Postfix+Dovecot

とりあえず確認方法として以下の通り。他のレンサバで実行してみた。

MTA確認
alternatives –display mta

sendmailの場合、
“/etc/alternatives/mta -> /usr/sbin/sendmail.sendmail”

Postfixの場合、
“/etc/alternatives/mta -> /usr/sbin/sendmail.postfix”

もし切り替えるなら
alternatives –config mta

Courier-IMAPのバージョン
/usr/lib/courier-imap/bin/imapd –version

ドメイン取得

今回はムームーでドメイン取得。

ドメイン操作>ムームーDNS
対象ドメインの変更をクリック。

サブドメイン / 種別 / 内容
* / TXT / v=spf1 +ip4:xxx.xxx.xxx.xxx ~all
* / A / xxx.xxx.xxx.xxx
空白 / TXT / v=spf1 +ip4:xxx.xxx.xxx.xxx ~all
空白 / A / xxx.xxx.xxx.xxx
空白 / MX / domain.com
このような感じで登録。

Postfix

・インストール

sudo apt install postfix

Please select the mail server configuration type that best meets your needs
と表示される。

Internet Site(インターネットサイト)
を選択。

次の画面では、
The “mail name” is the domain name used to “qualify” _ALL_ mail address …
等々表示される。

ここではドメイン名を入力。

・設定

sudo vim /etc/postfix/main.cf

myhostname = ドメイン名
に変更する。

DNSで正引きできないと、宛先のメールサーバーから受信拒否されるので、DNSで正引きできる(=Aレコードが存在する)

ちなみに、完全修飾ドメイン名を指定する。
(サブドメインなどを省略しないことアドレス)

mydomain / 指定無し
指定しなければ、デフォルトで$myhostnameから算出される。

myorigin = /etc/mailname
投函されたメールがどのドメインから来るように見えるか。

inet_interfaces = all
リッスンするインターフェース。送信のみで受信しないならlocalhostでもOK。

inet_protocols = ipv4
IPv4のみ

mydestination = $myhostname
自分が宛先(最終)になる場合のドメイン名を指定する。 メールアドレスの右側が mydestinationに一致すると、そのメールは他のサーバには配送せず処理する。 そこで存在しないユーザ宛の場合、エラーになり、送信者にエラーメールを返す。

mynetworks = 127.0.0.0/8 192.168.12.0/24
メールの転送することができる(許可するクライアント)IPアドレスリストを指定する。もし0.0.0.0/0 として、ufwで25を許可すると、スパムメールの踏み台となる。

今回はVPNで固定IPなので、
mynetworks = 127.0.0.0/8 192.168.12.2
と言う感じでもOK。

home_mailbox = mail/
これで/home/ubuntu/mailにメールが入る。

ちなみに、デフォルト状態では環境にもよるが、
/var/mail/ユーザ名
にmbox形式で入る。

再起動
sudo systemctl restart postfix

起動設定
sudo systemctl enable postfix

・ポート開放

sudo ufw allow 25/tcp
sudo ufw reload

ここまでやると、ユーザー名@ドメインで受信できる。
必要ならユーザーを追加する。

・ここで試しに送信。

> sendmail -t
From: xxx
To: xxx
Subject: xxx
xxx
. (最後は.でEnter)

・サブミッションポート有効化する場合

sudo vim /etc/postfix/master.cf

コメントアウト削除(今回は不要)
submission inet n – n – – smtpd

今回はSASL認証を利用しない(クライアントとVPNでつながっているので、mynetworksでローカルアドレスのみ許可しているが、通常はSASL認証を設定する)が、通常は以下のように設定する。

-o smtpd_sasl_auth_enable=yes
SMTP Authを有効

-o smtpd_recipient_restrictions = permit_sasl_authenticated, reject
転送要求の可否(SMTP Auth で認証が確認された接続を許可)

-o smtpd_client_restrictions = permit_sasl_authenticated, reject
接続要求の可否(SMTP Auth で認証が確認された接続を許可)

・ポート開放(今回は不要)

sudo ufw allow 587/tcp
sudo ufw reload

Dovecot

ここまでデフォルトユーザーで作業してきたが、メールアドレスを作成(ユーザー作成)して作業する。

ユーザー作成
sudo useradd -s /sbin/nologin okamura

パスワード設定(ワンライナー)
pass=$(head /dev/urandom | tr -dc a-km-np-z1-9 | head -c 13); sudo echo okamura:${pass} | sudo chpasswd; sudo echo $pass;

ここでokamuraを作成した。

Maildir作成
/home/okamura/mail
にディレクトリを作成し、所有者を変更

sudo chown -R okamura:okamura okamura

・インストール

sudo apt install dovecot-common dovecot-pop3d
必要なら、 dovecot-imapd

・設定

etc/dovecot/conf.d
が基本ディレクトリ

IPv6をListenしない
sudo vim /etc/dovecot/dovecot.conf

listen = *

sudo vim /etc/dovecot/conf.d/10-master.conf
port = 110

プレーンテキスト認証も許可
sudo vim /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = no

ディレクトリを設定
sudo vim /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:~/mail

起動
sudo systemctl start dovecot
sudo systemctl enable dovecot

・ポート開放

sudo ufw allow from 192.168.12.2 to any port 110 proto tcp
sudo ufw status

メーラーからの接続

VPNが192.168.12.1でクライアントが192.168.12.2

SoftEther Ubuntu/Win インストール

になっている状態で、
SMTP/POP3サーバー:192.168.12.1
ユーザーID:okamura
で接続できる。

 

Ubuntu apt(カーネルパッチ)

sudo apt upgrade
にて、以下のようなメッセージがでた。
A new version of /boot/grub/menu.lst is available, but the version installed currently has been locally modified

選択肢としては以下。

・install the package maintainer’s verstion
パッケージメンテナのバージョンをインストール

・keep the local version currently installed
現在インストールされているローカルバージョンを保持

・show the differences between the versions
バージョン間の差異を表示

・show a side-by-side difference between the versions
バージョン間の差異を並行表示

・show a 3-way difference between available vertions
利用可能なバージョン間の3種類の差異を表示

・do a 3-way merge between available versions
利用可能なバージョン間での3種類マージを行う (実験的)

・start a new shell to examine the situation
状況を検討するための新しいシェルを起動

***

・install the package maintainer’s verstion
を実行したが、一応、
sudo vim /boot/grub/menu.lst
をメモしておくと。

●旧

title Ubuntu 18.04.1 LTS, kernel 4.15.0-43-generic
root (hd0)
kernel /boot/vmlinuz-4.15.0-43-generic root=LABEL=cloudimg-rootfs ro console=hvc0
initrd /boot/initrd.img-4.15.0-43-generic

title Ubuntu 18.04.1 LTS, kernel 4.15.0-43-generic (recovery mode)
root (hd0)
kernel /boot/vmlinuz-4.15.0-43-generic root=LABEL=cloudimg-rootfs ro single
initrd /boot/initrd.img-4.15.0-43-generic

●新

title Ubuntu 18.04.5 LTS, kernel 4.15.0-123-generic
root (hd0)
kernel /boot/vmlinuz-4.15.0-123-generic root=LABEL=cloudimg-rootfs ro console=hvc0
initrd /boot/initrd.img-4.15.0-123-generic

title Ubuntu 18.04.5 LTS, kernel 4.15.0-123-generic (recovery mode)
root (hd0)
kernel /boot/vmlinuz-4.15.0-123-generic root=LABEL=cloudimg-rootfs ro single
initrd /boot/initrd.img-4.15.0-123-generic

title Ubuntu 18.04.5 LTS, kernel 4.15.0-122-generic
root (hd0)
kernel /boot/vmlinuz-4.15.0-122-generic root=LABEL=cloudimg-rootfs ro console=hvc0
initrd /boot/initrd.img-4.15.0-122-generic

title Ubuntu 18.04.5 LTS, kernel 4.15.0-122-generic (recovery mode)
root (hd0)
kernel /boot/vmlinuz-4.15.0-122-generic root=LABEL=cloudimg-rootfs ro single
initrd /boot/initrd.img-4.15.0-122-generic

title Ubuntu 18.04.5 LTS, kernel 4.15.0-43-generic
root (hd0)
kernel /boot/vmlinuz-4.15.0-43-generic root=LABEL=cloudimg-rootfs ro console=hvc0
initrd /boot/initrd.img-4.15.0-43-generic

title Ubuntu 18.04.5 LTS, kernel 4.15.0-43-generic (recovery mode)
root (hd0)
kernel /boot/vmlinuz-4.15.0-43-generic root=LABEL=cloudimg-rootfs ro single
initrd /boot/initrd.img-4.15.0-43-generic

となった。

現在のカーネルのバージョン確認方法
uname -r
4.15.0-123-generic

Ubuntu(Indigo) 初期設定

IndigoにUbuntuを設定+ローカルにあるSQLiteをIndigo上のMySQLにエクスポートする実験。

インスタンス生成

ダッシュボード>インスタンス管理>インスタンス
からインスタンス生成し、起動する。

表示されているIPアドレスにTeraTermから接続

TeraTerm 起動マクロ

SSH接続

公開鍵方式でのSSH接続、OSでUbuntuを選択すると、自然とユーザー名はubuntuとなる。

公開鍵で、TeraTermとWinSCPで接続できるように設定する。

Ubuntu セキュリティ関連設定

MySQL

・インストール
sudo apt install mysql-server

(インストール後、起動+自動起動するようになっている)

・バージョン確認
sudo mysql –version

・起動、他
sudo systemctl (start|stop|restart|status)  mysql

・my.cnfを探す
sudo mysql –help | grep my.cnf
今回は
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

・(外部から接続する場合)bind-addressをコメントアウト。
ここで指定したIPアドレスのみ接続を受け付ける。接続元のIPアドレスがわかる場合は指定しても大丈夫だが、複数のIPアドレスは指定できない。

(my.cnfを変更した場合、再起動)

MySQLのrootアカウントは標準でauth_socket認証しており、パスワード設定しても、パスワード無しでログインできる。ここで少しつまづいた。
(sudo mysql -u rootとすれば入れる)

・文字コード確認
sudo mysql -u root
show variables like ‘char%’;

・文字コード変更

今は最初からutf8mb4になっている。
もしなっていない場合、mysqld.cnfに下記を追加する。

これで、utf8に変わる。

・DB作成
sudo mysql -u root
create database check_sheet character set utf8mb4;

・ユーザー作成

(外部から接続する場合ホストは%としておく)
create user ‘app_user’@’%’;

※同時にパスワードを設定する場合、
create user ‘app_user’@’%’ identified by ‘1234’;
auth_socket認証とする場合、
create user user@host identified with auth_socket;

・ユーザー削除
drop user ‘app_user’@’%’;

・ユーザー一覧
select user, host, authentication_string, plugin from mysql.user;

・権限設定
grant create,drop,alter,select,insert,update,delete on check_sheet.* to ‘app_user’@’%’;

これを実行しないと作成したユーザーでDBが操作できない。

・権限確認
show grants for ‘app_user’@’%’;

・権限削除
revoke all, grant option from ‘app_user’@’%’;

・パスワード設定

シェルからワンライナーの場合
pass=$(head /dev/urandom | tr -dc a-km-np-z1-9 | head -c 13); sudo mysql -u root -e “alter user ‘app_user’@’%’ identified by ‘${pass}'”; echo $pass;

あるいは、
alter user ‘app_user’@’%’ identified by ‘2345’;
set password for ‘app_user’@’%’ = ‘2345’;

MySQL SSL接続

・状態確認
show variables like ‘%ssl%’;

初回起動時に、mysql_ssl_rsa_setup()が実行され、このようにSSLが有効になっていた。MySQLのデータディレクトリ以下に生成される。

ca.pem:自己署名CA証明書
ca-key.pem:CA秘密鍵
server-cert.pem:サーバ用公開鍵
server-key.pem:サーバ用秘密鍵
client-cert.pem:クライアント用公開鍵
client-key.pem:クライアント用秘密鍵
private_key.pem:caching_sha2_password, sha256_password用秘密鍵
public_key.pem:caching_sha2_password, sha256_password用公開鍵

・データディレクトリ確認
show variables like ‘%datadir%’;

(後のコピーでも必要なので、ここで実行)
permission deniedとなるので、
sudo su
を実行する。

・データディレクトリに移動
cd /var/lib/mysql

・コピー+パーミッション変更

データディレクトリから、
client-cert.pem
client-key.pem
ca.pem (必要なら)
をダウンロードするため、先ずホームディレクトリにコピーする。
(これらのファイルはWorkbechで利用するけど、もしC#だけなら、そのまま変換するのでダウンロード不要)

今回は/var/lib/mysql/にあったので、コピーする。
cp /var/lib/mysql/client-cert.pem /home/ubuntu/client-cert.pem;
cp /var/lib/mysql/client-key.pem /home/ubuntu/client-key.pem;
cp /var/lib/mysql/ca.pem /home/ubuntu/ca.pem

・パーミッション変更

ダウンロードするのにパーミッション変更が必要なので、ホームディレクトリ(コピー先)に移動し、
chmod go+r ca.pem;
chmod go+r client-key.pem;
chmod go+r client-cert.pem

のようにする。

これでWinSCPなどでダウンロードできる。

・ユーザー戻す
su ubuntu

・SSLのユーザー状態確認
select user,host,ssl_type from mysql.user;

ssl_typeの部分を確認する。

・権限追加
alter user ‘app_user’@’%’ require X509;

・全ての権限を削除
revoke all, grant option from ‘app_user’@’%’;

requireで指定するオプションについて

・SSL
暗号化接続はサーバーのcert,keyのみなので、クライアントのcert,keyは指定しなくても大丈夫。

・X509
クライアントを証明する必要があるためクライアントにcert,keyを指定する必要がある。

ここの指定とは別にクライアント側からもオプションがある。

・DISABLED
・PREFERRED (default)
サーバが暗号化接続をサポートしている場合は暗号化接続。接続できない場合は通常の接続。
・REQUIRED
サーバー認証を行なって接続する。
・VERIFY_CA
サーバー認証とクライアント認証を行って接続する。

MySQL 外部からの接続

IPアドレスの指定がない、またはIPアドレスの指定をしたいが固定ではない場合、MySQLのbind-addressは複数指定できず、ユーザーのホスト部を頻繁に変更するのも手間なのでufwで弾くのが簡単。

sudo ufw allow 3306/tcp
sudo ufw reload

もしIPアドレスを指定したい場合

sudo ufw allow from IPアドレス to any port 3306 proto tcp
これで、特定のIPのみMySQLに接続できる。

IPアドレスが変更になったら、
sudo ufw status numbered
でNoを確認し、
sudo ufw delete 番号
(複数不可)
で該当ルールを削除し、再度、
sudo ufw allow from IPアドレス to any port 3306 proto tcp
で変更後のIPアドレスを指定する。

Apache+PHP

今回は利用しない。

Ubuntu Apache(PHP+MySQL) 設定

クライアント設定

GCP Cloud SQL(MySQL) 使い方

SQLiteをMySQLへエクスポート

とりあえず動かすためだけの設定で実際は細かく調整する必要がある

DB Browser for SQLiteにて、
ファイル>エクスポート>データベースをSQLファイルへ

・insert into にカラム名を保持
・insert文に複数行(VALUES)
にチェック。

・すべてをエクスポート
・古いスキーマを上書き(DROP TABLE した後に CREATE TABLE)
を選択して保存。(DROPしないと何度か実行するときに作成済みのテーブルが残ったりする)

それぞれデータの内容によって違うが今回は書き出したSQLファイルを下記の通り修正。

・先頭のBIGIN TRANSACTIONをSTART TRANSACTIONに変更。

・全てのダブルクォーテーションの削除。
テーブル名やカラム名がダブルクォーテーションで囲われているため。

・CREATE TABLEで型が抜けている部分にtextを追加。

・全ての型をtextに変更。
insertの部分でint等も空の部分がシングルクォーテーションになっているため

・PRIMARY KEY()を削除。
上の行末のカンマも削除

ファイルサイズが大きいので、WinSCPでアップロードし、
mysql -u root -p db名 < SQLファイル.sql
として実行。
※ちなみに、エクスポートは、
mysqldump –single-transaction -u ユーザ名 DB名 > 出力先ファイル名

Workbenchの場合、
Server>Data Import>Import from Self-Contained File
Default Target Schemaからデータベース名を選択しStart Importを実行。

ERROR 2006 (HY000) at line 1820: MySQL server has gone away
Operation failed with exitcode 1

というエラーがでた場合、
set global max_allowed_packet = 16777216;
(一時的)

インポート後にカラム1つずつデータ型を変更する。
alter table table_name modify column_name int not null primary key auto_increment;
のように処理し、
intに関しては、SQLiteで空文字が入ってしまっているとエラーがでるので、
update table_name set column_name = null where column_name = “”;
このようにした。

 

 

 

Arch Linux MariaDB

・先ずソースから挑戦

入ってなければ
pacman -S cmake
pacman -S ncurses

ソースをダウロードして解凍
tar zxvf mariadb-10.3.12.tar.gz
cd mariadb-10.3.12

cmake . -DCMAKE_INSTALL_PREFIX=/root/share/mariadb -DCMAKE_PREFIX_PATH=/var/lib/pacman/local/ncurses-6.1-6/ -DPLUGIN_TOKUDB=NO

(.はソースディレクトリでCMakeLists.txtが必要)
(DCMAKE_INSTALL_PREFIXはmake installしたときの配置先)

make -j 1
make -j install

パッと調べるとこんな感じのようだかエラーが出るので要調査。

・パッケージにて

pacman -S mariadb
mysql_install_db –user=mysql –basedir=/usr –datadir=/var/lib/mysql

Arch Linux カーネルのコンパイル

・カーネルバージョン確認

uname -r

・カーネルソース保存

wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.9.99.tar.gz

・シンボリックリンク

ln -s linux-4.9.99 linux

・コンフィグ作成

make clean && make mrproper
今までconfigで設定した内容の消去を行う。初期化。

Archのデフォルト設定を利用する場合。
zcat /proc/config.gz > .config

あるいは、

make localmodconfig
ゲストOS内で現在ロードされているカーネルモジュール情報から
カーネルに読みこまれていないmoduleを無効にした設定をおこなう。

・その他コンフィグ

必要な場合。

make oldconfig
今あるconfig使って、新しい設定だけを問い合わせてくるというものがある。

make config
対話型のコンフィギュレータ

make menuconfig
メニューベースのコンフィギュレータ

make xconfig
Xベースのコンフィギュレータ

・コンパイル

make

今回はbcが無いとエラーがでた。

pacman -S bc

makeは時間がかかる。

・カーネルモジュールのコンパイル

make modules_install

以下にコピーされる。

/lib/modules/xxx

・bootディレクトリにカーネルをコピー

名前の前にvmlinuz-をつけるのは必須。
cp -v /usr/src/linux-4.9.99/arch/x86_64/boot/bzImage /boot/vmlinuz-linux49

・initramfs生成

mkinitcpioを利用。

mkinitcpio -k 4.9.99 -g /boot/initramfs-linux49.img

/lib/modules/xxxのソースディレクトリ名を使う。

・ブートローダーの設定

/boot/grub/grub.cfg

linux /vmlinuz-linux …
initrd /initramfs-linux.img
この部分を変更。

これで完了。

・カーネルモジュール

一覧
lsmod

内容確認
modinfo

ロード
insmod

アンロード
rmmod

ロード・アンロードの依存関係を自分で処理。
(lsmodのUsed byにて分かる)

依存関係を自動で処理する場合のロード・アンロード
modprobe xxx
modprobe -r xxx

Arch Linux VirtualBoxのディスクサイズ変更

・VirtualBox

cd C:\Program Files\Oracle\VirtualBox
VBoxManage.exe modifyhd “G:\VirtualBox VMs\Arch Linux\arch.vdi” –resize 20480

・ブートメディアで起動

・パーティーションサイズの変更
parted
p
resizepart xxx 100%

・デバイス名チェック
fdisk -l

・整合性チェック
fsck -f /dev/sda2

・ファイル
resize2fs /dev/sda2 [size]

Arch Linux 初期設定

今回はVirtualBoxにて実験

インストールメディアからブート

基本インストール

・キーボードレイアウト

loadkeys jp106

・パーティション確認

fdisk -l

・起動モード確認

ls /sys/firmware/efi/efivars

ディレクトリがあればUEFI

・パーティション作成

parted /dev/sda
mklabel msdos
mkpart primary ext4 1MiB 100MiB
mkpart primary ext4 100MiB 100%
q

・partedコマンド

p
確認

q
終了

rm
削除

・パーティションフォーマット

mkfs.ext4 /dev/sda1
mkfs.ext4 /dev/sda2

・マウント

mount /dev/sda2 /mnt
mkdir /mnt/boot
mount /dev/sda1 /mnt/boot

・リポジトリ変更

/etc/pacman.d/mirrorlist
日本のリポジトリを一番上に移動。

・ベースシステムインストール

pacstrap /mnt base base-devel

・fstab

genfstab -U /mnt >> /mnt/etc/fstab

・chroot

arch-chroot /mnt /bin/bash

・ロケール設定

/etc/locale.gen
コメントを解除
en_US.UTF UTF-8
ja_JP.UTF UTF-8

実行
locale-gen
echo LANG=en_US.UTF-8 > /etc/locale.conf

・キーマップ設定

/etc/vconsole.conf
追加
KEYMAP=jp106
FONT=lat9w-16

・タイムゾーン設定

ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

・ハードウェアとシステムの日時同期

hwclock –systohc –utc

・ホストネーム設定

echo vm > /etc/hostname

/etc/hosts
追加
127.0.0.1 localhost.localdomain localhost vm
::1 localhost.localdomain localhost vm

・DHCP有効化

systemctl enable dhcpcd

・rootパスワード設定

passwd
123

・GRUBインストール

pacman -S os-prober grub
grub-install –target=i386-pc –recheck /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg

・起動

exit
umount -R /mnt
reboot

・復旧する場合

起動メディアでブート

mount /dev/sda1 /mnt/boot
mount /dev/sda2 /mnt
arch-chroot /mnt

・VirtualBoxを含めネットワークの設定

VirtualBoxの設定でネットワークをブリッジに。
ncpa.cplからVirtualBoxのNICを192.168.11.200に。

・WiFiオン

wifi-menu -o

有線は自動でつながる

・IPアドレス確認

networkctl status

・DHCP停止

systemctl disable dhcpcd

・IPアドレス指定

/etc/systemd/network/static.network

[Match]
Name=enp0s3

[Address]
Address=192.168.11.201/24

[Network]
DNS=192.168.11.1

[Route]
Gateway=192.168.11.1

systemctl start systemd-networkd
systemctl start systemd-resolved
必要ならenable

・SSHインストール

pacman -S openssh
systemctl start sshd

/etc/ssh/sshd_config
追加
PermitRootLogin yes
AllowUsers root

・iptables設定

この段階では特に編集しなくてもつながる。

確認
iptables -L

/etc/iptables/iptables.rules
追加
-A INPUT -p tcp -m state –state NEW -m tcp –dport 22 -j ACCEPT

再起動
systemctl restart iptables

・vim

pacman -S vim

・samba

必要ならユーザー追加。今回はrootで処理。

useradd -c “Guest User” -d /dev/null -s /bin/false pcguest
chown pcguest:pcguest share

作成したユーザがパスにアクセスできること。

LAN向けなので、最低限

pacman -S samba

mkdir share
chmod ugo+rwx share

設定ファイル
vim /etc/samba/smb.conf

作成されない場合ArchLinuxのサイトにサンプルがあるので写す。
あるいは直接作成。

[global]
unix charset=UTF-8
dos charset=CP932
security = user
guest account = root
map to guest = bad user

[share]
path = /root/share
writable = yes
guest ok = yes
force create mode = 0777
force directory mode = 0777
share modes = yes
vfs objects = recycle

起動
systemctl start smb
systemctl start nmb
必要ならenable

動作確認
ss -ltnp

・dotnet

pacman -S dotnet-runtime
pacman -S dotnet-sdk
pacman -S aspnet-runtime

・pacmanコマンド

レポジトリ最新
-Syy

ソフト更新
-Syyu

レポジトリ検索
-Ss

ローカル検索
-Qs

インストール済みリスト
-Q

-S
インストール

-R
アンインストール

-Rs
依存も含みアンインストール

-Rns
アンイントール時のバックアップ削除

-Scc
インストール時のキャッシュ削除

-Sg
グループに含まれるパッケージ。

GUIの設定

・GUIとCUIの切り替え

Ctrl + Alt + F1,F2~

・グラフィックドライバ

環境にあわせて選択。
pacman -S xf86-video-intel
pacman -S xf86-video-amdgpu
pacman -S xf86-video-ati
pacman -S nvidia nvidia-utils

・調べ方

lspci | grep VGA

・xserver

pacman -S xorg-server
pacman -S xorg-xinit
pacman -S xorg-apps(必要なら)
pacman -S mesa(必要なら)

・キーコンフィグ

/etc/X11/xorg.conf.d/10-keyboard.conf
追加
Section “InputClass”
Identifier “Keyboard Defaults”
MatchIsKeyboard “yes”
Option “XkbLayout” “jp”
EndSection

・デスクトップインストール

pacman -S xfce4

echo “exec startxfce4” >> ~/.xinitrc

startx

・ロケール設定

/etc/locale.conf
追加(あるいは置換)
LANG=ja_JP.UTF-8

・フォントインストール

pacman -S otf-ipafont