C# Byte配列を16進数文字列へ

 

Visual Studio 名前変更

ソリューション名&プロジェクト名を変更する方法メモ。

プロジェクト>xxxのプロパティ>アプリケーション
・アセンブリ名
・規定の名前空間
・アセンブリ情報の必要な部分を変更

オブジェクトをバイナリシリアルで書き出したデータを名前変更後も利用する場合、名前を変更しても問題がないか確認したほうがいい。アセンブリ名が変わるとエラーになる。

ソリューションエクスプローラ>ソリューション右クリック
・名前の変更

ソリューションエクスプローラ>プロジェクト右クリック
・名前の変更

*.sln
をテキストエディタで開き、
xxx\xxx.csproj
の部分を変更し、実際のフォルダ名もあわせて変更する。

名前の変更とは関係ないが、忘れがちな部分。

・pdbファイルを生成しない
プロジェクト>xxxのプロパティ>ビルド
構成でReleaseを選択し、詳細を開き、デバッグ情報を無しに変更。

あと、.vsフォルダを削除しておく。

C# 別スレッドからコントロールにアクセス

あるいは、ラムダ式をMethodInvokerにキャストする。

・Invoke()の考え方として、Invoke()を呼び出したフォームに対して
別スレッドから操作をするメソッドを渡す。

・Invoke()の呼び出し方としては、複数回コントロールにアクセスする場合、Invokeの中ではなく、Invokeを複数回呼び出すような形にする。

・スレッドが別かどうか確認する場合(Controlにアクセスして大丈夫かと考える)
Control.InvokeRequired

 

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

Windows netstatコマンド

オプションなしで、
netstat
だけだとESTABLISHED(接続中)
のみ表示される。

・オプション

nオプション
ポート番号やアドレスなど出力が数値になる(表示が早くなる)

aオプション
ESTABLISHED以外やUPDなど全て表示する。

bオプション
実行ファイルを表示(vを併用するとdllも出力する)

例えばLISTENINGだけ表示したい場合。
netstat -a | find “LISTENING”

・状態

LISTENING
待受

ESTABLISHED
通信中

TIME_EAIT
終了処理中(こちら側から終了処理)

CLOSE_WAIT
終了処理中(相手側から終了処理)

・見方

表示は左から、プロトコル、ローカルアドレス、外部アドレス、状態

0.0.0.0 / IPv4
[::] / IPv6
全てのNICを意味する。

127.0.0.1 / IPv4
[::1] / IPv6
自分自身を指す。同一ホスト内だけで通信できる。

LISTENINGでのローカルアドレスの
0.0.0.0
は全てのNICで受付けるという意味。

LISTENINGでのローカルアドレスに
IPアドレスが指定されていれば、
そのIPアドレスでしか受付けないという意味。

LISTENINGでの外部アドレスの
0.0.0.0
はanyという意味なので、送信元を限定しないという意味。

ESTABLISHEDのときのローカルアドレス、外部アドレスは、
そのアドレス同士で接続しているという意味。

Windows Server(Indigo) 初期設定

IndigoでWindowsServerのインスタンスを立ち上げVPN接続してみる。

インスタンスを作成したらダッシュボードからインスタンスを起動し、ダッシュボードに表示されているIPアドレスと、インスタンス作成時に入力したパスワードで接続する。ユーザー名はadministrator。

Windows 初期設定

先ずAutoHotkeyと、Google日本語入力の設定をする。

セキュリティ

・管理者名変更

secpol.msc>ローカルポリシー>セキュリティオプション>アカウント: Administrator アカウント名の変更
Administratorからadministratoruser等に変更。

・リモートデスクトップのポート変更

HKEY_LOCAL_MACHINE>SYSTEM>CurrentControlSet>Control
Terminal Server>WinStations>RDP-Tcp
PortNumberを3389から変更する。
ここでは63389とした。

・接続をTCPのみに変更

gpedit.msc>コンピューターの構成>管理用テンプレート>Windowsコンポーネント>リモートデスクトップサービス>リモートデスクトップセッションホスト>接続>RDPトランスポートプロトコルの選択
有効にしてTCPのみを使用を選択する。

・ファイアーウォールに規則を追加

