CentOS(ConoHa) 初期設定 (2)

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

コントロールパネル

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

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

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

WinSCPはppk形式なので、pem→ppkが必要。

https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
から
puttygen.exe
を保存し、実行する。

Loadで鍵ファイルを読み込み、Save private keyで保存する。

firewalld

・定義済みゾーン確認

firewall-cmd –list-all-zones

publicゾーンにnicが割り当ててあるか確認。
(active)は有効かどうかという意味ではなく、ゾーン指定しないときの対象かどうかという意味。

・設定内容確認

firewall-cmd –list-all

・ターゲット

定義にマッチしないパケットをどうするかをターゲットといい、ACCEPT,DROP,REJECT(default)がある。

ACCEPT:全て許可。
DROP:拒否ルールに該当すると拒否。
REJECT:拒否ルールに該当すると拒否。(エラーコードを返す)

・登録済みのサービスを消す。

firewall-cmd –remove-service=dhcpv6-client –zone=public –permanent

・ポートを追加。

firewall-cmd –add-port=80/tcp –zone=public –permanent

・ポートを追加。(接続元を指定する場合)

firewall-cmd –permanent –zone=public –add-rich-rule=”rule family=ipv4 source address=192.168.13.2 port protocol=tcp port=80 accept”

削除する場合、addの部分をremoveにする。

・再起動

firewall-cmd –reload

SSH

vim /etc/ssh/sshd_config

・rootのパスワード認証を不可にする。

PasswordAuthentication no
ChallengeResponseAuthentication no

になっているかどうか確認。

ユーザーを追加し、
PermitRootLogin no
にするかrootのままにするなら、
PermitRootLogin without-password
にする。

・ポート番号変更

firewall-cmd –add-port=49152/tcp –zone=public –permanent
firewall-cmd –reload
ポートを開ける。

Port 49152
のように変更する。

systemctl restart sshd

現在の接続を切る前に接続できるか試す。

問題なければポートを閉じる。

firewall-cmd –remove-service=ssh –zone=public –permanent
firewall-cmd –reload

・再起動

systemctl restart sshd
systemctl enable sshd

yum

yum update
インストール済みのパッケージをアップロード

yum remove xxx
削除する場合

Apache

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

インストール
yum -y install httpd

起動
systemctl start httpd
systemctl enable httpd

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

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

・インストール

yum install mysql-server

・起動

systemctl start mysqld
systemctl enable mysqld

・設定

とりあえず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;

・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パスワード

このような感じ。

Vim

.vimrc

 

SoftEther VPN

SoftEther Ubuntu/Win インストール

Ubuntu cron+rsync

cron

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

***

/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

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

秘密鍵: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

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) 初期設定

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

SSH接続

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

ちなみに、コンソールではなく自分でSSH設定する場合。

TeraTerm>設定>SSH鍵生成
公開鍵(id_rsa.pub)、秘密鍵(id_rsa)を保存する。

サーバーホームディレクトリ>.ssh>authorized_keys
の中にid_rsa.pubの中身を貼り付け。
(他に書き込みがある場合、新しい行でも大丈夫)

ufw

最初は起動されていない

sshを許可
sudo ufw allow 22/tcp;
あるいは、
sudo ufw allow ssh;

一度だけ起動なら、
sudo ufw enable;
自動起動なら、
sudo systemctl enable ufw
あるいは、
sudo /etc/init.d/ufw start

再起動
sudo ufw reload;

状態
sudo ufw status;

MySQL

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

バージョン確認
sudo mysql –version

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

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

文字コード確認
show variables like ‘char%’;

| character_set_client | utf8
| character_set_connection | utf8 
| character_set_database | latin1 
| character_set_filesystem | binary 
| character_set_results | utf8 
| character_set_server | latin1 
| character_set_system | utf8 
| character_sets_dir | /usr/share/mysql/charsets/ 

mysqld.cnfに下記を追加する。
[mysqld]

character-set-server = utf8

これで、utf8に変わる。

| character_set_client | utf8 
| character_set_connection | utf8 
| character_set_database | utf8 
| character_set_filesystem | binary 
| character_set_results | utf8 
| character_set_server | utf8 
| character_set_system | utf8 
| character_sets_dir | /usr/share/mysql/charsets/ 

DB作成
create database db character set utf8;

ユーザー作成
mysql > create user user@host identified by ‘1234’;
ちなみに、auth_socket認証とする場合、
mysql > create user user@host identified with auth_socket;

MySQLのrootアカウントは標準でauth_socket認証しており、パスワード設定しても、パスワード無しでログインできる。ここで少しつまづいた。

権限設定(ユーザー作成)
mysql > grant select,insert,update,delete on db.table to user@host
ちなみに、ユーザーが存在しない場合作成されるので、
grant select,insert,update,delete on db.table to user@host identified by ‘1234’;
とすればパスワード付きで作成される。

権限設定(ユーザー作成)をシェルからワンライナー
pass=$(head /dev/urandom | tr -dc a-km-np-z1-9 | head -c 13); sudo mysql -u root -e “grant select,insert,update,delete on db.table to user@host identified by ‘${pass}'”; echo $pass;

権限確認
mysql > show grants for user@host;

権限削除
mysql > revoke all, grant option from user@host;

パスワード設定(変更)
mysql > alter user user@host identified by ‘2345’;
あるいは、
mysql > update mysql.user set authentication_string=password(‘3456′) where user=’user’;

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

アカウント情報確認
mysql > select host, user, authentication_string, plugin from mysql.user;

MySQL SSL接続

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

| have_openssl | YES
| have_ssl | YES
| ssl_ca | ca.pem
| ssl_capath
| ssl_cert | server-cert.pem
| ssl_cipher
| ssl_crl
| ssl_crlpath
| ssl_key

初回起動時に、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

データディレクトリから、
client-cert.pem
client-key.pem
ca.pem (必要なら)
をダウンロードする。

ユーザー状態確認
select user,host,ssl_type from mysql.user (anyはssl必須)
show grants for app_user@’%’;
select * from mysql.user where user=’app_user’ \G;

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

権限追加
grant all on *.* to app_user@’%’ identified by ‘123’ require X509; (SSL / X509)

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

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

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

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

MySQL 外部からの接続

接続もとが固定IPならいいが、そうではない場合、MySQLのbind-addressは複数指定できず、ユーザーのホスト部を頻繁に変更するのも手間なのでufwで弾くのが簡単。

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アドレスを指定する。

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

CentOS(ConoHa) 初期設定

VPS契約したので設定。
Ubuntu入れたと思ったけど、間違えてCentOSが入ってみたい。

過去記事参考

Ubuntu 初期設定

vimシンタックス

手元のWSHに入ってたので流用
/usr/share/vim/vim74/syntax/go.vim
同パスにコピー

.vimrcに追加
autocmd BufNewFile,BufRead *.go setfiletype go

サーバーにSSHで接続する

root@IPアドレス
パスワードは設定済みのrootパスワード

ユーザー作成

過去記事参考

Ubuntu ユーザー関連、パーミッション

とりあえずrootで作業中。

SSHの設定

過去記事参考

Ubuntu セキュリティ関連設定

設定ファイル
/etc/ssh/sshd_config

ポート変える(49152 – 65535辺り)

再起動
systemctl restart sshd

ちなみに

状態
systemctl status

自動起動有効
systemctl enable

自動起動無効
systemctl disable

独自ドメイン

・MuuMuu + Xserver

以前、MuuMuuで取得したドメインがあって、NSをXserverに指定したまま放置していたのでこのドメインを活用する。メールはそのままXserverで、wwwのみVPSに回す。

MuuMuuでXserverのネームサーバー(ns[1-5].xserver.p)を指定する。
Xserverのサーバーパネル>ドメイン設定
から対象ドメインを追加し、
サーバーパネル>DNSレコード設定
から編集する。

AタイプのIPアドレスをVPSのアドレスに変更する。通常はやらないけど今回はアスタリスクを使ったサブドメインとwww付きを消して1つにしてしまう。

MXはホスト名と内容が同じになっているので、ホスト名をそのまま独自ドメインで、内容をXserverのドメイン(xxx.xsrv.jp)にする。

