WSL2 初期設定、Sambaなど

WSL有効化

・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サブシステム
・仮想マシン プラットフォーム

WSLコマンド

・インストール済み
wsl –list

・インストールできるもの
wsl –list –online

・WSL1or2どちらで動作しているか。バージョン確認
wsl –list –ver

・WSL、カーネルのバージョン確認
wsl –version

・WSL、カーネルのバージョンアップ
wsl –update

今回は、
WSL バージョン: 1.2.5.0
カーネル バージョン: 5.15.90.1
から
WSL バージョン: 2.1.4.0
カーネル バージョン: 5.15.146.1-2
になった。

***

・インストール
wsl –install -d Ubuntu-22.04

・既定に設定
wsl -s Ubuntu-22.04
(–set-default)

・削除
wsl –unregister Ubuntu-22.04

・リセット
wsl –unregister Ubuntu-22.04
wsl –install -d Ubuntu-22.04
wsl -s Ubuntu-22.04

・起動
wsl
(デフォルトのディストリビューションにログイン)

・終了(削除ではない)
wsl –shutdown
(wsl –terminate Ubuntu-22.04でも終了できる)

・DNS指定
(名前解決できないとエラーがでる)

sudo vim /etc/wsl.conf

[network]
generateResolvConf = false

を追加
(WSL起動のたびresolv.confが上書きされるため)

sudo vim /etc/resolv.conf
を開き
nameserver 8.8.8.8
または
nameserver 192.168.11.1
など、追加する。
(通常は、起動する度にリセットされる)

ポートフォワード

・wslのIPアドレス確認
wsl -e hostname -I

・ポートフォワード(ポート1つ指定)
netsh interface portproxy add v4tov4 listenport=80 listenaddress=* connectport=80 connectaddress=172.19.144.232

・確認
netsh interface portproxy show all

・削除
netsh interface portproxy delete v4tov4 listenport=80

・ファイアーウォール
netsh advfirewall firewall add rule name=”wsl” dir=in action=allow protocol=tcp localport=80,53 profile=private,public

・削除
netsh advfirewall firewall delete rule name=”wsl”

ポートフォワード(PowerShell)

 

GUI

geditなど、使う場合

sudo apt install gedit
sudo gedit /etc/samba/smb.conf
で起動できる。

Samba

・インストール

sudo apt update
sudo apt install samba

・共有フォルダ

sudo vim /etc/samba/smb.conf

[TEST]
path = /home/user
writable = yes
guest ok = yes

を追加。
([]が共有名になる。)

・パーミッション
sudo chmod o+rwx user

Samba-AD

・conf削除
sudo rm -f /etc/samba/smb.conf

・provision
sudo samba-tool domain provision –use-rfc2307 –interactivegyou

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 解凍フォルダ名
を実行する。

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 remove xxx
削除する場合

アップデート
yum update
yum update xxx

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

SSHの設定

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

・SSHの状態確認
systemctl status sshd.service

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

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

PasswordAuthentication no
ChallengeResponseAuthentication no

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

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

・ポート番号変更(49152 – 65535辺り)

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

systemctl restart sshd

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

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

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

・再起動

systemctl restart sshd
systemctl enable sshd

firewalld

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

定義されているサービス
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 –permanent –zone=public –add-rich-rule=”rule family=ipv4 source address=192.168.13.2 port protocol=tcp port=80 accept”

許可するポートの削除
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

・ターゲット

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

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

vimrc

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

bashrc

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

.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 インストール用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は指定のフォルダだけ)