firewall.cpl>詳細設定>受信の規則>新しい規則>ポート>TCP>特定のローカルポート
63389
を入力し、接続を許可する。

再起動

mstsc -v:xxx.xxx.xxx.xxx:63389
として接続してみてる。

VPNサーバー側

servermanager>役割と機能の追加>役割ベースまたは機能ベースのインストール>サーバープール画面はそのまま>リモートアクセス>機能の選択画面はそのまま>役割サービス
・DirectAccessにチェック。
・ルーティングにチェック。

servermanager>右上旗マーク>作業の開始ウィザードを表示する>VPNのみを展開します>ルーティングとリモートアクセスウィンドウ>左側サーバー右クリック>ルーティングとリモートアクセスの構成と有効化
カスタム構成をチェック。
・VPNアクセスをチェック。

servermanager>ツール>ルーティングとリモートアクセス>左側サーバー右クリック>プロパティ>セキュリティ
・カスタムIPsecポリシーをL2TP/IKEv2接続で許可するにチェック
・事前共有キーに適当な値を入力。

servermanager>ツール>ルーティングとリモートアクセス
>左側サーバー右クリック>すべてのタスク
・再起動をクリック。

servermanager>ツール>ルーティングとリモートアクセス
>左側サーバー右クリック>プロパティ>IPv4
・静的アドレスプールをチェック。
・適当の範囲を追加する。(192.168.20.1 – 192.168.20.5)

firewall.cpl>詳細設定>受信の規則>新しい規則>ポート>
・UDPをチェック
・特定のローカルポート:4500, 500, 1701
を追加し、接続を許可する。
・TCPをチェック
・特定のローカルポート:445
・スコープ:ローカル:192.168.20.1/リモート:192.168.20.0/24
を追加し、接続を許可する。

firewall.cpl>詳細設定>受信の規則>新しい規則>カスタム>すべてのプログラム
・プロトコルの種類:カスタム
・プロトコル番号:50
を追加する。(50はESP)

servermanager>ツール>コンピュータの管理>ローカルユーザーとグループ>ユーザー>該当のユーザーを右クリック>プロパティ>ダイヤルイン
リモートアクセス許可
・アクセスを許可をチェック。

 

firewall.cpl>詳細設定>受信の規則
から登録したもの以外全て無効化。

VPNクライアント側

Win10設定>ネットワークとインターネット>VPN>VPNを追加する
・VPNプロバイダー:Windows(ビルトイン)
・接続名:適当
・サーバー名またはアドレス:サーバーのIPアドレス
・VPNの種類:事前共有キーを使ったL2TP/IPsec
・サインイン情報の種類:ユーザー名とパスワード
・ユーザー名(オプション):サーバー側で作成したユーザー

上記作成されたネットワーク接続に対して、
ncpa.cpl>右クリック>プロパティ>ネットワーク
・インターネット プロトコル バージョン 6 (TCP/IPv6)のチェックを外す。
インターネット プロトコル バージョン 4 (TCP/IPv4)のプロパティ>詳細設定
・リモート ネットワークでデフォルトゲートウェイを使うのチェックを外す。

ActiveDirectory(サーバー)

使う場合。

servermanager>役割と機能の追加>役割ベースまたは機能ベースのインストール>サーバープールからサーバーを選択。
・Active Directory ドメイン サービス
を選択し、インストール

インストール進行状況の途中で、
・このサーバーをドメイン コントローラーに昇格する
をクリックする。

・新しいフォレストを追加する
を選択し、ルートドメイン名を追加する。
ad.sk-tech.jp

次の画面は機能そのまま、
フォレストの機能レベル、ドメインの機能レベル
・Windows Server 2016
・ドメインネーム システム(DNS) サーバー
をチェック
・グローバルカタログを
をチェック

パスワードを入力する。

基本的には以降はそのままで、最後にインストール。

・ユーザー作成

servermanager>ツール>ActiveDirectory>ユーザーとコンピュータ
・左側メニューUsersを選択し、
メニューボタンにある
現在のコンテナーに新しいユーザーを作成
を実行する。

姓名などあるが、とりあえずフルネームとユーザーログオン、パスワードを入力する。

ユーザーは次回ログオン時にパスワード変更が必要
のチェックを外す。

ログ

VPSなので、確認はしておいたほうがいい。