ホスト名 | A | 210.xxx.xxx.xx | 0
ホスト名 | MX | xxx.xsrv.jp | 0

これでしばらく待つと独自ドメインからSSHアクセスできる。

・DNSレコードについて

A:
ドメインとIPv4を関連づける

MX:
メールサーバー

CNAME:
別名

TXT:
ドメインに関連づけるテキスト情報。主に、メール送信の認証(SPFレコード)に利用される。受信サーバは送信もとアドレスのドメインのTXTレコードを取得しチェックする。

・SPFレコードについて

version qualifier mechanism
という組み合わせになる。

・version:
v=spf1固定

・qualifier:
mechanismでマッチしたらそのメールをどうするかを記号で指定する。

+:
正当なメール

-:
不当なメール(配信しない)

~:
不当なメール(配信する)

?:
指定なし

・mechanism:
送信もとアドレスとマッチするデータを指定する。

ip4:
送信アドレスが一致するか

mx:
MXレコードのIPアドレスと一致するか

a:
AレコードのIPアドレスと一致するか

参考として、
*.domain.com/TXT/v=spf1 +ip4:xxx.xxx.xxx.xxx ~all
ここでは、
+ip4:xxx.xxx.xxx.xxx

~all
の2つが指定されている。

例えば、XserverのDNSレコードはどうなっているか。
*.domain.com/TXT/v=spf1 +ip4:xxx.xxx.xxx.xxx ~all
domain.com/TXT/v=spf1 +ip4:xxx.xxx.xxx.xxx ~all
domain.com/A/xxx.xxx.xxx.xxx
*.domain.com/A/xxx.xxx.xxx.xxx
domain.com/MX/domain.com

Nginx

今回はphp使わないので、初めてのNginxにて。
yum install nginx

基本のルート
/usr/share/nginx/html

コンフィグ
/etc/nginx/nginx.conf

コンフィグの中にincludeがあり、
conf.d以下を読み込んでいる。

アクセスログ
/var/log/nginx/access.log

ちょっとハマったのは、ドキュメントルートを変えたとき、
ファイル自体に読み取り権限、ドキュメントルートまでの各ディレクトリに
実行権限が必要ということ。

PHP-FPM

yum list installed
確認すると必要なものは入っていた

設定は以下。
/etc/nginx/conf.d/_http.conf
/etc/php7-fpm.d/www.conf

ほとん修正せず動作した。WSLで実行したページも参考

Ubuntu 初期設定

コマンド参考

Linux コマンド

firewalld

定義されているサービス
firewall-cmd –get-services

許可されている情報
firewall-cmd –list-all –zone=public
–list-all
–list-services
–list-port

リロード
firewall-cmd –reload

サービスを許可する
firewall-cmd –add-service=http –zone=public –permanent

許可したサービスを削除
firewall-cmd –remove-service=http –zone=public –permanent

許可するポートの追加
firewall-cmd –add-port=22/tcp –zone=public –permanent

許可するポートの削除
firewall-cmd –remove-port=22/tcp –zone=public –permanent

定義済みサービス(編集はしない)
/usr/lib/firewalld/services

定義済みゾーンの確認
firewall-cmd –list-all-zones

アクティブなゾーンの確認
firewall
cmd getactivezones

Nicに対するデフォルトゾーンの確認
firewall-cmd –get-default-zone

NICのゾーンを変える(permanetが不要という記事ある要確認)
firewall-cmd –change-interface=lo –zone=public

NICをゾーンから削除(permanetが不要という記事ある要確認)
firewall-cmd –remove-interface=lo

だいたいの流れ。本来サービス登録なんだろうけど。

登録済みのサービスを消す。
firewall-cmd –remove-service=http –zone=public –permanent
firewall-cmd –remove-service=ssh –zone=public –permanent
firewall-cmd –remove-service=dhcpv6-client –zone=public –permanent

必要なポート追加。
firewall-cmd –add-port=54424/tcp –zone=public –permanent
firewall-cmd –add-port=80/tcp –zone=public –permanent

MySQL設定

MySQL 基本SQL

など参考

旧バージョン削除(MySQL)

インストール済みかどうか
yum list installed | grep xxx

コンポネート探す
rpm -qa | grep xxx

完全削除
yum remove xxx

ファイル消す場合
rm -rf /var/lib/mysqlなど

インストール(MySQL)

リポジトリ更新(公式サイト)
curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash

yum -y install mariadb(clientとcommonが入る)
yum -y install mariadb-server

起動
systemctl start mariadb

自動起動
systemctl enable mariadb

mysql
cant connect to local mysql server through socket
ソケットが見つからないということだが、restartで直った。

ユーザ設定(MySQL)

ユーザー確認
select host, user, password,authentication_string from mysql.user;

権限確認
show grants for root@’localhost’;

ルートパスワード追加
alter user ‘root’@’localhost’ identified by ‘abc’;
(passwordに入る)

set password for ‘root’@’localhost’=password(‘123’);
(authentication_stringに入る)

passwordが古くauthentication_stringが新しいという記載が多いが、どちら入ったとしても動作しているが詳細不明。

パスワード削除
set password for ‘root’@’localhost’=password(”);

匿名ユーザを削除
drop user ”@’localhost’;

未使用ユーザ削除
drop user ‘root’@’::1′;
drop user ‘root’@’127.0.0.1’;

drop userについて、5.0.2以前はrevoke必要。

::1はIPv6におけるlocalhost

TCP経由は127.0.0.1で、ソケット経由はlocalhostとなるが、名前解決(skip_name_resolve)が有効だと、127.0.0.1もlocalhostになる模様。ただし、接続の方法によっては解決されない場合もある。

testデータベースを削除

drop database test;

文字コード設定(MySQL)

/etc/my.cnf.d/server.cnf

以下追加

[mysqld]
character-set-server = utf8

文字コード確認
show variables like ‘char%’;

ポート設定(MySQL)

設定確認
show variables like ‘%port%’;

リッスン状態確認
netstat -tanp

/etc/my.cnf.d/server.cnf

接続もとのIPを限定したい場合
bind-address
にて指定する。すべて受け付ける場合はコメントアウト。

待受ポート変更

[mysqld]
port = (49152 – 65535辺り)

個別(MySQL)

ユーザー作成
grant all on db1.* to ‘user1’@’%’ identified by ‘123’;

DB作成
create database db1 character set utf8;

WSL2 初期設定

WSL2のインストール

・WSLの有効化
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

・Virtual Machine Platformの有効化
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

上記2つはoptionalfeaturesから直接チェックしてもOK
・Linux用Windowsサブシステム
・仮想マシン プラットフォーム

・カーネルバージョンアップ
https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-kernel

デフォルトをWSL2に変更
wsl –set-default-version 2

・インストール後

最初の起動でユーザー名とパスワードを決める。

Window側からのルートへのアクセス
\\wsl$

バージョン確認
wsl –list –verbose

終了
wsl –shutdown

・SSH接続

sudo apt update
sudo apt install openssh-server

sudo systemctl start ssh
system has not been booted with systemd as init system …
というメッセージが表示される。

通常PID1がsystemdだが、WSL2においては/initがPID1になっている模様。

sudo /etc/init.d/ssh start
sshd: no hostkeys available — exiting.
というメッセージが表示される。

sudo ssh-keygen -A

sudo vim /etc/ssh/sshd_config
から
PasswordAuthentication yes

これでTeraTermからlocalhost:22で接続できる。

・リセットする場合
アプリと機能>Ubuntu>詳細オプション>リセット
スタートメニューにあるUbuntuから起動するとユーザー名、パスワード
を決めるところから。

.NET Core SDKのインストール

https://docs.microsoft.com/ja-jp/dotnet/core/install/linux-ubuntu
を参考にする。

wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb

sudo dpkg -i packages-microsoft-prod.deb

sudo apt-get update; \ sudo apt-get install -y apt-transport-https && \ sudo apt-get update && \ sudo apt-get install -y dotnet-sdk-3.1

・作成方法(WSL)

アプリ作成
dotnet new console -o myapp

実行
dotnet run
(myappの中で実行)

・作成方法(Visual Studio)

