20200107のLinuxに関する記事は8件です。

Pleasanter .NetCore版 インストール(CentOS7 .NetCore2.2 SQL Server 2019 )

この記事に書いてある事

出来るだけ新しい環境で Plesanterを動かしたい。
で、
2020/1/5 時点では Pleasanter は .NetCore 3.1 未対応 .NetCore2.2 で我慢
.NetCore3.1/SQL Server 2019 は CentOS8 未対応 CentOS7で我慢
CentOS7 ならSQL Server 2019が動きそう

Pleasanter公式が配布している .NetCore版を利用した導入手順です。(Buildしません)
Pleasanter公式のインストール手順をLinux向けに少し整理してインストール + 以下手順を追加した作業ログです。

  • systemctl で起動を制御する為の設定ファイル例
    システム起動と一緒に Pleasanterを起動する設定の例
  • NginX を使ったリバースプロキシ設定
    Port 80 で外部公開する為の設定例
  • Firewalld でのアクセス許可設定
    外部からPleasanterへのアクセスを許可する為の設定

動作環境

必要なパッケージ 動作環境 延長サポート終了日
.NetCORE 2.2 RHEL 6 x64
RHEL/CentOS/Oracle 7 x64
Fedora28,29
Debian9
Ubuntu 16.04,18.04,18.10
Linux Mint 17,18
OpenSUSE 15+
SLES 12 SP2+
Alpine Linux 3.7+
MacOS 10.12+
2019年12月23日でサポート切れ
SQL Server 2019 RHEL 7.3,7.4,7.5,7.6
SUSE Linux Enterprise Server v12 SP2,SP3,SP4
Ubuntu16.04
Docker
リリース後6~10年が適用されるはず
2025年~2029年
Microsoft ODBC Driver 17 for SQL Server Debian 8,9,10
RHEL 6,7,8
SUSE Linux Enterprise Server 11 SP4,12,15
Ubuntu 14.04,16.04,18,04,18,10,19.04
MacOS
不明
Pleasanter

Ubuntuを利用する場合、全ての条件を満たすには Ubuntu16.04 を選択するのが良さそうです。(工夫すれば18.04でも動くみたいです)
RedHatEnterpriseLinux(RHEL)であれば妥当ないろいろなバージョンを選べそうですが、RHEL8にはまだ対応していません。
また、CentOSはSQLServerの動作環境に含まれていませんが FAQ で動作するだろう。とコメントされています。で、実際動作してます。
妥当なバージョンのOSと導入ハードルの低さから CentOS7 を利用する事にしました。

導入の流れ

  • OS導入:今回はCentOS7系がインストールされている物として進めます
  • .NetCORE 2.2 導入
  • SQL Server 2019 導入
  • MS SQL Server Command Line Tools の導入
  • Microsoft ODBC Driver 17 for SQL Server 導入
  • GDI+ 導入
  • SQL Server 2019の構成
  • Pleasanter の実行
  • 動作確認
  • リバースプロキシの設定
  • Firewalld の設定
  • 送信用メールサーバ設定
  • 追加設定(Reminder機能/Backupスクリプト)

.NetCORE 2.2 の導入

$ sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
$ sudo yum -y update
$ sudo yum -y install dotnet-sdk-2.2

SQL Server 2019 の導入

MS SQL Server 導入

$ sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/7/mssql-server-2019.repo
$ sudo yum -y install mssql-server

MS SQL初期セットアップ

$ sudo /opt/mssql/bin/mssql-conf setup
usermod: 変更はありません
SQL Server のエディションを選択します:
  1) Evaluation (無料、製品使用権なし、期限 180 日間)
  2) Developer (無料、製品使用権なし)
  3) Express (無料)
  4) Web (有料)
  5) Standard (有料)
  6) Enterprise (有料) - CPU Core utilization restricted to 20 physical/40 hyperthreaded
  7) Enterprise Core (有料) - CPU Core utilization up to Operating System Maximum
  8) 小売販売チャネルを介してライセンスを購入し、入力するプロダクト キーを持っています。

エディションの詳細については、以下を参照してください
https://go.microsoft.com/fwlink/?LinkId=852748&clcid=0x411

このソフトウェアの有料エディションを使用するには、個別のライセンスを以下から取得する必要があります
Microsoft ボリューム ライセンス プログラム。
有料エディションを選択することは、
このソフトウェアをインストールおよび実行するための適切な数のライセンスがあることを確認していることになります。

エディションを入力してください(1-8): 3
この製品のライセンス条項は
/usr/share/doc/mssql-server で参照できるほか、次の場所からダウンロードすることもできます:
https://go.microsoft.com/fwlink/?LinkId=855862&clcid=0x411

プライバシーに関する声明は、次の場所で確認できます:
https://go.microsoft.com/fwlink/?LinkId=853010&clcid=0x411


SQL Server の言語の選択:
(1) English
(2) Deutsch
(3) Espanol
(4) Francais
(5) Italiano
(6) 日本語
(7) ???
(8) Portugues
(9) Русский
(10) 中文 ? ?体
(11) 中文 (繁体)
オプション 1-11 を入力: 6
SQL Server システム管理者パスワードを入力してください: <管理者パスワードを設定>
SQL Server システム管理者パスワードを確認入力してください:
SQL Server を構成しています...

ForceFlush is enabled for this instance.
ForceFlush feature is enabled for log durability.
セットアップは正常に完了しました。SQL Server を起動しています。
$
$ systemctl status mssql-server

システム管理者パスワード(SAパスワード)には強力な文字列を指定しましょう。

MS SQL Server Command Line Tools の導入

unixODBCの更新とmssql-tools の導入
17.3以降で SQL Server 2019をサポートしています。導入されているバージョンに注意しましょう。

$ sudo curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/7/prod.repo
$ sudo yum remove unixODBC-utf16 unixODBC-utf16-devel
削除対象が存在しない場合もあります。気にせず次に進んでください。
$ sudo yum install -y mssql-tools unixODBC-devel