eventvwr>Windowsログ>セキュリティ
ログオン失敗
4625

eventvwr>カスタムビュー>サーバーの役割>RemoteAccess
リモート接続拒否
20271

Windows NIC関連

基本的に変更しなくても大丈夫だけど接続が不安定なときに一応確認。

イーサネットプロパティ

ncpa.cpl>右クリック>プロパティ
①Microsoft ネットワーク用クライアント
②Microsoft ネットワーク用ファイルとプリンター共有
③インターネット プロトコル バージョン 4 (TCP/IPv4)
のみ残せばOK。

①②については、ファイルを共有(公開)する側で②だけチェックしてあれば、
あとは、利用する側も含めチェックがなくても問題ない。

VPNの優先度

ncpa.cpl>右クリック>プロパティ>インターネット プロトコル バージョン 4 (TCP/IPv4)の右クリック>プロパティ>詳細設定
メトリック値を1000など大きな値にする。

Met値確認
netsh interface ipv4 show interface

WatchGuard VPN ClientからOpenVPN GUIに変更

リセット

・設定

Win10設定>ネットワークとインターネット>ネットワークのリセット

間違えてWiFiのUSBアダプターを2つ付けてしまい、ネット接続がおかしくなってしまったときに、このリセットで回復した。

・DNSとNetBiosのキャッシュクリア
ipconfig /flushdns
nbtstat -R

ちなみにnbtstatでIP/ホスト名を調べる場合
nbtstat -R
nbtstat -a Host名 / nbtstat -A IPアドレス
nbtstat -c

・DHCP再取得
ipconfig /release
ipconfig /renew

WiFi(USBアダプタ)

・イベントログの確認
Win+R>eventvwr>アプリケーションとサービスログ>Microsoft>Windows>WLAN-AutoConfig>Operational

powercfg.cplとは別に、以下のようにも設定できる。
・アダプターがUSBの場合
Win+R>devmgmt.msc>ユニバーサル シリアル バス コントローラー
プロパティ>電源の管理>電力の節約…のチェックを外す。

SNP設定

・RWIN値設定(受信ウィンドウ自動チューニングレベル)
netsh interface tcp show global(確認用)
netsh interface tcp set global autotuninglevel=highlyrestricted

・Nic初期化
netsh interface ip reset c:\aaa.log

・Socket初期化
netsh winsock reset

・SNP停止
netsh interface tcp show global (確認用)
netsh int tcp set global rss=disabled
netsh int tcp set global chimny=disabled
netsh int tcp set global netdma=disabled

RSS(Receive Side Scaling), TCP Chimney Offload, NetDMAの3つでSNPといい、ネットワーク負荷を分散させる技術。Win10の場合RSSのみ既定値で有効になっている。

DNS設定

IPv4
8.8.8.8
8.8.4.4

IPv6
2001:4860:4860::8888
2001:4860:4860::8844

プライマリDNS: 1.1.1.2
セカンダリDNS: 1.0.0.2
プライマリDNS: 2606:4700:4700::1112
セカンダリDNS: 2606:4700:4700::1002

https://dev.classmethod.jp/articles/1-1-1-1_are_you_using_it/

NIC詳細設定(オフロード系)

オフロードは有効にするとNICで処理し、無効にするとCPUで処理

・IPv4チェックサムオフロード:無効
・TCP/UDPチェックサムオフロード:無効
送信及び受信時にチェックサムを計算

・ARPオフロード:無効
ARP(IPv4)に応答する機能

・NSオフロード:無効
Neighbor Solicitation(IPv6)に応答する機能

・一括送信(Large Send)オフロード:無効
NICが送信するデータを分割処理をする。

https://docs.microsoft.com/ja-jp/windows-server/networking/technologies/network-subsystem/net-sub-choose-nic#bkmk_offload

https://learn.microsoft.com/ja-jp/windows-server/networking/technologies/hpn/hpn-hardware-only-features

NIC詳細設定(WakeOnLAN系)

・PMEをオンにする(Power Manegement Event):無効

・Wake on Link / Wake On Magic Packet / Wake on Pattern Match:無効

・WOLとシャットダウンリンク:速度低下ではない
Wake On LANの待機状態でリンク速度を落とす