Visual StudioでASP.NET Core Webのプロジェクトを作成し、プロジェクトの右クリックから発行をして、WSL側のフォルダに保存。

転送フォルダにて、
dotnet WebApplication1.dll
を実行

・自動起動

WSLなので.profileに入れてプロセスと同時に立ち上げる。

/usr/bin/dotnet /mnt/g/Dropbox/Workspace/Bash/html/WebApplication1.dll > /dev/null 2>&1 &

テスト用のWordPressをインストールする

sudo apt-get update

・Apache2

インストール
sudo apt-get install apache2

起動
sudo /etc/init.d/apache2 start

・wget
sudo apt-get install wget

・PHP
sudo apt-get install php
sudo apt-get install libapache2-mod-php
sudo /etc/init.d/apache2 restart

とりあえずこれでPHPファイルは実行できるようになる。

・MySQL
sudo apt-get install mysql-server
sudo apt-get install php-mysql

データベース作成
mysql > set password = ‘1234’;
mysql > create database wpdb;

・WordPress
sudo wget https://ja.wordpress.org/latest-ja.tar.gz

解凍
sudo tar -zxvf latest-ja.tar.gz

/var/www/html(http://localhost/解凍フォルダ名)
にブラウザからアクセス。

wp-config.php ファイルに書き込みできません。
とでる場合。

まず、
/etc/apache2/envvars
を開き、
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
の部分でユーザー名を確認し、
sudo chown -R www-data:www-data 解凍フォルダ名
を実行する。

UbuntuをLiveCDから起動

もしsshがなければ、
sudo apt-get install openssh-server

起動する。
/etc/init.d/ssh start

パスワードが空なので、
passwd

パスワードを指定したらTeraTermなどでログインする。
ユーザー名はubuntuとなっている。

CentOS 初期設定

基本コマンド

・起動

CentOS6まで
/etc/init.d/xxx start (7は使えない)
service xxx start (7はsystemctlにリダイレクト)
CentOS7では
systemctlとなる。

・自動起動

CentOS6まで
chkconfig xxx on | off (7はsystemctlにリダイレクト)
CentOS7では
systemctlとなる。

yumとrpm

yumの内部でrpmが呼ばれている。

利用可能かどうかと、インストール済み両方表示。
yum list xxx

パッケージを探す
yum search xxx

パッケージ情報
yum info

yum -y install php
(-yは全てyes回答)

アップデート
yum update
yum update xxx

インストール済みでアップデートがあるかどうか
yum check-update

SSHの設定

基本はそのまま接続できるはず、VirtualBoxに接続の場合、
設定>ネットワーク>割り当て
をブリッジアダプターに変更して、自動取得のIPに繋げれば大丈夫。

SSHの状態確認
systemctl status sshd.service

ファイアーウォールの確認
firewall-cmd –list-all

PHPインストール

yum -y install php

vimrc

vimrcを作成し以下を記述。
Ubuntuとほぼ同じで自動補完の部分を削除。

bashrc

Ubuntuから必要最低限のみ持ってきた。

Apache

既に入っているが、なければ。
yum -y install httpd

状態
service httpd status

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

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

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

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

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

パスワードの確認
sudo cat /var/log/mysqld.log | grep password
以下のようなパスワードが自動で作成される
+6xya6=)RKn2

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

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

再起動
sudo systemctl restart mysqld.service

ログイン
mysql -u root -p’+6xya6=)RKn2′

仮パスワードを変更
SET PASSWORD = PASSWORD(‘+6xya6=)RKn2+6xya6=)RKn2’);
今後は、
mysql -u root -p’+6xya6=)RKn2+6xya6=)RKn2′

MySQL設定(WordPress用)

sudo yum install php-mysql php-mbstring

MySQLでデータベースを作成。

mysql> create database wpd;
mysql> grant all on wpd.* to wpd_user@localhost identified by ‘+6xya6=)RKn2+6xya6=)RKn2’;

GRANT 権限(all,selcet等) ON 範囲 TO user;

グローバル
ON *.*

データベース
ON db_name.*

テーブル
ON db_name.table_name

カラム
(カラム1, カラム2, …) ON db_name.table_name

ちなみにユーザー確認
mysql> select host, user from mysql.user;

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
にアクセス。

.NET Core

https://www.microsoft.com/net/learn/dotnet/hello-world-tutorial
を参考にする。

sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
sudo yum install dotnet-sdk-2.1

基本アプリ

dotnet new console -o myapp
cd myapp
dotnet run

ASP.NET CoreWeb

ASP.NET CoreWebアプリケーションのプロジェクトを作成。
Webアプリケーション(モデルビューコントローラー)を選択。
HTTPS用の構成のチェックを外す。

ビルド>xxxの発行
にて作成されたファイルを転送し、転送フォルダにて、
dotnet xxx.dll
のように実行する。

その他

dotnet –info
でバージョン確認できる。

FTPの設定

VSから発行したいのでFTPを入れる。

インストール
yum install -y vsftpd

設定ファイル
/etc/vsftpd/vsftpd.conf

変更
anonymous_enable=NO
listen=YES
listen_ipv6=NO
tcp_wrappers=NO

コメントアウト削除
ascii_upload_enable=YES
ascii_download_enable=YES
chroot_local_user=YES
ls_recurse_enable=YES

追加
use_localtime=YES
allow_writeable_chroot=YES

起動
systemctl start vsftpd

スタートアップ
systemctl enable vsftpd

ファイアーウォール
firewall-cmd –add-service=ftp –zone=public –permanent
firewall-cmd –reload
firewall-cmd –list-all –zone=public

ユーザー制御
userlist_enableを有効にすると、userlist_denyも有効になる。
ブラックリストがデフォなので対象のユーザー名を削除のみ実行。

ブラックリスト(デフォルト)
userlist_enable=YES
userlist_deny=YES or 記述なし

ホワイトリスト
userlist_enable=YES
userlist_deny=NO

ファイルのパス(必要なら)
userlist_file=/etc/vsftpd/user_list

userlist_enableを優先度が高い禁止リスト
/etc/vsftpd/ftpusers

user_listとftpusersから対象のユーザー名を削除する。

パーティションタイプ

パーティションタイプにMBRとGPTがあり、
MBRは2TB以下×4まで、GPTだと2TB以上×128可能

GPTに対応したOSじゃないと(Vista~64bit)じゃないと使えない
さらにUEFIじゃないと起動できない。

UEFIはBIOSの後継。

Ubuntu シンボリックリンク

シンボリックについて
apacheのconfの場合、
a2dissite、a2ensite
などの専用スクリプトが用意されている。

通常は、
ln -s 実体 リンク
で、
ln -s /home/okamura/ruby/asagao/public /home/okamura/www/app1
のよう記述する。

実体もリンクも最後にスラッシュを付けない。
リンクはフォルダではないので、最初から存在してはダメ。

リンク削除
unlink /home/okamura/www/app1

wget/curl コマンド

curl

curl -O “http://xxx.com/[0-20].pdf”

-O は表示ではなくファイル名そのまま。(ちなみにwgetで-Oは別名で保存)
-o は別名で保存する。
-L リダイレクトを追う。
-C – レジューム

レジューム保存
curl -o out.mp4 -L -C – http://

wget

-c ダウンロードを続きから。
-t リトライ回数指定する。(0は無制限)
-O 別名で保存する。
–retry-connrefused 接続拒否無視

wget -c -t 0 –retry-connrefused xxx

Ubuntu Java Tomcatインストール

インストール

sudo apt-get install defaut-jdk
java -version
今回は、1.8.0_121

sudo apt-get install tomcat7

sudo update-alternatives –list java
でJavaのパスを確認。

今回は、
/usr/lib/jvm/java-8-openjdk-i386/jre/bin/java
と表示される。

~/.profile
に以下を追記する。
JAVA_HOME=”/usr/lib/jvm/java-8-openjdk-i386/jre/bin/java”
PATH=”$JAVA_HOME/bin:$PATH”
CATALINA_HOME=”/usr/share/tomcat7″