以下の質問が 2回あります "YES" を応答してください
Do you accept the license terms? (Enter YES or NO)
YES

Microsoft ODBC Driver 17 for SQL Server 導入

MS SQL Server Command Line Tools と同時に msodbcsql も導入済みなので省略

GDIのインストール

GDI+互換のAPI をインストールします

$ sudo yum install -y epel-release
$ sudo yum install -y libgdiplus

Pleasanter導入

実行ファイルの配置

公式のダウンロードサイトから入手してください。
簡単なアンケートがあるので記入しましょう。
入手したファイルを適当な位置に展開後、Rds.json の SaConnectionString 行内にある SetSaPWD を SQL Server の管理者パスワードに置き換えてください。

$ sudo mkdir /Pleasanter
$ unzip -q Pleasanter.NetCore.1.0.0.0.zip
$ sudo mv Pleasanter/* /Pleasanter/
$ sudo vi /Pleasanter/Pleasanter.NetCore/Implem.Pleasanter/App_Data/Parameters/Rds.json
{
    "Provider": "Local",
    "TimeZoneInfo": "Tokyo Standard Time",
    "SaConnectionString": "Server=(local);Database=master;UID=sa;PWD=SetSaPWD;Connection Timeout=30;",
    "OwnerConnectionString": "Server=(local);Database=#ServiceName#;UID=#ServiceName#_Owner;PWD=SetAdminsPWD;Connection Timeout=30;",
    "UserConnectionString": "Server=(local);Database=#ServiceName#;UID=#ServiceName#_User;PWD=SetUsersPWD;Connection Timeout=30;",
    "SqlCommandTimeOut": 600,
    "MinimumTime": 3,
    "DeadlockRetryCount": 4,
    "DeadlockRetryInterval": 1000
}
$

Pleasanter用DBの構成

$ cd /Pleasanter/Pleasanter.NetCore/Implem.CodeDefiner/
$ dotnet Implem.CodeDefiner.NetCore.dll _rds

Pleasanter 起動確認

起動が確認出来たら Ctrl + C で終了してください。

$ cd ../Implem.Pleasanter/
$ dotnet Implem.Pleasanter.NetCore.dll
warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
      No XML encryptor configured. Key {a11dba1c-f2da-4782-ae6d-ace09095eeac} may be persisted to storage in unencrypted form.
Hosting environment: Production
Content root path: /Pleasanter/Pleasanter.NetCore/Implem.Pleasanter
Now listening on: http://localhost:5000
Now listening on: https://localhost:5001
Application started. Press Ctrl+C to shut down.

Pleasanter用サービススクリプト作成

OS起動時に Pleasanter を自動起動させるためサービススクリプトを作成します。

$ sudo vi /etc/systemd/system/pleasanter.service
[Unit]
Description = Pleasanter
Documentation =

Wants=network.target
After=network.target

[Service]
ExecStart = /usr/bin/dotnet Implem.Pleasanter.NetCore.dll --urls=http://localhost:5000
WorkingDirectory = /Pleasanter/Pleasanter.NetCore/Implem.Pleasanter
Restart = always
RestartSec = 10
User = root
Group = root
Environment=ASPNETCORE_ENVIRONMENT=Production

[Install]
WantedBy = multi-user.target

$ sudo systemctl daemon-reload
$ sudo systemctl start pleasanter
$ sudo systemctl enable pleasanter

リバースプロキシ(NginX)の設定

通常のwebサーバを同じ Port80 でアクセス出来るようにリバースプロキシの設定を行います。
ここでは紹介しませんが、https化する場合もリバースプロキシを使うと簡単だと思います。

  • 設定例の server_name 行には 実際アクセスする時のホスト名を指定してください。
$ sudo vi /etc/nginx/conf.d/pleasanter.conf

server {
        listen  80;
    server_name   pleasanter.example.com;
    location / {
        proxy_pass         http://localhost:5000;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

$ sudo sysetmctl restart nginx

Firewalld の設定

クライアントからWebサービスへのアクセスさせるため 80/tcp(http) へのアクセス許可設定を追加します。

有効なzoneを確認
$ sudo firewall-cmd --get-active-zone
public
  interfaces: enp1s0

Firewallのルールを確認
$ sudo firewall-cmd --list-all

Port 80/tcpの保護を解除します
$ sudo firewall-cmd --permanent --zone=public --add-port=80/tcp
success
$ sudo firewall-cmd --reload
$ sudo firewall-cmd --list-all

送信用メールサーバ設定

  • SmtpHost に 送信に利用するメールサーバを指定します。
    その他の項目は必要に応じて設定してください。
    なお、設定変更後はPleasanterの再起動が必要です。

Pleasanter Mail関連設定

$ sudo vi /Pleasanter/publish/Implem.Pleasanter/App_Data/Parameters/Mail.json
{
    "SmtpHost": "localhost",
    "SmtpPort": 25,
    "SmtpUserName": null,
    "SmtpPassword": null,
    "SmtpEnableSsl": false,
    "FixedFrom": null,
    "AllowedFrom": null,
    "SupportFrom": "\"Pleasanter.org\" <support@pleasanter.org>",
    "InternalDomains": "",
    "AddressValidation": "\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]+\\b"
}

Reminder設定

Python36,pyodbc の導入/Reminderの設定

  • EPEL リポジトリを登録しているのでyumで導入出来ます。
    python36はReminder、pyodbcはbackupで使用します。
$ sudo yum -y install python36
$ sudo mkdir /Pleasanter/tools
$ sudo cp -P /Pleasanter/Implem.Pleasanter.NetCore/Tools/Reminder.py /Pleasanter/tools/
$ sudo vi /Pleasanter/tools/Reminder.py

localhost 部分をクライアントからアクセス出来るホスト名に変更する
urllib.request.Request("http://localhost/pleasanter/reminderschedules/remind?NoLog=1")

cron 設定
$ sudo crontab -e
@reboot python3 /opt/pleasanter-tools/Reminder.py

$ python3 /opt/pleasanter-tools/Reminder.py

MS SQLのバックアップスクリプト設置

python3 で実行すると pyodbcが無いと怒られる。
python で実行すると、epelから導入したpyodbcが利用出来るのか正常に動作しました。

$ sudo yum -y install pyodbc
$ sudo vi /Pleasanter/Implem.Pleasanter.NetCore/Tools/DbBackup.py

以下の行に sa パスワードを設定してください
pwd = "SetSaPWD"

$ python /Pleasanter/Implem.Pleasanter.NetCore/Tools/DbBackup.py
Backedup: /var/opt/mssql/data/backup/Implem.Pleasanter/20190815_121020.bak
Shrinked: Implem.Pleasanter
$

初期アカウント情報

設定項目 初期値 備考
管理アカウント administrator
初期パスワード pleasanter 初回ログイン時に変更を求められます

メモ

saパスワードのリセット方法

作業中に困ったのでメモ

$ sudo systemctl stop mssql-server
$ sudo /opt/mssql/bin/mssql-conf set-sa-password
SQL Server システム管理者パスワードを入力してください: <新しい管理者パスワード>
SQL Server システム管理者パスワードを確認入力してください:
SQL Server を構成しています...

ForceFlush is enabled for this instance.
ForceFlush feature is enabled for log durability.
システム管理者パスワードが変更されました。
'sudo systemctl start mssql-server' を実行して SQL Server を起動してください。
$
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWSでのデプロイ手順①ネットワーク環境設定

初心者には難関である、AWSを使用したデプロイ手順を書いてみます

AWSはUIもよく変化するので、
現在のもの(2019/10)で書いています

※アカウントがない人はまず新規で申し込みしておいてください

今回内容
STEP1 ネットワーク環境設定
1.VPCの作成
2.サブネットの作成
3.インターネットゲートウェイの作成
4.ルートテーブルの作成
5.サブネットとの紐付け
6.セキュリティグループの作成

STEP2 EC2の設定
1.EC2にてインスタンスの作成
2.Elastic IPの割り当て
3.インスタンスにSSHでログイン

次回内容
STEP3以降
AWSでデプロイするまでの手順②サーバー(EC2インスタンス)環境設定

※ここでいうサーバーとはAWS EC2インスタンス (Amazon Linux) のこととする

STEP1 ネットワーク環境設定

1.VPCの作成

https://aws.amazon.com/
Amazon Web Servicesでサインインします

ヘッダーにあるリージョンを東京に設定し、
「VPC」を検索し「VPC」にいきます

スクリーンショット 2019-10-01 10.13.39.png

サイドメニューのVPCより[VPCの作成]を押下します
スクリーンショット 2019-09-29 20.26.18.png

作成画面になるので
今回は下のように設定し、[作成]を押下します

・ネームタグ       :testVPC
・IPv4 CIDRブロック:10.0.0.0/16
・IPv4 CIDRブロック:ブロックなし
・テナンシー       :デフォルト

スクリーンショット 2019-10-01 10.18.41.png

2.サブネットの作成

今回のサブネットは[RDS]を配置するためのサブネットを2つを作成する構成です。

サイドメニューのサブネットより[サブネットの作成]を押下します
スクリーンショット 2019-09-29 20.30.39.png

作成画面になるので
下のように設定し、[作成]を押下します

・ネームタグ:testSubnet
・VPC:先ほど作成したものを選択
・アベイラビリティゾーン:ap-northeast-1a
・CIDRブロック:10.0.0.0/24

同様にもう一つ作成します

・ネームタグ:testSubnet2
・VPC:先ほど作成したものを選択
・アベイラビリティゾーン:ap-northeast-1c
・CIDRブロック:10.0.1.0/24

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3335353531372f34633731633536382d346231352d653262622d636665612d6333373631643964363634642e706e67.png

3.インターネットゲートウェイの作成

サイドメニューのインターネットゲートウェイより
[インターネットゲートウェイの作成]を押下します

スクリーンショット 2019-09-29 20.34.02.png

作成画面になるので
下のように設定し、[作成]を押下します

名前タグ:testGateway

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3335353531372f30303636333333392d383839352d643333632d343637332d6362376530643365353366632e706e67.png

[アクション]を押下し、[VPCにアタッチ]を押下します
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3335353531372f63333666633763662d313638622d626136392d306135652d3365326235653836303433642e706e67.png

下のように設定し、[アタッチ]を押下する

VPC:先ほど作成したものを選択

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3335353531372f66303032333238392d653838612d326264652d306337632d3661323536666230373264312e706e67.png

4.ルートテーブルの作成

サイドメニューのルートテーブルより[ルートテーブルの作成]を押下

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3335353531372f37616534643065332d323862302d613333372d346132632d6630623434383936643238352e706e67.png

作成画面になるので
下のように設定し、[作成]を押下します

名前タグ:testTable
VPC:先ほど作成したものを選択

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3335353531372f32623430326161332d633761652d666461622d616163622d6130326265323933383230652e706e67.png

作成したルートテーブルを選択した状態で、
下のタブ「ルート」>「ルートの編集」を押下、[ルートの追加]を押下

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3335353531372f35336331383337372d353137662d613265342d313139352d3263613730396130306661632e706e67.png

下のように設定し[ルールの保存]を押下します

送信先:0.0.0.0/0
ターゲット:Internet Gatewayを選択し、先ほど作成したゲートウェイIDを選択

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3335353531372f63626462313066362d656534352d616239312d613164612d6534363733636333313136662e706e67.png

5.サブネットとの紐付け

→左側の「サブネット」を選択します
→関連付けを変更するサブネットを選択します
→画面下のルートテーブルを選択します
→[ルートテーブルの関連付けの編集]を押下します

スクリーンショット 2019-10-01 10.35.17.png

→先ほど作成したルートテーブルIDを選択します
→[保存]を押下します

スクリーンショット 2019-10-01 10.39.06.png

6.セキュリティグループの作成

サイドメニューの
セキュリティ>セキュリティグループより>[セキュリティグループの作成]を押下します
スクリーンショット 2019-09-29 21.07.37.png

下のように設定し、[作成]を押下する

セキュリティグループ名:testSecurityGroup
説明:そのセキュリティグループの説明
VPC:先ほど作成したものを選択

スクリーンショット 2019-10-01 10.43.36.png

画面下のインバウンドのルールの[ルールの編集]を押下し、[ルールの追加]を押下、
下のように設定し、[ルールの保存]を押下する

タイプ:SSH
ソース:マイIP

スクリーンショット 2019-09-30 21.23.54.png

STEP2 EC2の設定

AWSでDBを利用したい場合、

・EC2にてインスタンスの作成
・RDSを利用する
※ ただRDSを使用すると料金が掛かるので、
使用しない場合はサーバーに直接データベースを作成してください。

この2種類の方法があります。
今回は
EC2にてインスタンスの作成(サーバーに直接データベースを作成)
をメインに行なっていきます

1.EC2にてインスタンスの作成

インスタンスは起動のままだと
課金請求されるので、使わない場合は
停止状態にすることをお勧めします

AWS マネジメントコンソールにて"EC2"を検索しアクセスする

スクリーンショット 2019-09-26 23.58.51.png

サイドメニューのインスタンスより[インスタンスの作成]を押下する

スクリーンショット 2019-09-27 0.02.03.png

今回はこちらをクリックします
スクリーンショット 2019-09-27 0.06.56.png

[次の手順: インスタンスの詳細の設定]をクリックする

スクリーンショット 2019-09-27 0.08.21.png

下を設定し,[次の手順: ストレージの追加]を押下する

ネットワーク:先ほど作成したVPCを選択
サブネット:先ほど作成したサブネットを選択
自動割り当てパブリック IP:有効
他はデフォルトのまま

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3335353531372f30353438646266632d333631362d396662392d386166662d6265383133353536653934632e706e67.png

デフォルトのままで,[次の手順: タグの追加]を押下する

タグを追加する

[タグの追加]を押下する
スクリーンショット 2019-09-30 16.46.54.png

キー:Name
値:testInstance

で[次の手順: セキュリティグループの設定]を押下する

セキュリティグループの設定する

セキュリティグループの割り当て:既存を
選択し、先ほど作成したセキュリティグループを選択し、
[確認と作成]を押下する
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3335353531372f39616532356237392d396565342d363531342d396237392d6237333732613434373030322e706e67.png

一覧画面にて、
最後に[起動]を押下します

下ような表示になり、
新しいキーペアを作成を選択、
キーペア名を入力し、
[キーペアのダウンロード]を押下します
(一度作成されたファイルは再度ダウンロードができなくなるので注意)
スクリーンショット 2019-09-30 19.51.28.png

ダウンロードしたら[インスタンスの作成]を押下します

しばらくするとインスタンスが作成されます!!

2.Elastic IPの割り当て

サイドメニューの
ネットワーク&セキュリティ>
Elastic IP[新しいアドレスの割り当て]を押下する

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3335353531372f36323739383338622d633864352d643366312d383066342d6639613635663234633238612e706e67.png

[割り当て]を押下します
スクリーンショット 2019-09-30 17.06.31.png

[閉じる]で戻り

[アクション]>アドレスの関連付けを押下します
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3335353531372f34643235323034332d663531632d653261362d396330362d3462626139363734326635662e706e67.png

インスタンスを先ほど作成したものを選択し、[関連付け]を押下する
スクリーンショット 2019-09-30 17.09.45.png

※停止していたインスタンスにElastic IPを関連付けたままにしていると小額の料金が発生してしまうので、
インスタンスを停止している場合は解放することをお勧めします

Elastic IPをアタッチ(関連付け)しているインスタンスが起動している状態であれば、料金は発生しません。しかし、インスタンスが「停止」している状態や、Elastic IPを使っていない場合、料金が発生します。そのため、使わないElastic IPは削除しなければいけません。

Elastic IPがまだインスタンスにアタッチしている場合は、Elastic IPから該当のIPを選択し、「アクション」→「アドレスの関連付けの解除」をクリックします。確認画面が表示されますので、間違いなければ、「アドレスの関連付けの解除」をクリックし、EIPをデタッチします。

その後、再度該当のIPを選択し、「アクション」→「アドレスの解放」をクリックし、EIPを削除します。これで、料金が発生しなくなります。

3.インスタンスにSSHでログイン

各種インストール

python

$ brew install python

pip(pythonのパッケージ管理システム)

$ easy_install pip

awscli(awsをPCのコンソール上から扱うためのもの)

$ pip install awscli

できない場合はこちら
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-macos.html

ec2-userでインスタンスにログインする

AWSでは、
EC2インスタンスにログインできるユーザーとして、
デフォルトでec2-userという名のユーザーが用意されています
こちらではまずec2-userでログインします

ターミナルで以下を入れていきます
(※testKey.pemは、先ほどSTEP2でダウンロードしたキーです)

$ mv Downloads/testKey.pem .ssh/
(#作成した公開鍵をsshフォルダに移動)

$ cd .ssh/
(#ディレクトリをsshに移動)

$ chmod 600 testKey.pem
(#公開鍵に600番で定義されたアクセス権を付与する)

$ ssh -i testKey.pem ec2-user@(@以降のURLは、作成したEC2インスタンスと紐付けたElastic IPを使用してください。)
(#公開鍵を利用してec2-userとしてログイン)

例:
($ ssh -i testKey.pem ec2-user@13.112.140.56)

yes/noを聞かれるので

yesでEnterを押下
スクリーンショット 2019-09-30 21.49.54.png

無事にログインできました!!!


ssh port 22 Operation timed out
エラーになる場合はこちら
https://qiita.com/yokoto/items/338bd80262d9eefb152e

https://qiita.com/minicoopers0716/items/cac50f29ef79a03f1d8d

ユーザー作成(EC2上での操作)

上記方法でインスタンスにログインしている状態で

[ec2-user|~]$ sudo adduser testuser
(#新規ユーザー名の登録)
[ec2-user|~]$ sudo passwd testuser
(#新規ユーザー名のパスワード登録)


パスワードを登録します


vimでユーザーに権限を追加する記述する

$ sudo visudo

vimモードになります

## Allows people in group wheel to run all commands
# %wheel        ALL=(ALL)       ALL

## Same thing without a password
# %wheel  ALL=(ALL)       NOPASSWD: ALL

## Allows members of the users group to mount and unmount the
## cdrom as root
# %users  ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom

## Allows members of the users group to shutdown this system
# %users  localhost=/sbin/shutdown -h now

検索モードにし下の
"wheel"を探します
(キーボードで"/wheel"を入力し押下、"N"を押下すると次にいけます)

## Same thing without a password
# %wheel  ALL=(ALL)       NOPASSWD: ALL

キーボードの「i」を押下し、編集モードで

# %wheel ALL=(ALL) NOPASSWD: ALL
のコメントアウトを外します

## Same thing without a password
%wheel  ALL=(ALL)       NOPASSWD: ALL

さらに

その下に、作成したユーザーに権限を追加する記述
testuser   ALL=(ALL)       ALL  を追加する
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
testuser   ALL=(ALL)       ALL

キーボードの「esc」を押下します
「:wq」を入力しEnterで保存します

こちらでユーザーの切り替えを行ってください。

[ec2-user|~]$ sudo su - testuser
(#ユーザー名の切り替え)
[testuser@ ~]

無事に[ec2-user|がtestuser(作成したユーザー名)と切り替わればOKです。

exit

を二回いれて
で一度ログアウトする

追加ユーザ用キーペアを作成

こちらはローカルでの作業です

$ cd .ssh
[.ssh]$ ssh-keygen -t rsa
(#公開鍵を作成)
-----------------------------
Enter file in which to save the key ():
(#ここでファイルの名前を記述して、エンターを押す)
test_key_rsa 

Enter passphrase (empty for no passphrase): 
(#何もせずそのままエンター)
Enter same passphrase again: 
(#何もせずそのままエンター)
-----------------------------

[.ssh]$ ls
#「test_key_rsa」と「test_key_rsa.pub」が生成されたことを確認
[.ssh]$ vi config
(#VIMを起動し、設定ファイルを編集する)
-----------------------------

キーボードの「i」を押下し、編集モードで

# 以下を追記
Host test_key_rsa
  Hostname 前出のElastic IP (#自分の設定に合わせて)
  Port 22
  User testuser (#先ほどのユーザー名)
  IdentityFile ~/.ssh/test_key_rsa (#秘密鍵の設定)
* ()部分は削除する。
-----------------------------
キーボードの「esc」を押下します
「:wq」で保存します

[.ssh]$ cat test_key_rsa.pub (#鍵の中身をターミナル上に出力)

★ ssh-rsa~~~~localまでをコピーしておく

サーバー側作業

続いてサーバーでの作業です
ec2-userでログインします

$ cd .ssh
$ ssh -i testKey.pem ec2-user@(@以降のURLは、作成したEC2インスタンスと紐付けたElastic IPを使用してください。)
[ec2-user|~]$ sudo su - testuser
[testuser@ ~]$ mkdir .ssh
[testuser@ ~]$ chmod 700 .ssh
[testuser@ ~]$ cd .ssh
[testuser@ |.ssh~]$ vi authorized_keys

(vimがオープンするので、「i」を押し、
先ほど ★ で、コピーしたssh-rsaをペーストする)
キーボードの「esc」を押下します
「:wq」で保存します

[testuser@ |.ssh~]$ chmod 600 authorized_keys

$ exit
もう一度
$ exit
ログアウト
[~]$ ssh test_key_rsa

ログインできれば、無事ユーザー設定は終了です。

なお、時間が経つとローカルからログインできなくなることがあるので、その場合は、
セキュリティグループ>インバウンド>編集で
SSHのソースで
マイIPを選択し[保存]すると繋がるようになります

続きはこちら
AWSでデプロイするまでの手順②サーバー(EC2インスタンス)環境設定

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

OMC Log Analyticsの設定方法と使い方 - Linux編 -

Oracle Management CloudのLog Analyticsは、OSやMiddleware,Databaseなどの様々なログを集約して横断的に分析することができるサービスです。
ここでは、実際にLinuxの代表的なログの取得するための設定手順、基本的な分析手法について紹介します。

  • 左上のメニューアイコンからログアナリティクス-> ログ管理 -> エンティティを選択
    image.png

  • 新規アソシエーションをクリック
    image.png

  • エンティティタイプをHost(Linux)に選択してエンティティの追加をクリック
    image.png

  • エンティティ登録したHostが選択可能になっているのでチェックして選択をクリック
    image.png

  • 続行を選択
    image.png

  • Linux Secure LogsとLinux SysLogs Logsを選択して一番下の続行ボタンをクリック
    image.png

  • エンティティの関連付けをクリック
    image.png

  • これでCloud AgentがOSの2つのログファイルを収集する設定が完了
    image.png

  • Cloud Agentをインストールしたopcユーザは/var/logディレクトリのログファイルへのアクセス権限がないので、以下コマンドで参照権限を付与する

[opc@demovm1 cloudagent_linux]$ sudo setfacl -m u:opc:r /var/log/messages*
[opc@demovm1 cloudagent_linux]$ sudo setfacl -m u:opc:r /var/log/secure*
  • Log Analyticsの画面にSyslogとSecureLogが表示されたら設定はOK
    image.png

  • 使用例
    Lableのフィールドをグループ化基準にドラッグ&ドロップ。右側の円グラフがラベリングされたログのタイプでグループ化される
    image.png

  • ビジュアライゼーションからヒストグラム付きレコード選択
    image.png

  • 時系列でのログの出力状況
    image.png

  • ビジュアライゼーションからクラスタを選択するとログがクラスタリング(分類化)される。
    潜在的に問題のあるレコードやまれにしか発生しないレコードなど対象レコードの特定が簡単になる。
    image.png

Cloud Agentは定期的に更新分のログレコードをOMCに送信し、ログデータは常に最新に近しい状態になります。今回はLinuxの基本的なログを取り込む設定をしましたが、これ以外にもLog Analyticsには予め用意されたログ・パーサーが準備されています。

対応可能なログパーサーの一覧は以下のとおり
https://docs.oracle.com/cd/E83857_01/paas/management-cloud/logcs/box-log-sources.html

ここにない独自のログフォーマットの場合は、カスタムパーサーを自分で作成することで同様にログを取り込んで分析可能です。次は、手動でのログ取り込みの方法やカスタムパーサーについて紹介します。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[RHEL7/CentOS7] ログ監視ツール swatch を入れてメール通知してみた

インストール

EPELリポジトリ追加

# rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

swatch インストール

# yum install swatch --enablerepo=epel

設定ファイル

ログファイルに「action="auth-logon"」という文字列を検出したときに

  • 画面表示する
  • メール通知する
# vi swatch_fwlog.conf

watchfor /action=\"auth-logon\"/
    echo
    mail=fukuchan_senpai@sample.org,subject="[sslvpn] logon success"

手動起動

# /usr/bin/perl /bin/swatch -c /root/swatch_fwlog.conf -t /var/log/fwlog &

手動停止

# kill プロセス番号

Systemdへの登録

ユニットファイルの作成

# vi /lib/systemd/system/swatch_fwlog.service

[Unit]
Description=swatch for firewall log
After=syslog.target network.target postfix.service

[Service]
ExecStart=/usr/bin/swatch -c /root/swatch_fwlog.conf -t /var/log/fwlog --pid-file /var/run/swatch_fwlog.pid --daemon > /dev/null 2>&1
Type=forking
PIDFile=/var/run/swatch_fwlog.pid

[Install]
WantedBy=multi-user.target

反映

# systemctl daemon-reload

自動起動化

# systemctl enable swatch_fwlog

起動

# systemctl start swatch_fwlog

ステータス確認

# systemctl status swatch_fwlog

停止

# systemctl stop swatch_fwlog

考察

  • ログファイル毎に設定ファイルを作成し個別にswatchを実行する必要がある
  • メール通知の本文はログの該当行が挿入される
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

OMC Cloud Agentのインストール - Linux編 -

Oracle Management CloudのCloud Agentのインストール方法を紹介します。
Cloud Agentは、Oracle Management Cloudサービスに対してサーバーの情報を送信するソフトウェアです。ここでは、予め用意しておいたOracle CloudのAlways FreeのLinux VMインスタンスに対して、Cloud Agentをインストールしていく手順を説明します。
Oracle Cloudでなくても、AWSやAzureのVMインスタンス、On-Premiseの環境でもインターネットへアクセス可能であれば同様の手順でCloud Agentをインストール可能です。

OMCのアーキテクチャはここが参考になります。
https://docs.oracle.com/cd/E83857_01/paas/management-cloud/emaig/you-begin.html#GUID-5EC2A413-E393-42A9-9A86-7F2E9B2BDFD9

Always FreeのVMインスタンスを用意

  • VMインスタンスはインターネットへHTTPSアクセスができることが必須
  • アクセスはアウトバンドのみ(Cloud Agent --> OMC) インバウンドは発生しない

image.png

  • OMCのコンソールからエージェントをクリック
    image.png

  • 右上のアイコンのエージェントのダウンロードをクリック
    image.png

  • Cloud Agent Linux(64bit)をクリックしてダウンロードする。
    image.png
    ※赤枠のTENANT_NAMEとOMC_URLをメモしておく

  • 右上のアイコンの登録キーの管理をクリック
    image.png

  • 好きな名前を入力し、新規キーの作成をクリック
    image.png

  • 生成されたキーの値をメモしておく
    image.png

  • ダウンロードしたCloud AgentをVMインスタンスにコピーしてログイン

cloudagent用のディレクトリ作成
[opc@demovm1 ~]$ mkdir cloud_agent

コピーしたcloudagentを解凍
[opc@demovm1 ~]$ unzip cloudagent_linux.x64_1.46.0.zip -d cloudagent_linux
[opc@demovm1 ~]$ ls cloudagent_linux
agentcoreimage.zip  agentimage.properties  agent.rsp                 unzip
AgentDeployment.sh  AgentInstall.sh        agent_software_build.xml
[opc@demovm1 ~]$ cd cloudagent_linux/

agent.rspファイルの中にある4つのパラメータに先ほどメモした値を追記
[opc@demovm1 cloudagent_linux]$ vi agent.rsp
TENANT_NAME= 1282ec749826bb
AGENT_REGISTRATION_KEY= RRDpSff0o-S5sUDgnFgywG0XBt
AGENT_BASE_DIRECTORY= /home/opc/cloud_agent
OMC_URL= https://omc-1282ec749826bb.api.omc.ocp.oraclecloud.com/
※Proxy経由の場合は、OMC_PROXYHOST,OMC_PROXYPORTの値も追記

エージェントのインストールの実行
[opc@demovm1 cloudagent_linux]$ ./AgentInstall.sh
Unzipping agent software, this may take some time...
Installing Cloud Agent...
Cloud Agent parameter validation started...
Cloud Agent pre-requisite checks started...
Cloud Agent base directory creation started...
Security artifacts download started...
Cloud Agent setup started...
Registering Cloud Agent...
Starting Cloud Agent...
Cloud Agent started.
Cloud Agent installation completed.
Cloud Agent post installation checks started.
Cloud Agent is up and running.
Cloud Agent is communicating to Oracle Management Cloud.
Cloud Agent is monitored in Oracle Management Cloud.
Cloud Agent post installation checks completed.
To start Cloud Agent upon Operating System restart include '/home/opc/cloud_agent/agent_inst/bin/omcli start agent' in the start-up scripts.
For further details please refer http://www.oracle.com/pls/topic/lookup?ctx=en/cloud/paas/management-cloud&id=deploy_agent.
上記メッセージでインストール完了

Always FreeのVMインスタンスだとインストール時にMax Processのエラーが発生したので、20-nproc.confのファイルに以下を追記して編集し再ログイン&再実行
[opc@demovm1 cloudagent_linux]$ sudo vi /etc/security/limits.d/20-nproc.conf
opc       -    nproc     unlimited

  • エンティティ構成をクリック
    image.png

  • ライセンスをクリックし、ライセンスなしになっている1/1をクリック、ライセンス・エディションをStandardに選択する。これでCloud Agentが対象のVMインスタンスの監視を開始することになり、課金も開始されます。開始する場合は、右の保存ボタンをクリックします。
    image.png

  • モニタリングをクリック
    image.png

  • Hostをクリック
    image.png

  • エンティティに今登録したVMインスタンスが表示されていますのでクリックします
    image.png

  • 登録したVMインスタンスのモニタリング情報
    image.png

  • Cloud Agentの起動/停止コマンド

cd /home/opc/cloud_agent/agent_inst/bin
./omcli stop agent
./omcli start agent

以上の手順で、Cloud AgentのインストールとInfrastructure Monitoringの機能を使用することができるようになりました。Infrastructure Monitoringでは、オンプレミスやクラウド上のリソースを統合的に監視するフレームワークです。指定したメトリック値によるアラートや機械学習による異常値検知などの機能なども使うことができます。

また、LinuxやWindows, Middleware, Database, Network機器など様々なエンティティがサポートされています。
https://docs.oracle.com/cd/E83857_01/paas/management-cloud/monmr/list-supported-entities.html

この次は、Linux内のログを収集・分析するLog Analyticsの機能の設定をしていきます。
https://qiita.com/western24/items/715f221c4ebd5bebad12

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

パッケージ依存関係が修復できない時の対処法

まずは dpkg --audit で問題を確認する。
その後、それらのパッケージを強制的にアンインストールした後で再インストールする

sudo dpkg -P --force-depends パッケージ名
(ただ、パッケージや依存関係が壊れてたりすると、消えてくれないことがあるっぽい。

–force-remove-reinstreq オプションをつけると消えてくれた。)

と実行してアンインストールした後、

sudo apt-get install パッケージ名

で再インストール

sudo dpkg --audit

と実行して何も表示されなくなれば問題は解決のはずです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

viコマンド入門(覚書き)

はじめに

ターミナルなどで作業をすることが増えてきたため、個人的なメモとして(最小限の)操作用コマンドをまとめてみた。
調べてみると大量のコマンドがあるが、入門編としてこのあたりからマスターしていきたい。
※随時、追記修正する可能性あり。

viモードの終了・ファイルの保存

  • 「ZZ」「:wq」保存して終了
  • 「:q!」保存せずに終了
  • 「:q」終了

カーソルの移動

上下左右

  • 「k」上に移動(↑)
  • 「j」下に移動(↓)
  • 「h」左に移動(←)
  • 「l」右に移動(→)

単語

  • 「w」単語の先頭へ移動
  • 「b」前の単語の先頭へ移動

  • 「^」行頭へ移動
  • 「$」行末へ移動

段落

  • 「{」段落の先頭へ移動
  • 「}」段落の末尾へ移動

その他

  • 「gg」先頭行へ移動
  • 「G」最終行へ移動
  • 「:行番号」指定した行にカーソルが移動
  • 「Ctrl + F」下スクロール
  • 「Ctrl + B」上スクロール

検索

  • 「/文字列」+(n/N)文字列検索(次/前)

編集

コピー&ペースト

  • 「yy」「Y」行のコピー(Yank)
  • 「p」次の行にペースト(Put)

削除

  • 「x」一文字削除
  • 「dd」行の削除

その他

  • 「u」直前の操作を取り消し
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

LinuxでLiveUSBを作る手間を減らすために作成したシェルスクリプトを公開します

ソースコードは記事下段に記載していますのでファイルに保存してお使い下さい。

実行方法

下記コマンドを実行します。

   sudo sh "createLiveMedia.shのパス" "isoファイルのパス"

isoファイルとしていますが、ファイルであればそれ以外でも可能です。

操作方法

(1)下記のように接続しているデバイスの一覧が表示されるので、書き込むデバイスのインデックスを入力します(表示されるデバイスはお使いの環境で変わります)。

INDEX TRAN     SIZE MODEL            NAME
    1 sata   465.8G HGST HTS545050A7 /dev/sda
    2 sata   119.2G SSM128GPTC0-S91  /dev/sdb
    3 usb      2.7T HDCZ-UT          /dev/sdc
    4 usb     60.4G Multi-Card       /dev/sdd
    5 usb      3.8G Cruzer Colors+   /dev/sde
    6 sata    1024M DVD-RAM UJ8E2    /dev/sr0
書き込みを行うデバイスのインデックスを指定して下さい:

(2)下記のようにマウントしているパーティションの一覧と、アンマウントして良いかの確認メッセージが表示されます(マウントしているパーティションが存在しない場合はスキップされます)。

/dev/sde1
マウントされているパーティションが存在します。アンマウントしてよろしいですか?[y/n]:

(3)書き込んで良いか確認メッセージが表示されます。

指定されたデバイスのデータは全て削除されます。よろしいですか?[y/n]:

(4)書込みが完了すると「書き込みが完了しました。」と表示されます。

適用ライセンス

本シェルスクリプトは教科書ライセンス(独自ライセンス)で公開します。

本製品の利用をもって教科書ライセンス(詳細は下記条文を参照)を了承したものと見做します。

(利用条件)本製品を利用するにあたり従わなければならない条件はありません。
(免責1)本製品を利用した事で生じた如何なる損害に対して、本製品の権利者にその責は及ばないものとします。
(免責2)本製品がどのような場合でも使用できる事を保証しません。

(想定問答)
Q:どのような行為が「本製品を利用する」に該当するか。
A:本製品が関係する全ての行為が該当します。

ソースコード

createLiveMedia.sh
#!/bin/sh
#このシェルスクリプトは管理者権限が必要な操作(umountコマンド及びデバイスファイルへの書き込み)を含むため、実行時に管理者権限を要求する。
#umountコマンドは必須ではないが、アンマウントしない場合は処理完了後のLinuxの該当デバイスの認識がおかしくなる(存在しないパーティションをマウントしている扱いになる)。
#syncコマンドは必須ではないが、遅延書き込みが行われていた場合に書き込み途中にも関わらず完了したと表示する可能性がある。
#光学メディアへの書き込みも可能だが限定的(正常に書き込めるのはDVD+RW, DVD-RAM, BD-REの3種類のみ。但しいずれも未フォーマットの状態では書き込み不可)である。

println(){
    printf "%s" "$1"
    echo ""
}

throwException(){
    printf "%s" "$1"
    echo ""
    exit 1
}

[ "$(uname)" != "Linux" ] && throwException "このシェルスクリプトはLinuxでしか使えないコマンドを含むため、お使いのOSでは実行できません。"
[ -z "$(type lsblk 2> /dev/null)" ] && throwException "お使いの環境にはlsblkコマンドがインストールされていません。"
[ -z "$(type umount 2> /dev/null)" ] && throwException "お使いの環境にはumountコマンドがインストールされていません。"
[ -z "$(type sync 2> /dev/null)" ] && throwException "お使いの環境にはsyncコマンドがインストールされていません。"
[ $# -ne 1 ] && throwException "引数の数が不正です。引数の数は常に1でなければなりません。"

isoFile=$1
[ ! -e "${isoFile}" ] && throwException "指定されたファイルは見つかりませんでした。"
[ "$(id -u)" -ne 0 ] && throwException "このシェルスクリプトには管理者権限が必要な操作が含まれる為、一般ユーザーでは実行できません。"

view="$(lsblk -d -l -p -o TRAN,SIZE,MODEL,NAME)"
view="$(println "${view}" | nl -v 0 -w 5 -s " " | sed -e "1 s/^ *0/INDEX/")"
deviceList="$(println "${view}" | sed -e "1d" | sed -e "s/^.* \{1,\}//")"
[ -z "${deviceList}" ] && throwException "選択可能なデバイスがありませんでした。"

println "${view}"
printf "%s" "書き込みを行うデバイスのインデックスを指定して下さい:"
read -r index
index="$(println "${index}" | grep "^[1-9][0-9]*$")"
[ -z "${index}" ] && throwException "INDEX列に表示されている数字を入力して下さい。"
[ "${index}" -gt "$(println "${deviceList}" | wc -l)" ] && throwException "INDEX列に表示されている数字を入力して下さい。"

deviceFile="$(println "${deviceList}" | sed -n "${index}p")"
partitionList="$(lsblk "${deviceFile}" -l -n -p -o NAME)"
partitionCount="$(println "${partitionList}" | wc -l)"
while [ "${partitionCount}" -ge 1 ]; do
    partitionFile="$(println "${partitionList}" | sed -n "${partitionCount}p")"
    mountDir="$(lsblk "${partitionFile}" -d -l -n -o MOUNTPOINT 2> /dev/null)"
    if [ -z "${mountDir}" ]; then
        partitionList="$(println "${partitionList}" | sed -e "${partitionCount}d")"
    fi
    partitionCount="$((partitionCount - 1))"
done
if [ -n "${partitionList}" ]; then
    println "${partitionList}"
    printf "%s" "マウントされているパーティションが存在します。アンマウントしてよろしいですか?[y/n]:"
    read -r canUnmount
    canUnmount="$(println "${canUnmount}" | grep "^[Yy]$")"
    [ -z "${canUnmount}" ] && throwException "y以外が入力された為、処理を中止しました。"

    partitionCount="$(println "${partitionList}" | wc -l)"
    while [ "${partitionCount}" -ge 1 ]; do
        partitionFile="$(println "${partitionList}" | sed -n "${partitionCount}p")"
        [ -n "$(umount "${partitionFile}" 2>&1)" ] && throwException "アンマウント中にエラーが発生した為、処理を中止しました。"

        partitionCount="$((partitionCount - 1))"
    done
fi

printf "%s" "指定されたデバイスのデータは全て削除されます。よろしいですか?[y/n]:"
read -r canExecute
canExecute="$(println "${canExecute}" | grep "^[Yy]$")"
[ -z "${canExecute}" ] && throwException "y以外が入力された為、処理を中止しました。"

dd bs=64k if="${isoFile}" of="${deviceFile}" && sync && println "書き込みが完了しました。"

後記

  • コマンドのオプションや正規表現の書き方に違和感を覚えた方もいるかと思いますが、これは本シェルスクリプトを作成するにあたり可能な限りPOSIXに準拠したためです。具体的には以下の通りです。
    • 本シェルスクリプトで使われている構文はPOSIXに準拠しています。
    • 本シェルスクリプトで使われているコマンドおよびそのオプションについて、POSIXに規定されているコマンドについてはオプションも含めてPOSIXに準拠しています。
    • 本シェルスクリプトで使われている正規表現はPOSIXのBRE(Basic Regular Expression)に準拠しています。
  • 本記事および本シェルスクリプトへの指摘・疑問はいつでも歓迎します。ただし、必ず返信するとは限りません。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む