極北別世界通信
OpenLDAP構築
以前からやろうやろうと思ってはいたのですがなかなか手が出せなかったOpenLDAP構築にようやく手を出した。
きっかけは前回投稿しているOpenMeetings関連。
社内でテスト利用してもらおうにも、アカウント周りの作成とか管理が課題になる。
んではLDAPで管理すりゃええんちゃう?ということで構築開始。
また、今後もLDAPをサポートしているオープンソースの各種ソフトウェアの試験利用時にもアカウントを使いまわせて試す側も楽になるであろうという考えもあってのことではある。
過去に構築そのものはしたことがあるが、その際には有識者とセットで仕事でやったものなんで、極論を言えばコピペが正しく出来ましたか?レベルだったので、今回はちゃんと自分のとこの環境として考えて構築する。
■目的
OpenLDAP サーバの構築
OpenLDAPクライアントの動作確認
ユーザー情報の登録(100名前後)の効率のよい方法の検討
Apache OpenMeetingsや、その他のWeb系のサービスとのLDAP連携の実施
■インストール編
長くなりそうなので複数回にします。今回はインストール編です。
Qiitaのこのあたりの記事丸パクリですが(ありがとうございます)、今回は最終的にいろんなところの記事やら
ブログやらをパクりつつ、全体通して構築していきます。
枯れたソフトウェアということなのか、大抵のディストリビューションでパッケージとして用意されています。
CentOS環境なのでyumで何も考えずにインストールします。
yum install openldap openldap-servers openldap-clients
DB設定用のファイルを用意してアクセス権を変更します。
cp -p /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap. /var/lib/ldap/DB_CONFIG
自動起動設定をします。
systemctl start slapd
systemctl enable slapd
下記は当方の環境では不要なのですが、Linuxでのファイルディスクリプタ上限が1024なので、これを増やしておくほうが無難です。
grep "Max open files" /proc/`pidof slapd`/limits
Max open files 1024 4096 files
LDAPはセッション数が多く、やり取りで入出力を管理するファイルディスクリプタ数が足りなくなることがあるようですので、環境によっては変更しておいたほうがいいかもしれません。
※実環境での検証まではしていません。
vi /usr/lib/systemd/system/slapd.service
[Service] の一番下に追記
---
LimitNOFILE=65536
LimitNPROC=65536
---
再起動を行い、ファイルディスクリプタ上限が変わっていることを確認
systemctl daemon-reload
systemctl restart slapd
grep "Max open files" /proc/`pidof slapd`/limits
Max open files 65536 65536 files
また、OpenLdapはデフォルトではログの出力設定がされていません。
試験時はjournalctlコマンドで参照すれば事足りますが、実運用時にトラブルがあった場合など、
ログが残っていないと困ると思いますので、一応ログの設定をしておきます。
併せてログローテーション設定もします。
ログの出力設定
vi /etc/rsyslog.conf
※追記
local4.* /var/log/ldap/slapd.log
ログのローテーション設定
vi /etc/logrotate.d/syslog
※追記
/var/log/ldap/slapd.log
いちおう「インストール」的な作業はここまで。
次から管理者設定など「構築」編に行こうかと思います。
(書くのいつになるかな。。。。)
Apache OpenMeetings
世の中リモートワークばやりでございますが、捻くれ天邪鬼な性格の自分としてはすぐ「zoom使いたくねぇ」とか始まってしまうんですね。
いやまぁなんだかんだ言って仕事なら使うんですがね。
で、オープンソースのWeb会議ツールは敷居が高くてちょっと敬遠してたんですが、まぁせっかくだし流行りに乗って構築してみようかなと。
ただ、当方の場合最終的に「自宅で作ってDDNSでアドレス取ってNginxのリバースプロキシで振り分ける」という単なる構築以上に面倒くさい構成が待っているのでそこはちょっと辛いとこなんですが。
ちなみにNginxはまだ全然ド素人なので、いっかいちゃんと勉強しないといけませんな。
閑話休題
とりあえず単純に構築するなら、だいたいはオフィシャルサイトの手順に沿ってコマンドをつらつら入れていけば難しいことはありません。
ただ個々のコマンド、項目で何をやってるのかある程度理解してないとどうしようもないですが。
まず今回の前提条件について記載します。
実運用上の最適スペックは確認してないのでそこはまた別途。
・環境
Windows上のvirtualbox仮想マシン
ディスク:100GB
メモリ:8GB
CPU:2
あとネットワークはブリッジ接続にしています。
・OS
今回はUbuntu18.04.4Serverにて構築しています。
・インストール
基本的には オフィシャルサイト の構築手順と、ググって見つけた こちらの「ろっひー ~ ITが気になる毎日」 さんのブログ記事「Ubuntu18.04 まっさらな環境にOpenMeetings5.0.0-M4をインストール」をほぼ丸パクリする勢いです。
大変お世話になりました。
・OSを最新化
$ sudo apt update; sudo apt -y dist-upgrade; sudo apt -y autoremove
$ sudo reboot
・各種ライブラリインストール
■OpenJavaのインストール
$ sudo apt install openjdk-11-jdk openjdk-11-jdk-headless
$ java -version
openjdk version "11.0.7" 2020-04-14
OpenJDK Runtime Environment (build 11.0.7+10-post-Ubuntu-2ubuntu218.04)
OpenJDK 64-Bit Server VM (build 11.0.7+10-post-Ubuntu-2ubuntu218.04, mixed mode, sharing)
■LibreOfficeのインストール
アップロード資料をPDFに変換するためのライブラリ
$ sudo apt install libreoffice
■ImageMagic,sox,ffmpegと関連ライブラリのインストール
イメージや動画の変換用のライブラリ
$ sudo apt install -y imagemagick libjpeg62 zlib1g-dev sox ffmpeg vlc
ImageMagickの設定ファイルを書き換える。
過去のGhostScriptバグの対策で変換ができなくしてあるので、その設定をコメントアウトして外しています。
参考
$ sudo vi etc/ImageMagick-6/policy.xml
上記ファイルの下のほう、★を付けた2行をコメントアウト
<!-- disable ghostscript format types -->
★ <!-- <policy domain="coder" rights="none" pattern="PS" /> -->
<policy domain="coder" rights="none" pattern="PS2" />
<policy domain="coder" rights="none" pattern="PS3" />
<policy domain="coder" rights="none" pattern="EPS" />
★ <!-- <policy domain="coder" rights="none" pattern="PDF" /> -->
<policy domain="coder" rights="none" pattern="XPS" />
</policymap>
■データベースのインストール
ここではMariaDBを使っているが他のDBでも構築は可能なようです。
$ sudo apt install mariadb-server
$ sudo mysqlMariaDB [(none)]> create database openmeetings default character set 'utf8';
MariaDB [(none)]> grant all privileges on openmeetings.* to 'openmeetings'@'localhost' identified by 'om_password' with grant option;
MariaDB [(none)]> quit
データベース openmeetings
ユーザー openmeetings
パスワード om_password
。。。すみません、丸パクリです。
■Kurento Media Serverのインストールと設定
基本的にはここを参考に。今最新Versionは6.13.2みたいですが、OpenMeetingsのオフィシャルと揃えています。
カメラ、マイク、録画、画面共有に必要なライブラリ。リポジトリのキーをインストールする
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 5AFA7A83
リポジトリのソースファイルを新規作成。
sudo vi /etc/apt/sources.list.d/kurento-dev.list
中身は以下
deb [arch=amd64] http://ubuntu.openvidu.io/6.13.0 bionic kms6
deb [arch=amd64] http://mirror.yandex.ru/ubuntu/ bionic main restricted
deb [arch=amd64] http://mirror.yandex.ru/ubuntu/ bionic universe
Kurento Media Serverのインストール
$ sudo apt update
$ sudo apt install -y kurento-media-server
設定ファイルを変更。
sudo vi /etc/default/kurento-media-server
上記ファイル内の
DAEMON_USER="kurento" # User as whom Kurento Media Server will run
の行をコメントアウトし
DAEMON_USER="nobody"
を追加してサーバを走らせるユーザーを変更
サービスの登録と開始
$ sudo systemctl start kurento-media-server
$ sudo /lib/systemd/systemd-sysv-install enable kurento-media-server
■OpenMeetingsのインストール
ようやく本体のおでまし。
まずはダウンロード
$ wget https://downloads.apache.org/openmeetings/5.0.0-M4/bin/apache-openmeetings-5.0.0-M4.tar.gz
展開して配置 場所はこれまた丸パクで /usr/share/openmeetings としてます。
$ tar xzvf apache-openmeetings-5.0.0-M4.tar.gz
$ mv apache-openmeetings-5.0.0-M4 openmeetings
$ mkdir -p openmeetings/webapps/openmeetings/data/streams/{1,2,3,4,5,6,7,8,9,10,11,12,13,14}
$ mkdir -p openmeetings/webapps/openmeetings/data/streams/hibernate
$ sudo chmod -R 750 openmeetings/webapps/openmeetings/data/streams
$ sudo chown -R nobody:root openmeetings/
$ sudo mv openmeetings/ /usr/share/
mysql-connectorをダウンロードして配置
$ wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.20.tar.gz
$ sudo chown nobody:root mysql-connector-java-8.0.20/mysql-connector-java-8.0.20.jar
$ sudo mv mysql-connector-java-8.0.20/mysql-connector-java-8.0.20.jar /usr/share/openmeetings/webapps/openmeetings/WEB-INF/lib/
※バージョンが変わると適宜修正が必要になるのでご注意を。
■OpenMeetingsの自動起動スクリプトを作成
上手くいっているものをパクれの精神で、これまた丸パクリです。
OpenMeetingsのオフィシャルにも「tomcat3」という起動スクリプトがあるので、環境に合うように書き換えて使います。
sudo vi /etc/init.d/openmeetings
#!/bin/sh
### BEGIN INIT INFO
# Provides: Openmeetings
# Required-Start: mysql apache2 kurento-media-server
# Required-Stop:
# Should-Start:
# Should-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Apache Openmeetings Service
# Description: Openmeetings provides video conferencing, instant messaging,
# white board, collaborative document editing and other groupware
# tools using API functions of the Red5 Streaming Server for
# Remoting and Streaming.
### END INIT INFO# set the environment
# JAVA_OPTS=""
# CATALINA_OPTS=""
CATALINA_HOME=/usr/share/openmeetings
RUN_USER=nobody# set TIME OUT values
# TIMELIMIT=10
# SLEEPTIME=40# Function to wait until all Tomcat processes are killed
waitForTomcatToDie()
{
PROCESSES=`ps auxwww | grep $HOME | grep 'java' | grep 'tomcat' | grep -v 'grep'`
while [ ! -z "$PROCESSES" ] && [ $SECONDS -lt $TIMELIMIT ] && [ $TIMELIMIT -ne 0 ]; do
echo -n "."
sleep $SLEEPTIME
PROCESSES=`ps auxwww | grep $USER | grep 'java' | grep 'tomcat' | grep -v 'grep'`
done
echo ""
if [ ! -z "$PROCESSES" ]; then
PROCESS_ID=`echo $PROCESSES | awk '{ print $2 }'`
echo "Killing process: $PROCESS_ID"
kill -9 $PROCESS_ID
fi
}# See how we were called.
case "$1" in
start)
$CATALINA_HOME/bin/startup.sh -u $RUN_USER -Dcatalina.base$CATALINA_BASE
;;
# debug)
# DEBUG_PORT=10001
## export JAVA_OPTS="${JAVA_OPTS} -Xdebug -Xrunjdwp:transport=dt_socket,address{DEBUG_PORT},server=y,suspend=n"
# $CATALINA_HOME/bin/startup.sh -Dcatalina.base{CATALINA_BASE}
# ;;
stop)
# $CATALINA_HOME/bin/shutdown.sh
$CATALINA_HOME/bin/shutdown.sh
waitForTomcatToDie
echo "...Tomcat stopped."
;;
restart)
$0 stop
echo "...Restarting..."
sleep 8
$0 start
;;
status)
status $PROG -p $PIDFILE
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|stop|restart|status}"
RETVAL=1
esacexit $RETVAL
作成したファイルを有効化
$ sudo chmod 755 /etc/init.d/openmeetings
$ sudo systemctl daemon-reload
$ sudo /lib/systemd/systemd-sysv-install enable openmeetings
$ sudo systemctl start openmeetings
■OpenMeetingsのWeb UIによる初期設定
以降、WebUIでの設定となります。
http://【インストールホスト】:5080
■アクセスすると次の画面が表示されるので[NEXT >]を押下。
データベースユーザーとパスワードを入力し、[接続試験]をクリック。問題なければ[NEXT >]を押下。
■最初のユーザーの生成。管理者アカウントですがうっかり会社のアドレス情報いれてしまったので見た目汚くて申し訳ない
けっこう制約があるようです。
(パスワードには大文字、小文字、数字、記号(!@#$%^&*][)を含める必要あり、名前と一緒だとNG等)
設定が済んだら[NEXT >]を押下
■自己登録の拒否を設定して、管理者のみがユーザー追加をできるように設定。
メール送信用のサーバも会社のサーバ名とか入れてるのでこれまた汚くて申し訳ないです。
設定したら[NEXT >]を押下
■ライブラリが使えるかどうかの確認。
[接続試験]のボタンを全部クリックしてOKであることを確認したら、[NEXT >]を押下
■このページはこのままで[NEXT >]を押下
■[FINISH]を押下してインストール。なおインストールボタンというものはない
■インストール処理が完了したら以下の画面になる。なお、「再起動」はしないでも一応ログイン後の画面には遷移した。
SSL設定は別途するので、この時点では
http://【インストールホスト】:5080
に再接続する。
ログイン後の画面イメージ
・Nginxでのリバースプロキシ
この状態だと、ローカルPCからのアクセスしかできず、またSSL設定も行っていない状態です。
当方が試験用に自宅で構築しているものは、どれもNginxでのリバースプロキシを用いて、DDNSでIPアドレスを割り当てた各種サブドメインごとに異なる仮想マシンに転送する構成になっています。
また、その際にNginxでLet's EncryptのSSL通信を終端しています。
このOpenmeetingsも、リバースプロキシで外部から使おうとしたんですがまぁなかなかにハマりました。
そのへんも書いていこうと思います。
■構成
基本的に当方が自宅で外部向け公開(といっても、試験用のものが多いので頻繁に変わったりしてますが)は、以下のように構成している。
インターネット -> ルータ(80/443 ポート開放済み) -> Nginx(リバースプロキシ) -> 各種サーバ
Let's Encryptの証明書発行のためのアクセスも受け付ける必要があるので80番ポートも開けているが、基本的なアクセスはすべてSSLで行っている。
常時5.6個ほどのドメインに対してDDNSで(同一)IPを割り当てて、URLアクセスをNginx でリバースプロキシしている。
これまでもShirasagi、Odoo、NextCloud、など毎回厄介そうなものをリバースプロキシで試験含め運用してきたが、今回はさらにハマった。
それでもググることで2、3日で答えが見つかるんだからネットはすごいなー(小並感)
簡単に言うと、以下設定をせずにリバースプロキシ経由でアクセスした場合、リクエスト元がhttpsなのに、NginxとTomcat間の接続はhttpなので、TomcatのCSRF対策によりBad Requestとして処理されてしまう、という問題が発生します。
海外のフォーラムなどでもこの問題にハマっている方は多いようでしたが、Openmeetings関係のところでは以下の設定は貼られてませんでした。
ただ、stackoverflowのこのページが引っ掛かりまして、結局Tomcat側の設定を変更しないとダメだというのが判明しました。難しいもんですね。
インターネット ->https-> Nginx ->http-> Openmeetings
となっているので、Openmeetings側で上記を検出し、リダイレクトの際にhttp通信であることからCSRFとしてはじかれる。
インターネット ->★https-> Nginx ->http-> Openmeetings
★の部分がhttpsであることをNginxからOpenmeetingsに通知するが、さらにそれを処理するための設定をTomcat側にも実施することで、プロキシ経由の通信であることが正常に処理され、問題なく通信ができるようになる。
■Nginx側の設定
本設定をnginxのconf.dディレクトリ配下に置いてnginx.confにIncludeさせてます。なのでhttpセクションは未記載。
ホスト名とIPアドレスは書き換えてます。
map $http_upgrade $connection_upgrade { ★1
default upgrade;
'' close;
}server {
server_name openmeetings.mydomain.com;
listen 443 ssl;
listen [::]:443 ssl;ssl_certificate /etc/letsencrypt/live/openmeetings.mydomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/openmeetings.mydomain.com/privkey.pem;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;access_log /var/log/nginx/openmeetings.access.log;
location / {
proxy_pass http://xxx.xxx.x.xxx:5080;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto https; ★2
proxy_http_version 1.1; ★2
proxy_set_header Upgrade $http_upgrade; ★2
proxy_set_header Connection $connection_upgrade; ★2
}
}
★1
mapディレクティブを使って、$http_upgrade、$connection_upgradeを定義します。
$http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
$http_upgradeの値が空('')の場合は、
$connection_upgrade = close
それ以外の場合は、
$connection_upgrade = upgrade
という処理になります。
SSL処理の部分は通常のものと変わらないので割愛させてください。
★2
proxy_set_headerで以下の値を指定します。
他のProxyヘッダももちろん必要ですが、以下は今回のOpenmeetingsのリバースプロキシ化に必要なので特記します。
proxy_set_header X-Forwarded-Proto https;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header X-Forwarded-Proto
を用いて、前段の通信がhttps通信であることを伝えます。
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
http1.1であることを明示的に宣言し、NginxのWebSocketプロキシ機能を有効にして、Upgradeヘッダとコネクションヘッダをプロキシからバックエンドに伝えます。
ただし、Openmeetingsの場合、Nginx側の設定だけではダメで、Tomcat(Openmeetings)側のSever.xmlファイルも変更する必要があります。
server.xmlの
<Host name="localhost" appBase="webapps"
unpackWARs="false" autoDeploy="true">
の後ろに以下を追記します。
<Valve className="org.apache.catalina.valves.RemoteIpValve"
remoteIpHeader="x-forwarded-for"
remoteIpProxiesHeader="x-forwarded-by"
protocolHeader="x-forwarded-proto"
/>
org.apache.catalina.valves.RemoteIpValve
というClassはProxy経由でのアクセスの際にリモートの情報を取得するためのものになります。
なお、上記は
remoteIpHeader="x-forwarded-for"
remoteIpProxiesHeader="x-forwarded-by"
を含めていますが、おそらく今回の設定の場合は
protocolHeader="x-forwarded-proto"
だけ設定されていれば問題ないはずです。
NginxとServer.xmlを変更し、両方とも再起動をかけて(サービス再起動でもいいとは思います)
上記設定ファイル上での「https://openmeetings.mydomain.com」
にアクセスすれば、Nginxでのリバースプロキシを介したOpenmeetingsへの接続ができているはずです。
直接的には
被害があるわけではないけど、やはり間接的には影響がありますなあ
新コロ関連でバタバタしてあっという間にいろいろやる時間がごっそり無くなっていました。
コミケも中止になってその後のことはまだまだ予断を許しませんし、どうなることやらですね。
また気を取り直していろいろやっていきたいです。
Shirasagiの扱いが難しい
まぁRubyやらRailsやらからっきしなのでアレですが。
今回のはRuby関係ないですが。
Shirasagiの常時SSL化をNginxのリバースプロキシ下でやろうとしてハマった話。
インターネット(SSL)⇒Nginx ⇒(ここから先http)(別Serverの)Nginx ⇒ Shirasagi(Unicorn?)
という構成で、公開サイトをsslで表示するのはすぐにできたんですが、管理画面ログインがうまくいかなくて困った。
フロント側のNginxのプロキシ(ヘッダー)設定を
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-Forwarded-Proto https;
バックエンド側のNginxはShirasagiインストール時に生成されてるんだけど、
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
を
proxy_set_header X-Forwarded-For "$http_x_forwarded_for, $realip_remote_addr";
に書き換えてみた。
ようはフロントで
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-Forwarded-Proto https;
して、バックエンドで
proxy_set_header X-Forwarded-Proto $scheme;
することでうまくいくらしい。
なおバックエンド側に追記したのは
フロント側で
proxy_set_header X-Forwarded-For $remote_addr;
しておいてバックエンド側で書き換えた
proxy_set_header X-Forwarded-For "$http_x_forwarded_for, $realip_remote_addr";
でアクセス元のIPを取ろうという記述、、、のはず。
Nginx触り始めて1週間でググりまくった結果なのでまたこつこつ調べないといけませんね。
F-Revo CRM patch適用とPHP7.2化
雑ですが忘れないようメモ
・F-Revo CRMをインストール
無印?版はphp5.6でしか動かないのでオフィシャルなどにある手順通りインストール
https://f-revocrm.jp/2018/08/8273
パッチ3の適用まで書いてありますが、さらに今はパッチ4、5、6、6_1までリリースされていますので、すべて適用します。
基本的にアーカイブを展開してディレクトリごと上書きするだけです。
また、前の記事で書いた includes/main/WebUI.php
がパッチ6で上書きされるので、修正しなおしを忘れないようにしましょう。
パッチ6がphp7対応バージョンとのことなので、合わせてphpを7.2に更新します。
一応apacheとか止めておいたほうが無難なのかな?当方は仮想マシンで丸ごとバックアップしていたのであんまり考えずに実行してしまいましたが。
yum install --disablerepo=base --enablerepo=epel,remi,remi-safe,remi-php72 php php-gd php-mysqlnd php-imap php-mbstring php-devel php-mcrypt php-xml php-opcache
用心でphp.iniとかもバックアップしてましたが、特に何も変更せずとも大丈夫でした。
これでphp7.2環境になりました。
時間が取れそうならもう少し丁寧に書きます。。。
F-revo CRM リバースプロキシ関連のTips
F-revo CRMをNginxのリバースプロキシの背後に置くとRefererを見られてうまく動いてくれない。
本来ならgetコマンドでRefererを取って反映、とかやるのが正しいのだろうけど、とりいそぎコード変更してみた。
どうなんだろ、一応開発元に質問したりしてみてもいいもんなんだろうか。
なお前提としてNginxでのリバースプロキシは構築済みで、nginx側でのSSL化も済んでる前提です。
■事前:
crm/config.inc.phpの「$site_URL」を以下のように設定
$site_URL = 'http://【サーバのIPアドレス】/crm/';
■以下のように変更
# vi crm/config.inc.php
$site_URL = 'https://【SSL証明書を取得したドメイン名】/crm/';
# vi crm/includes/main/WebUI.php
// if ($site_URL && stripos($request_URL, $site_URL) !== 0){
// header("Location: $site_URL",TRUE,301);
// exit;
// }
ただ、これRequest URLとSite URLが正しくないと接続を許可しないってセキュリティ面を担保する設定のような気がするので、そもそもOFFにするのがいいのかといわれるとちょっと。。という感じ。
一応ログ等見ながら様子見。
。。。あれ、パッチどこまで適用してたっけ。。ちょっと確認しないと。
Nginx リバースプロキシ&SSL設定のTIPS
基本的なインストールやら導入は(暇があったら書きますが)、とりあえずたくさん記事があるので放置して、ハマリかけたとこだけ
SSL設定で
dhparam.pem
がないと怒られる。
# nginx -t
nginx: [emerg] BIO_new_file("/etc/ssl/certs/dhparam.pem") failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/etc/ssl/certs/dhparam.pem','r') error:2006D080:BIO routines:BIO_new_file:no such file)
まぁネット上のConfigパクってて設定もしてないほうが悪いんですが、Nginxは今のVersionだとdhparam.pemがないといけないらしいので注意。
んで
# openssl dhparam 2048 -out /etc/ssl/certs/dhparam.pem
Generating DH parameters, 2048 bit long safe prime, generator 2
完了まで時間がかかる。
そのあと
# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
正常にとりあえずはなったのでメモ
NextCloudとリバースプロキシ
他に書く場所も確保していないのと、せっかくの構築関連のTIPS的なやつなのでここにメモがてら。
自宅で古めのサーバにNextCloudを構築して使っているが、自宅にいくつもサーバを立てていると、外部から接続させるときのポートフォワーディング設定などが煩わしい
うっかり開けた穴を閉じ忘れてるなどもあるかもしれないので、思い切ってやり方を変えることにした。
基本的に自宅で構築するものはWeb系のものが多い。なのでいっそ全部リバースプロキシで受けて増やしたり減らしたりする際にはリバースプロキシ側で制御すればいいんじゃん?と考えたわけである。
。。。が、本編のリバースプロキシ構築に入る前に、NextCloudを現在Let's Encryptを使ってhttpsで外部からつながるように設定しているのだが、ローカル側は常にhttpで構築するように変更しようと考えたところなぜかNextCloudにhttp経由の場合ログインができない状態に陥った。
色々調べてみると、どうもphpのセッションが格納されるディレクトリの権限の問題と判明。
当方の場合CentOSでインストールしているのだが、/var/lib/php の権限の問題で、/var/lib/php/session配下に生成されるセッション管理ファイルがうまく読み書きできない状態になる模様。
なので
chown -R apache:apache /var/lib/php
として、権限を変更し、無事httpでも正常にログインできるようになった。
このメモだけだとわかる人にしかわからないが、NextCloudをVersionUpしたり、CentOSでPHP 7.xをremiリポジトリからインストールしてると発生するケースがあるようなのでメモ。
サイト内コンテンツ
現在はローカルでの作業が主体ですが一応コンテンツをもう少し拡充させようと地味に努力中。
とりあえずはマイナーOSデータベースの再整理を進めてます。昔ダウンロードしたものが現状、サイトごと消えてたりするかと思えば、一応ソースコードだけはまだsourceforgeに残ってたりと様々です。
また、勢いでドカドカダウンロードしてたものが単なるLinuxのディストリビューションだったりすることもしばしば(そしてとっくの昔にプロジェクト自体は崩壊済みなのもしばしば)。
Linuxのディストリビューションは、DistroWatchなどの大手サイトもありますのでそれほど深堀りする気はありませんが一応、明確に区分はしておかないとと思って整理中です。
ただデータベースの項目名をどうするかは悩ましいところ。あんまり凝りすぎないほうがいいのかもしれませんが、情報量が少なすぎるのもと思ったり、そう思えばそもそも情報が全然なかったりと悩ましいです。
冬コミ終了
今回は惨敗中の惨敗です。
まぁ前々回あたりからろくな宣伝活動もできていないのは確かなので、もう少し活動をしていきたいと思います。
始めにfnowのサイト内のコンテンツをもう少し充実していかないと。。。
冬コミ
一応冬コミ出展予定ですが原稿がままならない状況。。
何かしらは出さないと次回が危うくなるので頑張りますが。
12/31 火曜日 南地区 リー20a「Fnow」になります。
グダりすぎているので
他のコンテンツは気が向くまで動かさずになるべくこのどうでもいい日記だけでもつけておくことにしよう。
なのでなんだかわからないメモが多くなるかもしれないけれどメモっておく癖付けないとなんとも。
・NextCloud
自宅用クラウドストレージとして構築完了。問題ないが速度面がやっぱりもっさりするね
・JPiere
どうやって使っていいのかさっぱりだ。時間かけて確認しないと。
自分が使うというわけではないがおおざっぱな枠組みでも理解しておきたい
・F-revo CRM
こちらも同上。まぁやはり「これどうやろ?」で入れてみただけなので時間かけてもいいので見てみる
・MOSP
フツーに使う分には十分なんだけど個人的には欲しい項目が足りないような。
3種に分かれてるけど見た感じは結局どれがメインなのかしら。人事は一番放置されてるように見える
・Shirasagi
これやJoruriあたりのRonRのGWをしっかり使いたいがうーん悩ましい。
・dnsmasq
ようやくローカルで使った。いいねこれ
・Lets's Encrypt
自宅サーバのhttps証明書は基本的にはこれ一択なはず
自動更新のしくみやらも難しくないし素晴らしいですね。いっそ全部自宅に引きこもってやろうかと思わなくもない
・DBまわり
超初歩の初歩はともかく原則コピペで済ませすぎてるんでSQL多少なり復習しようかとも思うんだけど。
SQLってほとんどやりたいことが自明なことが多いから日常的に業務で触るんでもない限り目的を
はっきりさせてググれば大体は答えがわかっちゃうのでいまのところは進んで復習してないないあ。
・LOOL
だっけ?OpenOfficeというかLibre Officeのサーバ版みたいの。もう少し詳しく調べてから
・「オープンソース、基本無料、ダウンロードもメアド登録しろや」みたいなやつ
いやオープンソースのプロダクトも商売やってたり開発者に還元されないと縮小しちゃうしいいんだけどなんか
オープンソースなのにそのフリーのコードなりをダウンロードする手段がすぐに見えるとこに無いのに
「オープンソースオープンソース」って呪文みたいに書いてあるうえにダウンロードするのにメアドやら連絡先
やら登録しなきゃいけないタイプのアレはなんかもにょる。
いやもちろんそれぞれの言い分もわかるしダメだとか言わないけどなんかもにょる。ほんとに。
冬向けの覚書
文章はWikipediaあるいはネット上記事のコピペ
あとで整理する
■マイナーOS(新規)
・afros
⇒AFROS – Atari FReeオペレーティングシステム
プレインストールされたTOS互換のEmuTOS / FreeMiNT / fVDI / XaAESベースのオペレーティングシステムを作成するファイルセット
・GENODE/Sculpt
Genode は、フリーでオープンソースなオペレーティングシステムフレームワークであり、マイクロカーネル抽象化レイヤー とユーザースペースコンポーネントのコレクションで構成されている。 Genodeは、例えばUnixのようなプロプライエタリーなオペレーティングシステムから派生したのではない数少ないオペレーティングシステムの一つとして知られている。 特徴的な設計思想として、小さなTrusted computing base(英語版)(TCB)により、セキュリティーを指向したオペレーティングシステムであることを目指している。
・Sculpt
Genodeプロジェクトは、現代的な消費者向けノートPC [23] をターゲットとした「Sculpt」と呼ばれるデスクトップオペレーティングシステムをリリースしている。 Sculptは、自動的にデバイスの検出と設定をし、GUIのコントロールインターフェイスを持ち、Genodeパッケージングマネージャーへのフロントエンドを持つ小さなベースシステムである。 Sculptは完全なデスクトップ環境ではなく、ユーザーが完全なデスクトップ環境を利用するには、伝統的なOSを仮想マシンとして展開する必要がある。 Sculptは、Genodeオペレーティングシステムフレームワークとは特定のシステムのために静的に構成するのではなく、 特権制御コンポーネントを使って動的に構成を変更することに大きく依存している点が異なる。
Genodeは、デスクトップ [7] [8] やタブレット [9] のOSとして使われるか、ゲストオペレーティングシステムのための仮想マシンモニターとして使われる。 Genodeは、x86[10] とARM[11] の両方で、安全な仮想化システムの信頼されたコンポーネントとして使われている。
・TempleOS
TempleOSとはx86-64 Ring-0上で動作するOSだ。プロセス分離はなく、メモリ保護もなく、そもそも仮想メモリではなく物理メモリアドレスを直接使うOSだ。コンセプトは古き良きCommodore 64の現代版だ。あの頃のPCはメモリアドレスは直接メモリアドレスであって、仮想メモリによってどこか不定の物理メモリアドレスにマッピングされたりなどしなかった。
TempleOSはキリスト教の影響を受けておりキリスト教の聖書やキリスト教に由来するゲームが多数入っている。
TempleOSはHolyCで書かれている。HolyCはC言語に似た文法を持っている。TempleOSのシェルはHolyCのJITコンパイラーになっていて、シェルに書き込むと、HolyCがJITコンパイルされ実行されるようになっている。
・HelenOS
HelenOSは、ゼロから設計および実装されたポータブルなマイクロカーネルベースのマルチサーバーオペレーティングシステムです。ファイルシステム、ネットワーク、デバイスドライバー、グラフィカルユーザーインターフェイスなどの主要なオペレーティングシステムの機能を、メッセージパッシングを介して相互作用するきめ細かいユーザー空間コンポーネントのコレクションに分解します。1つのコンポーネントの障害またはクラッシュが他のコンポーネントに直接害を与えることはありません。そのため、HelenOSは柔軟で、モジュール式で、拡張性があり、耐障害性があり、理解しやすいです。
HelenOSは、C11およびC ++ 14標準との互換性を目指していますが、既存のオペレーティングシステムのクローンを目指しておらず、従来のAPIとの互換性を犠牲にして、よりクリーンな設計を実現しています。HelenOSのほとんどのコンポーネントは、HelenOS専用に注文されているため、その基本部分は、アダプテーションレイヤー、グルーコード、フランケンコンポーネント、およびそれらに伴うメンテナンスの負担から解放されます。
HelenOSは、組み込みARMデバイスやシングルボードコンピューターからマルチコア32ビットおよび64ビットデスクトップPC、64ビットItaniumおよびSPARCラックマウントサーバーに至るまで、8種類のプロセッサアーキテクチャとマシンで実行されます。
HelenOSは、オープンソースのフリーソフトウェアです。そのソースコードはBSDライセンスの下で利用可能です。一部のサードパーティコンポーネントはGPLの下でライセンスされています。
■検討候補
AUX 3.x
BeOS Professional
OpenSTEP
OpenVMS
RiscOS
Xenix
過去実施したが最新版を入手したもの
kolibrios
MenuetOS
Minix3
Redox
Visopsys
など
・マイナーOSのインストール、試用、紹介動画
Haiku
ReactOS
MorphOS
Redox
HelenOS
QNX
AROS
夏季休暇的な
さて、まずは多少なり各種チャネルを利用して、コンテンツを絞ってこつこつやっていこうかなと思っています。まぁ元々いろんなことやりすぎというのはありますが。
一応、冬コミに申込しましたが、ある程度コンテンツをきちんと作っていきたいと思っています。
ニーズはどうかわかりませんが、マイナーOSのインストールを動画化してみるとかといった、異なったアプローチなどは考えてみたいと思っています。
とはいえまずはマイナーOSのインストールと試用そのものの記録と記事化をしっかりしないと意味ないんで頑張っていきます。
というわけで明日です
チャネルはあるわりにあまり多方面に宣伝やら展開やらができていないのは心残りですが、とりあえず明日、コミケ当日でございます。
今回は結局、Haiku、ReactOS、Morphosの3つです。
Morphosについては一応まともに書くのは初めてではないかと。
今後はインストールや試用部分はもちろんなのですが、もう少しインターネット関連のチャネルをちゃんと使って情報展開はしていかないといけないなぁと少し思わなくもない感じです。
いそがしすぎる
まあ一応原稿は書いているんですが、ブログを書くような余裕すらない。。。
元々あんまり懸命に書くほうではないのですが。
現状、Haiku、ReactOSを初心に帰って?インストール、試用してます。
Morphosもいじっていますが、やはり日本語実装的な部分が十分でないOSはサーバー用途で使うのでもない限り頭打ちになりますね。
コミケ向けのネタ出し
夏コミのスペースもとれましたし、どういう方向性にするのか改めて考える。
一応サークルカットは書いてるわけで、冬時点での方針は考えてましたが実際どうするか
Mauticに関する原稿を仕上げられるのが一番なんですが、時間的な制約もありどうしたものか検討中。
NFC、Pasoriを使っての簡易オリジナル入館証、勤怠管理作成モデルとか、子供向けプログラミングのスクラッチで大人がプログラミングしてみた、とか、やれること、やりたいことは一通りあるのですが。
とりあえずは最低限、サークルカットで書いたものについては原稿化しないとなぁ。
ただすでに7月、印刷はさすがにきびしいかな。。。
基本的には原稿を先行して進めてから印刷所を最終週あたりから間に合うとこ探しつつ、になりそう
夏コミ
一応スペースは取れました。
2019/8/12(月曜) 南地区 リ-18a 「Fnow」
です。
何系の本にしようか今から悩み中。やはりマイナーOS系かその他技術系か。
技術系といっても当方の場合必要に迫られるか、単に興味をそそられるかのいずれかパターンばかりなのでどうしたものかまだまだ悩み中です。
GASとか
いろいろやりたくていじり始めてますが、結局Googleアカウント持ってる人用にするか、フルオープン(実際にはURL文字列が複雑なんで、ちょいと見つけて、、、ってふうにはそうそうならないですが)にするかしかないのがちょっと不安点。
まぁG SuiteなりGCPなり契約して欲しいからの制約だとは思いますが。
当方別にコード書きじゃないことが災いして?「こういうのがやりたい、出来るのかな」でいろいろ調べ始めるので、なかなかとっつかないんですよねぇ。
javascriptだってコピペレベルでしか覚えてませんしね。
そしてまだ寝てないのと技術書典の振り返り
まだ寝てない
寝られないというのもあるが。
あと一応技術書典の振り返り
決して悪口とかではないんだがなんだか温度差を感じた。まぁなんというか他の(過去も含め)技術書典の振り返りとかをみて思うのが
「爆死した」でも「完売御礼」でもどちらにしても売上やなんかのことを書いてるかたが多いなぁという点
いや決して悪いことではもちろんないですよ?
ただその、技術書見に来て、買ってった人が見たいのってその人の売上じゃない気がするんですよ。その人なりサークルなりの本や内容、今後の活動なんかじゃないのかしらと思わなくもないんです。
なんか奥歯にものが挟まったような感じの言い方になりますが…
勿論沢山の人がその本を欲しいと思って手に取るのは素晴らしいことだと思いますし、マイナスばっかではやってくモチベがもたないとかもありますが、でもなんかその売れるとか宣伝がとか聞いちゃうとなんか微妙な違和感を感じなくもないというか。
まぁ当方永遠の弱小ニッチサークルではありますしつるむような人間もいませんので皆さんが楽しくやってるのに水を指したいわけでは決してないんですが。
あとこれは行く前から思ってた部分なんですが、とくにマイナーOS本は完全にまったく実用性のない本なので内容的にもちょっと浮いているような気はします。当方がプログラマーでもなく技術的な専門教育を受けてるワケでもないのもありますし、ひねくれた性格もあって「これをじっくりやろう」というのがほぼないというのもありますね。
マイナーOSに関してはそれでも対象の数がアホみたいに多いのもあいまってなんとかなりましたが、基本的に「手段を目的に履き違え」た本を作ってるので、その辺なのかなと。
今回の超爆死した新刊(ネタはCMS)も基本的にどれかを気に入ったり好きだったりするわけではなく「WordPressはみんな使ってるから違うのに」というのがモチベだったりします。
そしてサイトを作るのが目的ではなくなって「CMSを比較」するのが目的になっちゃってるんですよね。
どちらかと言うと「何かしらを作る方法論としてこれをやるよ」という本の作り方のサークルさんが多いように感じました。
なんか違和感とかずれを感じるのはそういうところもあるんでしょうかね
閑話休題
前述通り自分とこの本はいわば「爆死」に近いレベルでしか売れませんでした。
というか冬コミで出した既刊のほうが圧倒的に出る有り様。まぁ新しいほうもぼつぼつやっていきますが。
夏はいまのところOSSいっちょかみ本とマイナーOS本のSecond season的な方向でやるつもりですが、さてはてどうなるか。