・ウェイク・オン・パターンマッチ:無効

NIC詳細設定(RSS系)

・RSSキューの最大値:2キュー
受信したデータ処理を他のCPUに何回まで回せるか

・RSS ロード・バランシング・プロファイル:NUMA スケーリング
>Closest/最も近いプロセッサー
>ClosestStatic/最も近いプロセッサー・スタティック
>NUMAStatic/NUMAスケーリング・スタティック
>Conservative/コンサーバティブスケーリング

https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/performance_tuning_guide/network-rss

https://docs.microsoft.com/ja-jp/windows-server/networking/technologies/network-subsystem/net-sub-choose-nic#bkmk_rss

https://docs.microsoft.com/ja-jp/windows-server/networking/technologies/network-subsystem/net-sub-choose-nic#bkmk_offload

https://docs.microsoft.com/ja-jp/windows-hardware/drivers/network/introduction-to-receive-side-scaling

https://docs.microsoft.com/ja-jp/windows-hardware/drivers/network/standardized-inf-keywords-for-rss

NIC詳細設定(省エネ系)

・超低消費電力:無効
・グリーンイーサネット:無効
・省電力型イーサネット:無効
(Energy Efficient Ethernet)

・802.3az:無効
有線LANの省エネ機能

NIC詳細設定(WiFi)

・Roaming Sensitivity Level:Disable

ローミング(近くのアクセスポイントに自動的に切り替わる機能)の感度。

・Adaptivity関連

AdaptivityPara
EnableAdaptivity
HLDiffForAdaptivity
L2HForAdaptivity

干渉に関連する設定と思われる。詳細不明。

・QoS Support:Support QoS

帯域、優先制御しネットワークの混雑を解消。
Not Supportにするとリンク速度が低下する。

・VHT 2.4G IOT:Disable

詳細不明。

・Wireless Mode:IEEE 802.11ac

NIC詳細設定(その他)

・Adaptive Inter-Frame Spacing:無効
フレーム送信間隔を調整する。

・PTP Hardware Timestamp:無効
ネットワーク内のデバイスの時刻を高精度で同期する

・自動無効ギガビット:無効

・リンクステート イベントのログ:無効
ログを確認する必要が無ければオフ

・受信側スケーリング:無効
複数のCPUコアに処理を分散させる機能。
分散させると効率が下がる。CPUに余裕があるならば無効。

・割り込み加減:無効
CPUの負荷を下げる機能。CPUに余裕があるならば無効。

・受信バッファ/送信バッファ:2048/2048
バッファ領域。メモリに余裕がある場合は大きくすると良い

・パケット優先度とVLAN(Packet Priority & VLAN):VLAN無効
パケットの優先度、タグつきフレーム(802.1p/802.1Q)の送受信を有効にするかどうか

・フロー制御/FlowControl:有効
通信相手と速度を合わせる、受信側が遅い場合は高速で送ろうとしないようにする※Rx=受信パケット, Tx=伝送パケット

・速度とデュプレックス/スピードと二重化(Speed&Duplex)
自動ネゴシエーション → 1.0 Gbps フルデュプレックス
自動ネゴシエーションだと稀に遅い速度で接続することがある

・ジャンボフレーム/ジャンボパケット:無効
一度の通信で送受信する最大サイズ

https://learn.microsoft.com/ja-jp/windows-server/networking/technologies/hpn/hpn-hardware-only-features

MTU設定

現在のMTU値を確認
netsh interface ipv4 show interfaces

設定する値は通常、1454だが、
https://www.speedguide.net/analyzer.php
でも確認できる。

MTUを設定(xxxの部分はIdx)
netsh interface ipv4 set interface xxx mtu=1454

LLTDプロトコル

ncpa.cpl>プロパティ
Link-Layer Topology Discovery xxxx

過去にネットワークマップを作るため使っていたプロトコル。また、LLDPも同じように探索に使われるプロトコル。両方とも無効で問題なし。

ルートテーブル

・確認

route print

1 ネットワーク宛先
2 ネットマスク
3 ゲートウェイ
4 インターフェース
5 メトリック

1と2でネットワークを判断する。
そのネットワーク宛先の場合、
どのゲートウェイ(ネクストホップ)を使うかは3
どのインターフェースを使うかは4(NICのIPアドレス)