profileの記述で違う方法として、
/etc/profile.d/java.sh
を作成し、
JAVA_HOME=”/usr/lib/jvm/java-8-openjdk-i386/jre/bin/java”
と追記し、
source ./java.sh
を実行する方法もある。今回はやらない。

ここで再起動。

echo $JAVA_HOME
で確認すると、
/usr/lib/jvm/java-8-openjdk-i386/jre/bin/java
と表示される。

ファイアーウォールの設定
sudo ufw allow 8080/tcp

ここまで来たら、
sudo /etc/init.d/tomcat7 restart
を実行。
http://192.168.102.15:8080/
にアクセス。

その他

設定ファイルの場所
sudo vim /etc/tomcat7/server.xml

Tomcatの状況確認
sudo /etc/init.d/tomcat7 status

もしeclipseでTomcatを操作する場合

http://www.eclipsetotale.com/tomcatPlugin.html#A3
から
tomcatPluginV331.zip
を保存し解凍して、
C:\eclipse\plugins
の中へ

Ubuntu USBメモリ操作

通常はUSBメモリを指すと自動でマウントされる。
/media/okamura/xxx
情報は、
df -hT
あるいは
lsblk
lsblk -i
で確認できる。

/dev/sdb1 が/media/okamura/xxx
にマウントされているのがわかる。

USBメモリはだいたい、
/dev/sda,
/dev/sdb,
/dev/sdc
などで認識される。

現在マウントしている情報は
df -hT
以外にも以下のような確認方法がある。
mount | less -S
cat /proc/mounts | less -S
cat /etc/mtab | less -S
sudo fdisk -l

手動でアンマウントする場合、
sudo umount /media/okamura/xxx

自動マウントしない場合、
sudo mount /dev/sdb1 /home/okamura/mnt
-tオプションはファイルシステム指定
などで直接マウントする。

フォーマット。マウントしているとできない。
sudo mkfs -t ntfs -Q -L backup /dev/sdb1
-tのデフォルトはex2

schroot debootstrapで環境構築

sudo apt-get install schroot debootstrap

mkdir -p /home/okamura/chroot

sudo debootstrap –arch=i386 –include=sudo jessie /home/okamura/chroot http://ftp.jp.debian.org/debian

–ここから不要(type=directoryにすると自動で処理)

sudo vim /etc/fstab
に以下の内容を追記

proc-chroot /home/okamura/chroot/proc proc defaults 0 0
devpts-chroot /home/okamura/chroot/dev/pts devpts defaults 0 0
/tmp /home/okamura/chroot/tmp none bind 0 0
/home /home/okamura/chroot/home none bind 0 0

sudo mount -a
にて確認

–ここまで不要

sudo vim /etc/schroot/schroot.conf
に以下追記

[jessie]
description=Debian jessie
type=directory
directory=/home/okamura/chroot
# usersにschroot許可するユーザ一覧を列挙
users=okamura
groups=okamura
root-groups=root
aliases=default

–ここから不要

sudo vim /home/okamura/chroot/etc/debian_chroot
を作成しjessieと追記

–ここまで不要

schroot -l
設定で確認

schroot -c jessie -i
環境確認

schroot -c jessie -p
で接続

バージョン確認
cat /etc/debian_version

Ubuntu TFTP

sudo apt-get install tftp

sudo apt-get install tftpd
tftpdで依存関係よりxinetdもはいる。

apt-get install tftpd-hpa
上記2つではなくこちらを入れている場合もある

sudo vim /etc/xinetd.d/tftp

service tftp
{
protocol = udp
port = 69
socket_type = dgram
wait = yes
user = nobody
server = /usr/sbin/in.tftpd
server_args = /tftpboot
disable = no
}

sudo mkdir /tftpboot
sudo chmod -R 777 /tftpboot
sudo chown -R nobody /tftpboot
sudo /etc/init.d/xinetd restart

Ubuntu インストール用USBメモリ

Ubuntu USBメモリ操作

USBメモリ接続後にdfコマンドを実行する。

表示の見方は
scsiデバイス、sda,sdb,sdc
ideデバイス、hda,hdb,hdc,hdd
のようになる。

今回は、dev/sdb1となった。しっかり覚えておく。

sudo dd if=/home/okamura/download/CentOS-7-x86_64-DVD-1611.iso of=/dev/sdb1 bs=32M
ifはフルパス。of=は出力先指定。間違えると大変。

watch -n 30 pkill -USR1 dd
USR1シグナルをddコマンドに送っている。

/media/okamura/の一覧にあるのでumountする。
sudo umount ESD-USB

MBRのコピーならこういう風に書く。
sudo dd if=/dev/sda1 of=/dev/sdb1 bs=446 count=1

USBブートしない場合、
BIOSの設定を変更する。
DELLの場合F2、ThinkPadはF1だった。

Ubuntu ユーザー関連、パーミッション

ユーザ

ユーザ一覧
getent passwd
less /etc/passwd

区切られた内容は以下の通り。
・ユーザ名
・パスワード
・ユーザーID
・グループID
・コメント
・ホームディレクトリ
・利用シェル

ユーザ情報
id xxx

グループ

グループ一覧
getent group
less /etc/group

グループに所属ユーザの確認
getent group xxx

グループの作成
groupadd wp

グループにユーザを追加
usermod -aG wp www-data

ログインユーザの所属グループ
groups
groups ユーザ名
でもOK

***

実験として、/var/www/に直接ファイルをアップロードするための変更。

ちなみに、/var/www/はroot:rootだが、rootグループにはrootしか所属していないため、/var/wwwの所属グループを変更しても問題ない。

所属グループの書き込みを許可
sudo chmod g+w /var/www

所属グループの変更
sudo chown root:www-upload /var/www

グループの作成
sudo groupadd www-upload

グループにユーザを追加
sudo usermod -aG www-upload ubuntu

確認
groups ubuntu

WinSCPでアップロードするとubuntu:ubuntuの権限になる(デフォルトユーザーがubuntuなため)ので、/var/www/以下にフォルダ・ファイルをアップロードしてもサブフォルダも含めアクセスできるが、SSHでフォルダ・ファイルを作成すると権限がrootになるので、WinSCP経由では作業できないので注意。

***

sudoできるユーザ
/etc/sudoer
ubuntuの場合sudo、adminグループ

ubuntuではsudoグループがsudoできるグループ
adminというグループには誰も所属していない

ユーザ作成
sudo useradd xxx

mオプションを付けないと、ホームディレクトは作成されず、手動では/etc/skelの内容がコピーされない

useradd -D
デフォルトの確認

ユーザの削除
userdel -r xxx

mオプションでホームディレクトリの作成
(自動で、/etc/skelのコピーが入る)
sudo useradd -m inna

ログインできなユーザへ
sudo usermod -s /usr/sbin/nologin inna

ログインできるユーザへ
sudo usermod -s /bin/bash inna

参加するグループの変更
usermod -aG

chown

chown 所有者:所属グループ 対象

再帰の場合、
chown -R xxx/xxx
で再帰的にユーザ、グループを全て変えられる。

chmod

sudo chmod [ u / g / o / a ] [ + / – / = ] [ r / w / x ] 対象ファイル

u: ユーザー
g: グループ
o: その他
a: すべて

sudo chmod 764 hoge.txtのように指定することもできる

4: 読むことが可能(Read)
2: 書くことが可能(Write)
1: 実行が可能(eXecute)
0: なにもできない

権限の意味

ファイルの場合。

R
そのファイルを読み込む

W
そのファイルを書込める

