Git メモ(VisualStudio)

VisualStudio2019 16.8.1

既存のソリューションに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を追加しマージ。

ブランチのマージ

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

競合した表示。

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

ブランチのリベース

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

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

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

featに//3をコミット。

・featをmasterにリベース。

・マージの場合。

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

チェリーピック

分岐したブランチの特定コミットをもと(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以下の)リポジトリ>右クリック
リモートブランチを削除

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

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 from 192.168.12.2 to any port 25 proto 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

PHP セキュリティメモ

最低限の部分

・PHP.ini

今回は、さくらのレンタルサーバーで利用している。
設置場所は、ドキュメントルートで、
echo phpinfo();
Loaded Configuration File
に反映される。

php.iniのパーミッションは600

追加内容は、
display_errors = Off
expose_php = Off

session.name = “hoge”
session.use_strict_mode=On
session.cookie_httponly=On
; HTTPSの場合
session.cookie_secure=On

allow_url_fopen = Off
file_uploads = Off

; post_max_sizeより大きくする
memory_limit = 20M
; upload_max_filesizeより大きくする
post_max_size = 20M
upload_max_filesize = 20M

・通常ファイル、ディレクトリのパーミッション

ファイル
604(もしくは644)

ディレクトリ
705(もしくは755)

・プログラム

リクエストにはワンタイムトークンを付加。
入力された値はサニタイジング。

 

LINE WORKS 自動起動しない

最近LINE WORKSが自動起動しなくなった。

どうやら、
Windows起動時に自動実行する
をチェックすると、
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
にエントリされるようだが、フルパスじゃなく実行ファイル名のみになっていた。

Get-ItemProperty -Path Registry::HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

フルパスに書き換えると、1度は自動起動するが、起動時にエントリを修正するようで、また実行ファイル名のみになってダメ。

他にも、
sysdm.cpl>環境設定>環境変数
からパスを通してみたけどダメ。

もともと正しく自動起動していたときにどういう値だったか見ていないので、どうしようもない。

再インストールは面倒なので、
Windows起動時に自動実行する
のチェックを外し、
shell:startup
にショートカットを登録した。

 

 

 

さくらのレンタルサーバー HTTPS化

サーバコントロールパネルにログイン。

左側メニュー>ドメイン/SSL>ドメイン/SSL
をクリック。

対象ドメインにあるSSLボタン
をクリック。

登録設定を始める
をクリック。

Let’s Encrypt (無料SSL)
を選択する。

しばらくすれば完了。

***

ドキュメントルートに.htaccessを設置するという方法もあるが、先程と同じく、
サーバコントロールパネルにログイン。

左側メニュー>ドメイン/SSL>ドメイン/SSL
をクリック。

対象ドメインにある設定ボタン
をクリック。

HTTPSに転送する
にチェック。

からも設定できる。

コントロールパネルから転送まで設定できるし、特につまずくことなくできる。

VBA ListBox参考

ListBoxの使い方を忘れてしまうので、さっき作ったものをメモ代わり。

 

WatchGuard VPN ClientからOpenVPN GUI

ときどき利用しているWatchGuard VPN Clientの調子が悪く、接続プロセス中に止ってしまうことが多くなった。

情報も少なく原因追求もできなかったので、試しにOpenVPNのクライアントをそのまま使ってみようかと考えた。

OpenVPN GUIをインストールし、C:\Users\xxx\AppData\Roaming\WatchGuard\Mobile VPN
の中にある、
ca.crt
client.crt
client.ovpn
client.pem
の4つのファイルを、そのまま
C:\Program Files\OpenVPN\config
の中にコピーしたらOpenVPN GUIで接続できたので、しばらく使ってみる。

VBA 起動部分テンプレート

いつも忘れてしまうのでメモ。

右クリックメニューの階層化。高速化等々。