・その他の表示

リンク上はルータを介さない接続のこと。
ネットワーク宛先、ネットマスクが0.0.0.0のものがデフォルトルート。

・リセット

route -f

ncpa.cpl>イーサネット右クリック>プロパティ>インターネットプロトコルバージョン4(TCP/IPv4)>プロパティ
デフォルトゲートウェイが空白になっているので再設定すれば繋がる。VPN系は再起動すれば繋がる。

・ルートテーブル追加

route print
からインターフェース番号を確認。
(インターフェース一覧の左側の数字がインターフェース番号)

route -p add [宛先IPアドレス] mask [ネットマスク] [サーバーIPアドレス] metric [メトリック値] if [インターフェース番号]
(pオプションは再起動後も有効)

・有線とWiFi同時接続

同時に接続は可能だけど、利用されるのは片方だけ。

どちらかを優先させたい場合はメトリック値を小さくする。

どちらが利用されているかの確認はタスクマネージャのパフォーマンスタブから。

 

Git メモ(VisualStudio)

VisualStudioでは、
チェックアウト、マージなど
表示>Git 変更
表示>Git リポジトリ
どちらからでも実行できるが、Git リポジトリは不安定なことが多い。

既存のソリューションにGitに追加

ウィンドウ右下>ソース管理に追加>Git
あるいは
ソリューション右クリック>Gitリポジトリの作成

・既存のリポジトリにソリューションの追加

新規作成したソリューションをリポジトリに保存すればいいので、
Git 変更>Git リポジトリの作成
リポジトリ作成後、
ファイル>スタートウィンドウ>新しいプロジェクトの作成
からソリューションを追加すればいい。

コミット

Git 変更>すべてをコミット
(保存していない場合、その状態でコミットされる)

元に戻す(Revert)

Git リポジトリ>ローカル履歴の上で右クリック>元に戻す。

特定のコミットを消す。その履歴自体をコミットされる。

//1、//2、//3
をコミットして、2をRevertした場合。

編集場所が連続していたりすると競合する。

リセット(Reset)

ある時点のコミットに戻す。

Git リポジトリ>ローカル履歴の上で右クリック>リセット>
・変更を保持(–mixed)
・変更を削除(–hard)

–mixedはHEADの位置、インデックスのみ修正しファイルはそのまま。

ブランチ作成

Git リポジトリ>ローカル履歴の上で右クリック>新しいブランチ

ブランチの切り替えはウィンドウ右下、あるいはGit 変更から。

ブランチツリー

・ブランチはコミットへの参照。
・コミットは親への参照を持っている。
・マージすると親を複数持つ。

masterブランチで、
//1、//2、//3
をコミット。

//1からfeat1ブランチ。
//2からfeat2ブランチ。

feat1に//4を追加しマージ。
feat2に//5を追加しマージ。

ブランチのマージ

featブランチをmasterブランチにマージする場合。

masterブランチをチェックアウトする。
featブランチ右クリック>featをmasterにマージする。

競合した表示。

マージエディターで競合している部分が、赤くなっているので、
チェックボックスを選択>マージを許可。

ブランチのリベース

分岐したブランチをもと(master等)の先頭にくっつける。

masterブランチで、
//1、//2
をコミット。

//1からfeatブランチを作成。

featに//3をコミット。

・featをmasterにリベース。

・マージの場合。

ちなみに、リベースのとき//1からfeatブランチを作成しているが、//2からfeatブランチを作成しリベースすると以下の通り。

マージとリベースの違い

マージは、masterとfeatを共通の親とするコミットを作るが、リベースはmasterを親としてfeatを付ける。VisualStudioでの画面の場合。

・masterブランチ
1コミット
2コミット
featブランチ作成
4コミット

・featブランチ
3コミット

・masterブランチをチェックアウトし、マージとリベース

マージ

リベース

チェリーピック

分岐したブランチの特定コミットをもと(master等)の先頭にくっつける。

masterブランチで、
//1、//2、//3
をコミット。

//1からfeatブランチを作成し、
//4、//5
をコミット。

masterをチェックアウト。

featブランチの
//4
を右クリック>チェリーピック。

リモートリポジトリ