X
バイナリなら実行できる。スクリプトなら、そのスクリプトを実行できる。
(スクリプトの実体はテキストファイルで先頭に#記号がある)

ディレクトリの場合。

R
そのディレクトリの中身をみる。

W
そのディレクトリにファイルを作成すること。

X
そのディレクトリをカレントディレクトリにすること。
(ディレクトリの実行権はサブディレクトリにも影響するが、RWは指定のフォルダだけ)

Ubuntu セキュリティ関連設定

ufw

IPv6無効化
sudo vim /etc/default/ufw
IPV6=no

SSH

以下設定時適宜、再起動
service ssh restart
し、さらに設定の確認をする。
sshd -t

ポートの変更

sudo vim /etc/ssh/sshd_config
Port
22 -> 2299

ufwの変更(既に設定していたら)

SoftEther Ubuntu/Win インストール

sudo ufw status
sudo ufw delete xxx

sudo ufw limit from 192.168.102.0/24 to any port 2299
sudo ufw limit from 192.168.103.0/24 to any port 2299

ルートを弾く

sudo vim /etc/ssh/sshd_config
PermitRootLogin
prohibit-password -> no

パスワード認証を切る

sudo vim /etc/ssh/sshd_config

PasswordAuthentication
コメントを外して
yes -> no

ChallengeResponseAuthentication
noなら問題なし

GSSAPIAuthentication
コメントを外して
noなら問題なし

秘密鍵・公開鍵作成
ssh-keygen -t rsa

ファイル名を聞かれるのでidとする。
パスフレーズも聞かれる。ここではとりあえず付けない。

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

公開鍵の内容は
.ssh/authorized_keys
に記載する必要がある。

公開鍵を移動、配置
mv id.pub ./.ssh

.ssh配下にauthorized_keysがない場合
mv id.pub authorized_keys

ある場合
cat id.pub >> authorized_keys
rm id.pub

パーミッション変更
chmod 600 authorized_keys

秘密鍵はローカルに保存しTeraTermのフォルダへ入れる。
名前は変えてしまってOK

TeraTermから接続
connect ‘192.168.xxx.xxx:2299 /ssh /2 /auth=publickey /user=xxx /keyfile=xxx’

接続ユーザを限定
sudo vim /etc/ssh/sshd_config
以下追記
AllowUsers okamura

このようなスクリプトで確認すると、ufwのログで見るとちゃんと弾いているのが分かる。

Ubuntuでの自動起動について

サービスの自動起動について(スタートアップ)

sysv-rc-conf

インストール
sudo apt-get install sysv-rc-conf

グラフィカルな設定
sudo sysv-rc-conf

自動起動できているか。
sudo sysv-rc-conf -list | grep xxx

サービスを自動起動へ設定
sudo sysv-rc-conf xxx on

自動起動オフ
sudo sysv-rc-conf xxx off

起動スクリプトの場所(sysvinit)

/etc/init.d/
の中がスクリプト実体。

/etc/の中に
rc.local (ホスト固有の設定)
rc0.d
rc1.d
rc2.d
rc3.d
rc4.d
rc5.d
rc6.d
rcS.d
があり、ここにシンボリックを置いておく。

これらの0~6はOSが起動しているrunlevelの時に
対応していて、そのフォルダのスクリプトが読まれる。

SoftEtherをUbuntuとWinにインストール

SoftEtherを使うとき、自動で立ち上げるのに、
/etc/rc.local
の中に
/home/okamura/vpnserver/vpnserver start
と書いてしまった。

ランレベル

0:システム停止
1:シングルユーザモード
2:ローカルマルチユーザモード(NFSなどはなし)
3:フルマルチユーザモード(テキストコンソール)
4:未使用
5:フルマルチユーザモード(グラフィカル環境)
6:システム再起動

init.d 起動と service 起動の違い
/etc/init.d/xxxx start
は環境変数が引き継がれる。
service xxxx start
はPATH,TERM,LANGが引き継がれる。

SoftEther Ubuntu/Win インストール

Windows(サーバー)

公式サイトのSoftEther VPNのダウンロードから、
・ダウンロードするソフトウェア:SoftEther VPN(Freeware)
・コンポーネントを選択:SoftEther VPN Server
・プラットフォームを選択:Windows
・CPUを選択:Intel(x86 and x64)
・SoftEther VPN Server and VPN Bridge (Ver xxx, Build xxx, rtm)
をダウンロード、インストール。

・最初の選択画面でSoftEther VPN Serverを選択。
(管理ツールも一緒インストールされる)

・管理者パスワードを設定する。
(ユーザーのパスワードとは別なので注意)

・リモートアクセス VPN サーバーを選択する。

・仮想HUB名を設定する。(VPNから特に変更の必要なし)

・ユーザーを作成する。

途中からダイナミックDNSを有効にする場合、
サーバー管理マネージャ>接続>Config編集>
DDnsClient>bool Disabled
をfalseにする。

Windows(クライアント)

公式サイトのSoftEther VPNのダウンロードから、
・ダウンロードするソフトウェア:SoftEther VPN(Freeware)
・コンポーネントを選択:SoftEther VPN Client
・プラットフォームを選択:Windows
・CPUを選択:Intel(x86 and x64)
・SoftEther VPN Client (Ver xxx, Build xxx, rtm)
をダウンロード、インストール。

・最初の選択画面でSoftEther VPN Clientを選択。
(管理ツールも一緒インストールされる)

1.新しい接続設定の作成
を実行し仮想LANカードを作成する。

2.仮想LANカードにIPを設定する。
現在利用しているのとは別ネットワークで、設定はIPアドレスとサブネットマスクだけでOK。例えば現在のネットワークが192.168.1.xだったら、仮想LANカードには192.168.2.xというように。

3.新しい接続設定の作成
を実行する。

・接続設定名:
適当に入力する。

ホスト名:
サーバーがあるLANのグローバルIP/サーバーのローカルIPというように記入する。

・ポート、ユーザー名、パスワード:
サーバーで設定した値を入力する。

・高度な通信設定:
コネクションを8本に変更する。
半二重モードを使用するにチェックする。
VPN Serverとの間の通信をSSLで暗号化するにチェックする。
再接続間隔:60秒

・サーバー証明書を必ず検証する:
をチェックする。

初回のみ、
固有証明書の登録をクリック>ファイルから証明書を読み込む
にて登録。

証明書の書き出しは
サーバー管理マネージャ>接続>暗号化と通信関係の設定>エクスポート
PKCS#12にてエクスポート。

作成した接続設定の右クリックから、スタートアップ接続を指定する。

Ubuntu(サーバー)

ここではUbuntuにSambaを入れ共有フォルダにWindowsのクライアントからアクセスしてみる。

CPUを調べる
cat /proc/cpuinfo

bitを調べる
uname -a

ダウロード
wget https://jp.softether-download.com/files/softether/v4.34-9745-rtm-2020.04.05-tree/Linux/SoftEther_VPN_Server/64bit_-_Intel_x64_or_AMD64/softether-vpnserver-v4.34-9745-rtm-2020.04.05-linux-x64-64bit.tar.gz

インストール
tar -zxvf softether-vpnserver-v …
cd vpnserver
make

エラーがでる場合、
sudo apt-get update
sudo apt-get install make
sudo apt-get install gcc
sudo apt-get install binutils
とするか、
sudo apt-get install build-essential
(yum groupinstall “Development Tools”)

あたりを実行。

パーミション

インストールフォルダにて
chmod 600 *

chmod 700 vpncmd
chmod 700 vpnserver

・サービス登録

インストールフォルダに
startup.sh
を作成し以下を書き込み。

vim /etc/systemd/system/vpnserver.service
以下、書き込み。

起動
sudo systemctl daemon-reload
sudo systemctl start vpnserver

終了
sudo systemctl stop vpnserver

自動起動する場合
sudo systemctl enable vpnserver

管理者パスワード設定
インストールフォルダにて
./vpncmd
Select 1, 2 or 3: 1
Hostname of IP Address of Destination: localhost
Specify Virtual Hub Name: 空白
VPN Server>ServerPasswordSet
とりあえず123123abcのような簡単なパスワードにしておく。
VPN Server>exit

ポート開放
sudo ufw allow 5555/tcp
(firewall-cmd –add-port=5555/tcp –zone=public –permanent)

・Windowsのサーバー管理マネージャで作業。

起動画面にて、新しい接続設定を実行
・接続設定名:ConoHa(CentOS)
・ホスト名:IPアドレス
・ポート番号:5555
・管理パスワード:123123abc

接続すると初回接続時のみ簡易セットアップダイアログが開く。

・リモートアクセスVPNサーバー
をチェックし次へ

・仮想HUB名:VPN(そのまま)
と入力しOK。

・ダイナミックDNS機能
はそのまま変更なし。

・IPsec/L2TP/EtherIP/L2TPv3サーバー機能の設定
はチェック無し(そのまま)でOK。

・VPN Azureクラウド
VPN Azureを無効にする
をチェックしOK。

1.ユーザーを作成する
をクリックし、ユーザー名とパスワードを入力してOK。
3.ローカルブリッジの設定
ではブリッジの設定しない。
閉じる。

簡易セットアップダイアログここまで。
ここからサーバー管理マネージャの通常画面で作業。

・リスナーポートを5555以外削除

・暗号化と通信関係の設定>管理者パスワードの変更

・ローカルブリッジ設定

仮想HUBでVPNを選択する。
新しいtapデバイスとのブリッジ接続をチェックし、
vpnserver
と入力しローカルブリッジを追加を実行。

Windowsのクライアント接続マネージャで作業。

・新規仮想LANカードの作成

を実行。名前はそのままでOK。

Microsoft ネットワーク用クライアント
Microsoft ネットワーク用ファイルとプリンター共有
インターネットプロトコル4(TCP/IPv4)
のみ残し、IPアドレスを
192.168.13.2 / 255.255.255.0
としておく。

・接続設定の新規作成

接続名:ConoHa(CentOS)
ホスト名:IPアドレス
ポート番号:5555
仮想HUB名:VPN
使用するLANカード:作成したLANカード
ユーザー認証:サーバー管理マネージャで作成した値

その他の部分は、上記のWindows(クライアント)の部分を参考。

sambaのインストール

Sambaのインストール

ポート開放
sudo ufw allow from 192.168.12.2 to any app samba

これで、VPS上のsambaのフォルダにアクセスできる。

UbuntuでのIPアドレス固定化

route -n
ゲートウェイチェック。

ifconfig
DHCPのアドレスとマスクを確認。

cat /etc/resolv.conf
DNSネームサーバ

nameserver 127.0.1.1
のように自PCになっている場合あり。

デフォルト設定だと NetworkManager が有効になっていて、
dnsmasq が DNS キャッシュサーバーとして動いている模様。

NetworkManager(ネットワーク切り替え補助)

/etc/network/interfaces
に以下を追記する。

auto wlan0
iface wlan0 inet static
address 192.168.102.15
netmask 255.255.255.0
gateway 192.168.102.1
dns-nameservers 192.168.102.1
wpa-ssid xxx
wpa-ap-scan 1
wpa-key-mgmt WPA-PSK
wpa-psk xxx

有線の場合等
auto eth1
iface eth1 inet static
address 192.168.102.100
netmask 255.255.255.0
gateway 192.168.102.1
dns-nameservers 192.168.102.1

loとはローカルループバック
autoとは自動接続

再度読み込む場合(上手く行かないことが多い)
sudo service networking restart
sudo service network-manager restart

UbuntuでLogicool TrackMan Marble

ずっと前の設定で詳細は忘れた。また使う時に更新予定。

xorg.conf

Section “InputClass”
Identifier “Marble Mouse”
MatchProduct “Logitech USB Trackball”
MatchIsPointer “on”
MatchDevicePath “/dev/input/event*”
Driver “evdev”
#Option “ButtonMapping” “1 2 3 4 5 6 7 2 2”
Option “ButtonMapping” “1 2 3 4 5 6 7 2 8”
Option “EmulateWheel” “true”
Option “EmulateWheelButton” “3”
#Option “ZAxisMapping” “4 5”
#Option “Emulate3Buttons” “false”
EndSection

Ubuntuのキーバインド変更(xmodmap)

キーバインドはWindowsと同等にする。

xmodmap -pke > .xmodmap_def
このファイルを改造してリセット用のファイルを作成する。

先頭に以下を追加
clear shift
clear lock
clear control
clear mod1
clear mod2
clear mod3
clear mod4
clear mod5

末尾に以下を追加
add shift = Shift_L
add shift = Shift_R
add lock = Eisu_toggle
add control = Control_L
add control = Control_R
add mod1 = Alt_L
add mod1 = Alt_R
add mod1 = Meta_L
add mod2 = Num_Lock
add mod4 = Super_L
add mod4 = Super_R
add mod4 = Super_L
add mod4 = Hyper_L
add mod5 = ISO_Level3_Shift
add mod5 = Mode_switch

コンソールからxevを実行してキーコードを調べる。

xmodmap -pm でモディファイを確認しておく。(xmodmap -pke で割り当ての一覧)

keycode xxx  = キーシム 1 2 3 4 5 6 となる。

1: そのキーだけを押した時の出力
2: Shiftで修飾の出力。
3: mod2で修飾の出力。
4: Shift+mod2で修飾の出力。

モディファイキーを移動する場合、モディファイから削除しておく。
remove control = Control_L等

移動後、再度追加。
add control = Control_L等

最終的に以下のように設定。

注意点として、xmodmapを繰り返すと、一度摘要された設定に再度設定するので、半角/英数などの部分でエラーになってしまう。defを一度実行すれば大丈夫。

WinがAutohotkeyで対応している部分は後々考える。

自動起動について

こちらも参考

/etc/rc.local に xmodmap ~/.xmodmap
.profile に xmodmap .xmodmap
等に書いてもダメ。unable to open displayになってしまう。

GUI側のターミナルで、echo $DISPLAY とすると、:0 と表示されるので、
.profileには
export DISPLAY=”:0″
xmodmap .xmodmap
の2つを追記する。

これで一応SSHから入るとxmodmapが読み込まれるようだが、GUI側のターミナルを開いただけでは読まれない模様。(上記2行を/etc/profileに書いても同じ症状)
SSHで入ると、GUIの方にもxmodmapが読み込まれるようだけど。

GUIの自動起動に追加してみる。

~/.config の中に autostart フォルダを作成する。
(全ユーザ共通は /usr/share/gnome/autostart となる)
そのフォルダの中にファイルを作りファイル名は *.desktop とする。

ファイルの中に
[Desktop Entry]
Exec=xmodmap .xmodmap
Type=Application
を書いておく。

これで問題なく動いた。

作るタイミングによっては自動で.xmodmapを検出して自動起動するか確認される場合もあって気がするが、今回はなかった。

1 /etc/profile 全ユーザ共通。
2 .bash_profile なくてもいい。
3 .bash_login 上記2がない場合読まれる。なくてもいい。
4 .profile  上記2,3が無い場合読まれる。なくてもいい。
5 .bashrc シェルごとに読まれる。

Ubuntu Windows共有フォルダをマウント

sudo apt-get install cifs-utils(ないとエラー)

sudo mount -t cifs -o user=s.okamura,password=1234 //192.168.102.4/Desktop /mnt/LIFEBOOK-A
mountは自動でマウントされない。

sudo umount /mnt/LIFEBOOK-A
アンマウント

自動接続するためには、
/etc/fstab
に記述する。

//192.168.102.4/Desktop /mnt/LIFEBOOK-A cifs username=s.okamura,password=1234 0 0

1列目: デバイス名
2列目: マウントポイント
3列目: ファイルシステム
4列目: マウント時のオプション
5列目: ファイルシステムをdumpするかどうか。0はdump不要
6列目: システム起動時のfsckチェック。0はチェックを行わない。
    ルートファイルシステムでチェックは1。ルートファイルシステム以外でチェックは2。

sudo mount -a
でfstabが正しいかどうか試験できる

 

Sambaのインストール

sudo apt-get install samba

必要なフォルダ作成

mkdir xxx
chmod ugo+rwx /xxx
フルアクセスにする。

設定ファイル

sudo vim /etc/samba/smb.conf

[global]
の中に以下追記。

netbios name = xxx (現在は使えない)
unix charset=UTF-8
dos charset=CP932

security = user(デフォルト)

ゲストアカウントの許可について、
security=shareはverによってはダメなので、
代替として「security=user」+「map to guest=Bad User」の組み合わせ

securityの選択肢、
security = share パスワードだけ(Samba 3.6.0以降deprecated)
security = domain ドメインコントローラ
security = server ほかのSMBサーバにより
security = ads AD(アクティブディレクトリ)ドメインのドメインコントローラ
などある。

guest account = nobody
ゲストをどのLinuxアカウントとして扱うか。

map to guest = bad user (もともと記述済み)
不正なパスワードは拒否だが、ユーザが存在しない場合ゲストとして扱う。

map to guest
の選択肢、
Never = 不正なパスワードによるユーザーのログイン要求を拒否。
Bad User = 指定されたユーザーが存在しなかった場合はguest accountで指定したユーザーとして扱う。
Bad Password = 不正なパスワードによるユーザーのログイン要求を guest accountで指定したユーザーとして扱う。

以下を最終行に追加。

[share]
[]は共有名となる。
path = /home/xxx
writable = yes
guest ok = yes (public = yesのエイリアス)
force create mode = 0777 (作成したファイルに付加されるアクセス権)
force directory mode = 0777 (作成したディレクトリに付加されるアクセス権)
share modes = yes (他人が開いているかどうかチェック。verによっては使えない)
vfs objects = recycle (ゴミ箱機能)

ちょっと設定が違うタイプ。

[private]
path = /home/xxx
writable = yes
guest ok = yes
force create mode = 0777
force directory mode = 0777
share modes = yes
vfs objects = recycle
browseable = no

・アクセスについて

sambaのアカウントとlinuxのアカウントは別管理される。sambaでフォルダごとのユーザー管理が手間の場合、browseable = noとすると見えなくはなる。

Winから手動アクセスがないのなら、フォルダのアクセス管理で対応するのもひとつ。
chmod ugo+rwx /xxx

・コンピュータ名について

現在はSMBv1が停止しているので、netbios nameでは表示できない。WSDをスクリプトで対応する方法があるらしい。

現在、SMBのどのバージョンでコネクションしているか
PowerShell>get-smbconnection
でわかる。

ちなみに、現在のPCに接続してきているセッションは、
PowerShell>get-smbsession
現在のPCが共有化しているフォルダは、
PowerShell>get-smbshare
でわかる。

起動

testparm
で設定をチェックできる。

sudo /etc/init.d/smbd start
sudo /etc/init.d/nmbd start

Win7では接続できてWin10で接続できないのでWin10で色々やってみた。

sc.exe config lanmanworkstation depend= bowser/mrxsmb10/nsi

を走らせてSMB1とした。

処理後、管理ツール、サービス、Workstation、依存関係から確認できる。
が、接続できない。空のパスワードがダメかと思ったがHOMEのためローカルセキュリティポリシーが使用できないため、「HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\limitblankpassworduse」
の設定値を0にしてみた。が、接続できない。

そういえばsambaとは関係なく以前も同じような症状があったと思い出し、資格情報マネージャ、Windows資格情報に、ユーザー名:guest、パスワード:空白で追加してみたら繋がった。

設定

comment
共有フォルダのコメント設定。
path
共有したいディレクトリのパス名を設定。
public
パスワードなしでのアクセスを認める。securityをshare以外に設定したときは意味を持たない。
guest ok
ゲストユーザでの接続を許可。
guest only
ゲストユーザのみ接続を許可。
guest account
ゲストとして接続するときのユーザ名を設定。
read only
共有フォルダへの書き込みを許可しない。
writable
共有フォルダに書き込めるように設定。
create mask
共有フォルダに作成されるファイルのパーミッションを3桁で指定。
directory mask
共有フォルダに作成されるディレクトリのパーミッションを3桁で指定。
force user
接続したときのユーザ名を無視して、指定したユーザとして操作。ファイルを作成したときは指定したユーザの所有になる。
browseable
共有フォルダの一覧に表示させる。noを指定すると隠し共有になる。
valid users
指定したユーザだけが利用できる。
invalid users
指定したユーザは利用できない。
write list
指定したユーザだけに書き込みを許可。
hosts allow
指定したホスト(IPアドレスも可)だけに利用を許可する。
hosts deny
指定したホスト(IPアドレスも可)からの利用を拒否する。

CentOSの場合(抜粋)

インストール
yum install samba

インストール確認
systemctl status smb nmb

自動起動
systemctl enable smb nmb

自動起動確認
systemctl is-enabled smb nmb

ファイアーウォール確認
firewall-cmd –list-all

ファイアーウォール追加
firewall-cmd –add-service=samba –permanent

ファイアーウォール再起動
firewall-cmd –reload

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

Vim コマンド

操作基本

u, Ctrl+R
アンドゥ、リドゥ

gg
画面トップ

G
画面末尾

w, e, b
単語単位での移動

Ctrl+V
矩形選択

Shift+j
行結合

>>,  <<
インデント

Ctrl+u, Ctrl+d, Ctrl+f, Ctrl+B
スクロール

*
カーソル下の文字を検索

: を入力後、Ctrl+R, Ctrl+W
コマンド下の文字をvimgrep

split, vsplit
:sp xxx名, :vsp xxx名
画面の分割

:e.
ファイラで開く

Ctrl-W, W
分割画面の移動

Ctrl+U, Ctrl+D
スクロール

Ctrl+i
進む

Ctrl+o
戻る

言語設定

e ++enc=utf-8
指定文字コードで開きなおす

set fenc=shift_jis
指定文字コードに変更

set encoding=utf-8
Vim自体の言語設定

:verbose highlight cursorline
設定を見れる

置き換え

:%s/old/new/gc

‘g’ を加えると行の先頭だけではなく行の中全て
‘c’ を加えると置換の度に確認を求める

sが置き換えの意味、%が現在開いているファイルの意味。

ただし、通常の正規表現とは違うエスケープが必要らしい。
以下は、#から始まる行と、改行だけの行を削除。
:%s/^#.*\n\|^\n//g

Vimgrep

正規表現のパターン

:vim {pattern} app/**
:vim {pattern} **/*
が基本の書き方。

パスの指定は、先ず検索したいパスを指定して、それに、
*
**
*.txt
**/*.txt
の組み合わせの何れかがくっつくイメージ。

| cw で渡して、 :copen で開く。

Ctrl-w, w
移動

:q
閉じる。

ちなみに通常のgrep基本

grep -rn xxx *
等記述する

G
通常正規表現

E
拡張正規表現

P
Perl互換正規表現

r
階層下のファイル内を対象

n
行番号

Vim PHPのdic作成

上記をmkvimdic.phpとして保存。

php mkvimdic.php > php.dict

php.dictが作成される。

autocmd FileType php :set dictionary=~/dict/php.dict

.vimrcに追記する。

 

レンタルサーバーにVimとctagsをインストール

レンタルサーバーは自分でコンパイルする必要がある。

./configureをするとmakefileが作られる。ここでオプションを指定することができる。

例えば、–prefix=???とすると、そこにインストールされる。

makeでコンパイルし、make installでインストールする感じ。

Vim

ctags

Linux コマンド

 less

-N
ナンバリング

-F
画面に収まれば自動終了

-R
カラー表示

-X
終了時画面クリアしない

-S
折り返し無し

-s
空白まとめる

-p xxx
文字反転

-O xxx.txt
パイプのみ、閲覧後ファイル保存

less起動後

q
終了

Shift+f (Ctrl+cで通常モード)
自動更新

g, G
先頭、末尾へ移動

j, k
一行の上下

f, b / w, z
一ページの上下

& xxx
xxxのみ表示
&で絞りんこんでShift+fで更新も可能。

/
検索(nで移動)

-S
折り返し無し。(移動は←, →)

テキスト関連

tr -f \r
Win改行を除く

nkf -wd ファイル名
改行をLinux文字コードをUTF-8

nkf -wd –overwrite ファイル名
そのまま上書き

nkf –guess ファイル名
文字コード判定

hexdump -c xxx
改行コード調べる

sed -e “s/,/\n/g”
カンマを改行へ

 apt

apt-get update
キャッシュの更新

apt-get upgrade
ソフトバージョンアップ

apt-get dist-upgrade
ディストリビューションのアップ

apt-get remove xxx
ソフトの削除

apt-get purge xxx
(apt-get –purge remove xxx)
設定ファイル残らないソフトの削除。

apt-get –purge autoremove
使っていないパッケージ削除(設定ファイルも)

apt-get autoclean
使っていないアーカイブ削除
(キャッシュされているけどインストールしていない.deb)

do-release-upgrade
OSのアップデート

dpkg -l
パッケージの一覧

dpkg -L パッケージ
インストールしたファイル一覧

起動関係

shutdown -h now
終了

shutdown -r now
再起動

プロセス関係

ps aux | grep httpd
プロセスのユーザを確認する。

ps -aux | grep apache
これでプロセス名を確認して
kill xxx
でプロセス終了。

pgrep -l apache
でプロセス番号を探すこともできる。

pkill プロセス名
で複数のプロセスを終了することもできる。

find

ドットはカレントディレクトリから全てのサブディレクトリ
find . -name “*.php”

開始ディレクトリを指定することもできる
find /var

lsと同じように表示
find . -name “*.php” -ls

一括変更
find . -type f | xargs chmod 604
find . -type d | xargs chmod 705

SCP

scp ./example.tar user@210.123.45.67:/home/user/
example.tarを210.123.45.67に転送。

scp -r ./test username@example.net:/home/username
testディレクトリをexample.netに転送。

秘密鍵を使う場合、
scp -i 秘密鍵 コピーしたいファイルパス 受取先パス

その他

/etc/init.d/networking restart
IPアドレスが消えた場合。

cd –
戻る

ctrl + u
入力中を消す

xxx &
ジョブをバックグラウンドへ

jobs
ジョブ一覧

kill %1
ジョブを消す

source .bashrc
bashの設定変更後

サイズを調べる

df -h
デバイスのサイズ

du -h /var/
特定フォルダ以下のサイズ(階層指定の場合 du -h –max-depth=1 / )

screen

起動
screen

一覧
screen -ls

デタッチ
Ctrl+a, d

アタッチ
screen -r id

終了
Ctrl+a, \

シェル作成
Ctrl+a, c

シェル一覧
Ctrl+a, w
Ctrl+a, “(ダブルクオーテーション)

シェル移動
Ctrl+a, 1~

シェルを閉じる(screen自体は生きてる)
Ctrl+a, k

ウィンドウ分割
Ctrl+a, |(バーティカルバー)
Ctrl+a, S

ウィンドウ移動
Ctrl+a, tab

ウィンドウ分割終了
Ctrl+a, Q(その他全ての領域)
Ctrl+a, X(現在の領域)

Ubuntu 初期設定

VirtualBox

・ホストキー
ファイル>環境設定>システム

右Ctrlがないので、
ファイル>環境設定>入力>仮想マシン>ホストキーの組み合わせ
という部分をAltに変更しておく。

これでAltで抜けれる。

・ネットワーク
仮想マシン>設定>ネットワーク>アダプター 1

ホストオンリーアダプタ
ホストOSにアタッチされている仮想NICを利用する。
ゲストから外部に出られない、ホストからゲストにはアクセスできる。

NAT
ゲストは外部に出られるが、ホストからゲストはポートフォーワーディングが必要。

ポートフォワーディングを設定する場合、
仮想マシン>設定>ネットワーク>アダプター 1>高度>ポートフォワーディング

ルールを追加し、ホストポートとゲストポートに22というように必要な番号を入力するだけ。必要なら80や443も追加する。

ブリッジアダプタ
ゲストがホストと同じネットワークになる。

ブリッジアダプタを使う場合、ゲストOSはDHCP自動でも手動固定でもOK。固定にする場合、右上のネットワークのEdit Connectionsから直接指定する。

SSH

sudo apt-get install openssh-server

/etc/init.d/ssh start
通常自動起動する。

/etc/ssh/sshd_confgi
にて以下追加(コメントアウトとして存在しているが面倒なので追加してしまう)

Port 22
PermitRootLogin yes
PasswordAuthentication yes

これでTeraTermから接続できる。以降はホスト側のTeraTermで作業。

ログインをコンソールへ

サーバ用途などの場合

sudo vi /etc/default/grub

quiet splashをtextに書き換える
GRUB_CMDLINE_LINUX_DEFAULT=”text”

書き換えたら以下を実行
sudo update-grub

コンソールで立ち上がるので、GUIを起動したい場合
startx
でGUIが起動する。

Ctrl+Alt+F1
でコンソールに戻る。
(このときxは起動している)

CUIで
Alt + F7
を押すとGUIを開く
(xが起動していないと違う画面にいく、そこからCtrl+Alt+F1で戻ってこれる)

Vim

sudo apt-get update
sudo apt-get install vim

.vimrcをホームディレクトリにコピーする。

xmodmapをホームディレクトリにコピーする。VirtualBoxやGUIで直接アクセスしない場合不要。

ホームディレクトリの.profileにxmodmap .xmodmapと記述する。上手く読み込まれない場合はGUIで自動起動するアプリケーションに追加する。

Ubuntuのキーバインド変更(xmodmap)

Apache

Apache設定

Apacheの設定、htaccessなど

Nginx

sudo apt-get update
sudo apt-get install -y nginx
sudo service nginx start

基本のルート
/var/www/html

アクセスログ
/var/log/nginx/access.log

コンフィグ
/etc/nginx/nginx.conf

いくつかの設定
/etc/nginx/sites-available/default

ドキュメントルートを変える
root xxx

PHP-FPMを使う場合は、
index index.php
もうひとつ、phpのlocationの中に以下を記入。
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
include fastcgi_params;

PHP-FPM(FastCGIの実装)

sudo apt-get install -y php-fpm

サービス名がそのままじゃないので調べてみる。
service –status-all

起動できるか
sudo service php7.2-fpm start

設定書き換え
/etc/php/7.2/fpm/pool/www.conf
の中の
user,group,listen.owner,listen.group
をnginxに変更。
(今回はwww-dataだった。ps -auxで確認したほうがいい)

基本はこれでNginx+PHP-FPMで動くが、頻繁にタイムアウトする。
WSL上なのが問題なのかもしれない。

PHP(apache)

sudo apt-get install php
sudo apt-get install libapache2-mod-php
sudo /etc/init.d/apache2 restart

とりあえずこれでPHPファイルは実行できるようになる。

phpinfo()でphp.iniの場所を探すことができる。

display_errors = Onに変更しておく。

MySQL

sudo apt-get install mysql-server
インストールの途中でrootのパスワードを聞かれる、テストのため5678とする。

sudo apt-get install php-mysql
ここまでのphp, libapache2-mod-php, php-mysqlは全て自動的にphp7.0のが入る。

sudo /etc/init.d/apache2 restart
テストでMySQLにDBを作って接続してみる。

mysql -u root -p5678
create database db charset=utf8;
use db
create table tbl (id int) default charset ‘utf8’;
exit;

PHPで確認

これでDBの中に書き込まれるのが確認できた。

WordPress

通常、手動でインストールするが、
sudo apt-get install wordpress
という方法でも実行できる。

実行すると、
/usr/share/wordpress
に入る模様。

sudo ln -s /usr/share/wordpress /var/www/wp
でシンボリックリンクを作成。
これだと、wpディレクトリの中にwordpressディレクトリができてしまう。。。

/var/www/wp
の中で、
sudo unlink wordpress
で外れる。

sudo ln -s /usr/share/wordpress/ /var/www/wp
でも同じ。

シンボリックリンクなので、既にファイルがあってはダメか。
(既にwpディレクトリを作成してあった)

wpがない状態で、
sudo ln -s /usr/share/wordpress /var/www/wp
とやるとOK

最終的には
sudo ln -s /usr/share/wordpress /home/okamura/www/blog
とした。

あとはブラウザでアクセスするだけだが、wp-config.phpが存在しているので、
ブラウザから処理が進まない。

とりあえず、
mysql -u root -p5678
create database db charset=utf8;
などでdbを作成して、
wp-config.php
の名前を変え、
wp-config-sample.phpをwp-config.php
に変更して必要な設定を書き込めばOK。

パーミッション関連の設定

Ubuntu ユーザー関連、パーミッション

 その他

・タイムゾーン設定
sudo timedatectl set-timezone Asia/Tokyo
確認の場合、
sudo timedatectl

sudo apt-get install nkf

.bashrcに以下を書き込む

UbuntuでのIPアドレス固定化

Sambaのインストール

Ubuntu Windows共有フォルダをマウント

SoftEther Ubuntu/Win インストール

Ubuntu セキュリティ関連設定