ローカルリポジトリ作成時のダイアログでGitHubにリモートリポジトリが作成される設定になっている。

・ブランチの種類

ブランチには、
1.ローカルブランチ
2.トラッキングブランチ
3.リモートブランチ
がある。

ローカルブランチ、トラッキングブランチはローカルに存在していて、リモートブランチに変更があってもフェッチするまでトラッキングブランチは自動で変化しない。

例えば、
1.master (ローカル)
2.origin/master (ローカル)
3.master (GitHubなど)

ローカルブランチの追跡対象

1はリモートと同名(例えばmaster)であっても追跡対象を持っても持たなくてもいい。VisualStudio上では持っていると緑色の矢印がある。

Git 変更>ブランチ名プルダウン>右クリック>リモートブランチ名>チェックアウト
からローカルブランチを作成すると追跡対象を持つローカルブランチとなる。

また、
Git リポジトリ>ローカル履歴>右クリック>新しいブランチ
から作成すると追跡対象がないローカルブランチになるが、その後プッシュした時点で追跡対象を持つ。

標準では追跡対象を持っている。

フェッチ

フェッチを使うとリモートブランチの情報を取得してトラッキングブランチが最新になる。ちなみに、VisualStudioでフェッチは、どのローカルブランチをチェックアウトしていても全てのトラッキングブランチが最新になる。

プル

フェッチ、マージを同時に行う。

プルを実行すると、チェックアウトしているローカルブランチだけマージまで実行される。その他のチェックアウトしていないローカルブランチもフェッチは実行される。

プッシュ

プッシュはブランチ単位で行う。

Git リポジトリ>ローカルブランチ>右クリック>プッシュ
あるいは、
Git 変更>リポジトリ名プルダウン>右側にあるプッシュボタン

プッシュ実験

リモートが追跡対象の場合

・ローカルで新しいブランチを作成してプッシュ

リモートに同名のブランチが存在しない場合、自動でリモートにfeatブランチが作成される。

・ローカルブランチのコミットを進めてプッシュ。

これは通常処理なので問題ない。

・リモートブランチのコミットが進んでいる状態でプッシュする

エラーになるので、
プル>プッシュ(フェッチ>マージ>プッシュ)
で処理する。

・ローカル、リモートそれぞれコミットが進んでいる場合。

エラーになるが、競合しない個所なら
プル>プッシュ(フェッチ>マージ>プッシュ)
で処理できる。

・他のローカルからリモートにブランチがプッシュされていて、ローカルで新しく同名ブランチを作成してプッシュする。(追跡対象になっておらずブランチの名前が一緒なだけ)

ローカルのコミットが進んでいるのはOKだが、リモートのコミットが進んでいるとNGになる。前述と同じ結果。

この場合、ローカルとリモート別々にブランチを作成していて追跡対象になっていないので、
プル>プッシュ(フェッチ>マージ>プッシュ)
とする。前述と同じ結果。

・他のローカルから既にリモートにブランチがプッシュされていて、
ローカルで新しく同名ブランチを作成してフェッチする。

フェッチはトラッキングブランチを更新するだけなので、ローカルブランチと
トラッキングブランチの状態が違うだけで何もおきない。

・ローカルリポジトリでリセットしてリモートにプッシュ。

ローカルリポジトリのコミットの方が前にあるのでプッシュできない。

・ローカルリポジトリで元に戻して(特定のコミット削除)プッシュ。

元に戻す(Revert)は削除の処理もコミットされるので、プッシュできる。

リモートリポジトリ削除

Git リポジトリ>(remotes/origin以下の)リポジトリ>右クリック
リモートブランチを削除

デフォルトブランチは削除できない。

エラー対処

ときどき、インデックスファイルへ書き込めない、チェックアウトできないなどのエラーが発生する。その場合は、一度.gitフォルダごと消してしまう。チェックアウトするとソースファイル自体が書き換わっているので、最新の状態にして.gitフォルダを消しても問題はない。

PHP パスワード生成

パスワードがほしいとき用。

<?php
echo exec(“head /dev/urandom | tr -dc a-km-np-z2-9 | head -c 13”);

head
先頭から10行

/dev/urandom
ランダムな文字列

tr -dc
指定した文字列の集合

head -c
指定した文字数

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
で接続できる。