AWS EC2にMovable Type(AMI版)をインストールする方法
AWS EC2にMovable Type(AMI版)をインストールする方法を紹介します。
AWSのアカウント作成やログインは省略しています。
1.EC2インスタンス作成
サービス→「EC2」をクリック。
「インスタンスを起動」をクリック。
「その他のAMIを閲覧する」をクリック。
movableypeを入力。
「AWS Marketplace AMI」タブをクリック。
「Movable Type 8.4 (Amazon Linux 2023, x86_64)」をクリック(2025年5月時点の最新版)。
「今すぐ購読」をクリック。インスタンスタイプはこの後選択できます。
インスタンスタイプから「t2.micro」を選択。
キーペアで「新しいキーペアの作成」をクリック。
キーペア名に任意の名称を入力して、「キーペアを作成」をクリック。クリックすると鍵のダウンロード画面になるので、任意のフォルダに保存。
ネットワーク設定は、デフォルトの状態とします。
ストレージもデフォルトのままとします。
一番上のタグに任意の名称を設定。
「インスタンスを起動」をクリック。
インスタンスが起動されます。
「インスタンスに接続」をクリック。
右下の「接続」をクリック。
インスタンスIDを入力して「Continue」をクリック。
これでいつものインストール画面が表示されます。
なお、インスタンスを普段使用しないのであれば、インスタンスは停止しておきましょう。
CSVDataImExporterプラグイン(アセットアップロード・ダウンロード対応版)
CSVDataImExporterプラグイン(アセットアップロード・ダウンロード対応版)をリリースしました。
1.概要
コンテンツデータのアセットフィールドに紐づいているアセット(画像・オーディオ・ビデオ・ファイル)をCSVファイルとペアでダウンロードすることが可能です。
また、CSVのインポート時にアセットをあわせてアップロード(ZIP形式)することで、アセットの登録と、CSVのコンテンツデータのアセットフィールドとの関連づけが同時に行えます。
注:2025年9月現在、記事アセットおよびカスタムフィールドに対しての機能追加はありません。
2-1.エクスポート機能(コンテンツデータ一覧画面)
コンテンツデータ一覧画面の「アクション」に「 コンテンツデータのエクスポート・アセットダウンロードつき(ZIP) 」というメニューを追加しました。
この項目を選択してCSVをエクスポートすると、ZIP形式でのダウンロードとなり、ZIPファイルの内容は次のようになります。
export-001-002-20250816152706.zip
├─ export-001-002-20250816152706.csv ← CSVファイル
└─ ASSET_DIR/ ← アセット格納用フォルダ
├─ assets/
│ └─ 2025/
│ └─ 09/
│ ├─ file1.jpg
│ └─ file2.jpg
├─ images/
│ └─ file2.webp
└─ s-l960.pdf
また、CSVのアセットフィールドには、下記のように「パス+ファイル名」で設定されます(赤字部分)。
content_type,id,label,author_id,identifier,authored_on,modified_on,unpublished_on,status,名前,画像1,画像2
商品,1,テスト1,1,2b909dd37403b295ff80f6f46d23fd72cebf41d5,2025/8/6 0:58,2025/8/22 23:06,,2,テスト1,assets/2025/09/file1.jpg,s-l960.pdf
商品,2,テスト2,1,f46d23fd72cebf41d5295ff80f6f4609dd37403b,2025/8/6 0:58,2025/8/22 23:06,,2,テスト2,assets/2025/09/file2.jpg,images/file2.webp
2-2.エクスポート機能(エクスポート画面)
エクスポート画面にも「アセットダウンロードつき(ZIP) 」というメニューを追加しました。
チェックすればすべてのコンテンツデータにひもづくアセットをダウンロードします。
注:サーバ環境やアセット数・合計サイズによって正常にエクスポートできない可能性があります。
3.インポート機能
インポート画面に「ZIPファイルのアセット 」というメニューを追加しました。
基本動作は、ZIPファイルを指定してインポートすれば、CSVのアセットフィールドに記載されたパス・ファイル内を使って、ZIPのASSET_DIR配下に存在するアセットをアップロードしながら、コンテンツデータのアセットフィールドとひもづけていきます。
そのため、すでに同一パス・ファイルのアセットがサイトに存在する場合の挙動を追加したメニューで指定します。
- アップロードをスキップして既存アセットにひもづけ:アップロードをスキップして、既存のアセットにひもづけます
- 既存アセットを上書きアップロード:アップロードして、既存アセットを上書きします
- アセットをリネームしてアップロード:リネームして既存アセットとは異なるアセットとしてアップロードし。コンテンツデータとひもづけます
このオプションはアセット単位に適用されるので、たとえば、
aaa.jpg
bbb.jpg
ccc.jpg
の3つの画像をZIPでインポートする場合、bbb.jpgという画像がすでに存在すれば、bbb.jpgにのみオプションが適用され、aaa.jpgとccc.jpgは自然体でアップロードとアセット登録およびアセットフィールドとのひもづけが行われます。
注:サーバ環境やアセット数・合計サイズによって正常にインポートできない可能性があります。
4.オプション
サイト別プラグイン設定画面に「ZIP形式でアセットをインポートする場合のルートパス」を追加しました。
サイトパス直下にアップロードするようにしますが、assetsやimagesなど共通のパスが存在する場合、必要に応じて本項目を設定してください(デフォルト:設定なし)。
また、アップロードしたZIPファイル(/tmp上の一時ファイル)はインポート終了辞に削除する処理を追加しましたが、デバグ用として、一時ファイルを残すオプションをシステム管理画面に追加しました。
5-1.ユースケース1:CSVによる運用
これまでのコンテンツデータのアセットフィールドと、アセットファイルのひもづけは、
①サーバに画像をアップロード(MT機能や他のプラグイン利用)
②CSVファイルにファイルのフルパスを記入
③CSVファイルをインポート
という手順で実施が必要でしたが、
①ユーザーがローカルPCに画像を配置
②CSVファイルにファイルのパスを記入
③ZIPファイルをインポート
という手順で作業を行えるため、サーバーのアップロード作業を個別に行う手間がなくなります。
5-2.ユースケース2:画像の差し替え
任意のコンテンツデータのアセットの差し替えは、該当のコンテンツデータをエクスポートして、ASSET_DIR内の画像を置き替えてZIPを再作成し、インポートのオプションで「既存アセットを上書きアップロード」を選択・実行すれば差し替えが可能です。
5-3.ユースケース3:ホームページの引っ越し
通所のCSVエクスポート→インポートではアセットIDでひきつがれてしまうため、アセットの再ひもづけが大変ですが、アセット込みでエクスポート→インポートを実施すれば、アセットのひもづけを考える必要がなくなります。
6.プラグインについて
CSVDataImExporterプラグインの詳細は下記のページよりご覧いただけます。
確認用サイトもご用意しておりますので、試用をご希望される方はお問い合わせのページよりお申し込みください。
MT-9.0.2で追加された機能(更新履歴表示)
MT-9.0.2で追加された機能の紹介です。
更新履歴表示が変更されました(今後のバージョンアップで変更されるかもしれません)。
1.これまでの動作
「更新履歴を表示」をクリック。
「下書き」のリンクをクリック。
ステータスフィールドの表示が選択したリビジョンに切り替わります。
2.MT9(9.0.2)での動作
「更新履歴を表示」をクリック。
「下書き」のリンクをクリック。
「最新」と「表示中」の2つのリビジョンが表示されます。
「最新」は文字通り、最新リビジョンのステータスとそのタイムスタンプです。
「表示中」は管理画面に表示されたリビジョンのステータスとそのタイムスタンプです。
更新履歴から最新以外のリビジョンを選択するとこの画面になるようです。
3.管理画面テンプレートの変更
開発者向け情報ですが、これまでステータスフィールドの表示は
MT_PATH/tmpl/admin2023/cms/include/status_widget.tmpl
で行われてましたが、今回の機能追加で、
MT_PATH/tmpl/admin2025/cms/include/status_label.tmpl
に変更されました(status_widget.tmplからインクルード)。
AWSのec2インスタンスにphpMyAdminをインストールする
AWSのec2インスタンスにphpMyAdminをインストールする手順を紹介します。
1.phpMyAdminのダウンロード
Amazon Linuxの標準リポジトリにphpMyAdminパッケージが含まれていないため、Amazon Linux 2023(amzn2023)では「dnf install phpMyAdmin」は使えません。
よって下記の手順でphpmyadminのアーカイブをダウンロードおよび展開します。
$ cd /var/www/html
$ sudo curl -L https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz -o phpmyadmin.tar.gz
$ sudo tar xzf phpmyadmin.tar.gz
$ sudo mv phpMyAdmin-*-all-languages phpmyadmin
$ sudo rm phpmyadmin.tar.gz
2.config.inc.phpの修正
、 phpMyAdminのconfig.inc.phpに以下を追加します。$cfg['blowfish_secret'] = '';
↓
$cfg['blowfish_secret'] = 'ランダム文字列(32文字以上がおすすめ)';
ランダムな文字列は、
$ openssl rand -base64 32
で作れます。
3.httpd.confの修正
この段階で試しにブラウザからアクセスしましたが、
Not Found
The requested URL was not found on this server.
というエラーになったため、下記を実施(chownは不要かもしれません)。
$ sudo chown -R apache:apache /var/www/html/phpmyadmin
$ sudo vi /etc/httpd/conf/httpd.conf
■変更前
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
■変更後
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
Alias /phpmyadmin /var/www/html/phpmyadmin
<Directory /var/www/html/phpmyadmin>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
このあとhttpdを再起動します。
$ sudo systemctl restart httpd
4.php.iniの修正
ここまでの設定で404は出なくなりましたが、
phpMyAdmin - Error
Error during session start; please check your PHP and/or webserver log file and configure your PHP installation properly. Also ensure that cookies are enabled in your browser.
session_start(): open(SESSION_FILE, O_RDWR) failed: No such file or directory (2)
session_start(): Failed to read session data: files (path: )
というエラーが表示されるようになりました。調べると、
session.save_path
に値が設定されていないのが原因のようで、下記のコマンド、
$ php -i | grep session.save_path
session.save_path => no value => no value
で「no value」となるのが問題のようです。
session.save_pathはphp_info()でも確認できます。
これについては、
$ sudo vi /etc/php.ini
で、ファイルを開いて、下記のSessionグループを追加。
[Session]
session.save_path = "/tmp"
これで再度httpdを再起動します。
$ sudo systemctl restart httpd
これで修正が反映されない場合は、ec2インスタンスを再起動してみてください。
私の場合、ec23インスタンス再起動で設定が反映され、いつものphpMyAdminログイン画面が表示されました。
WindowsでRGB画像をCMYK画像に変換する方法
WindowsでRGB画像をCMYK画像に変換する方法を紹介します。
1.はじめに
GIMPを使って画像を加工していたのですが、加工した画像がRGBカラーでした。
GIMPではRGBからCMYKに変換することができないようです。
ということで、WindowsでRGB画像をCMYK画像に変換する方法を紹介します。
2.RGB画像をCMYK画像に変換する
RGB画像をCMYK画像に変換するには「KRITA(クリータ、クリタ)」という、オープンソースソフトウェアのペイントソフトを使用します。
インストール手順は省略します。
使用しているKRITAのバージョンは5.2.9です。
KRITAを起動し、CMYKに変換したい画像を「ファイル」→「開く」で開きます。
開くと下部に「RGB~」と表示されていると思います。
「画像」→「プロパティ」を選択。
「画像の色空間」タブをクリック。
「色モデル」を「RGB~」から「CMYK~」に変更して「OK」をクリック。
下部の表示が「CMYK~」に変わっていることを確認。
あとは「ファイル」→「保存」で上書きするか「名前をつけて保存」で別名で保存すれば完了です。
AWSでIAMユーザーを作成する方法
AWSでIAMユーザーを作成する方法を紹介します。
1.はじめに
AWSに久しぶりにアクセスしてみると、ログイン画面が「アカウントID」と「IAMユーザー」に変わっていました。
IAMユーザーというものをそもそも作っていなかったので、本記事で作成方法を紹介します。
なお、アカウントIDは後述するルートユーザーでログイン後、右上のユーザー名をクリックすれば「アカウントID」が表示されます。
2.AWSでIAMユーザーを作成する
AWSマネジメントコンソールにアクセス。
「持っていませんか?」のリンクをクリックすればルートユーザーでログインできる画面に切り替わるので、ルートユーザーでログインします(詳細は省略)。
ログイン後、左上の「IAM」を選択
「ユーザー」をクリック。
「ユーザーの作成」をクリック。
任意のユーザー名を設定して、「ユーザータイプ 」から「IAM ユーザーを作成します」を選択。パスワードの作成方法は任意。
すべて設定後「次へ」をクリック。
今回は1ユーザーで、ユーザーグループを作成しないので、「ポリシーを直接アタッチする」を選択。
作成するユーザーにすべての権限を与えたいので、「AdministratorAccess」のみをチェック。その下の「許可の境界を設定」はスキップします。
すべて設定後「次へ」をクリック。
設定した内容の確認画面が表示されるので、問題なければ「ユーザーの作成」をクリック。
「ユーザーが正常に作成されました」が表示されれば完了です。コンソールサインインURLやパスワードも表示されます。
なお、これまでルートユーザーで作成したものは、別ユーザーなので一切表示されないようです。
ansibleで同名のroleを複数回実行する方法
ansibleで同名のroleを複数回実行する方法を紹介します。
1.問題点
次のroleを作成しました。
roles/test/tasks/main.yml
- name: コマンド実行
shell:
cmd: hostname
register: result
- name: 結果出力
debug:
msg: "{{ result.stdout_lines }}"
このroleを実行するplaybook(test.yml)は下記です。
- hosts: localhost
connection: local
roles:
- role: test
- role: test
- role: test
inventoryは省略しますので適宜用意してください。
このplaybookを実行すると、roleは一度しか実行されません。
(ansible) [hoge@server ~]$ ansible-playbook -i inventory test.yml
PLAY [localhost] ********************************************************************************************************************
TASK [Gathering Facts] **************************************************************************************************************
ok: [localhost]
TASK [test : コマンド実行] **********************************************************************************************************
changed: [localhost]
TASK [test : 結果出力] **************************************************************************************************************
ok: [localhost] => {
"msg": [
"hoge-server"
]
}
PLAY RECAP **************************************************************************************************************************
localhost : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
2.原因
これは、Ansibleが「ロールの重複適用」を避ける設計になっているためです。
3.対処
いくつか方法はあるようですが、ここではplaybook内で「tags」を付与する方法を紹介します。
下記のように、roleごとにtagsを追加して、ユニークな値を設定します。
test.yml
- hosts: localhost
connection: local
roles:
- role: test
tags: "1"
- role: test
tags: "2"
- role: test
tags: "3"
これで同名のroleでも期待通り実行されます。
(ansible) [hoge@server ~]$ ansible-playbook -i inventory test.yml
PLAY [localhost] ********************************************************************************************************************
TASK [Gathering Facts] **************************************************************************************************************
ok: [localhost]
TASK [test : コマンド実行] **********************************************************************************************************
changed: [localhost]
TASK [test : 結果出力] **************************************************************************************************************
ok: [localhost] => {
"msg": [
"hoge-server"
]
}
TASK [test : コマンド実行] **********************************************************************************************************
changed: [localhost]
TASK [test : 結果出力] **************************************************************************************************************
ok: [localhost] => {
"msg": [
"hoge-server"
]
}
TASK [test : コマンド実行] **********************************************************************************************************
changed: [localhost]
TASK [test : 結果出力] **************************************************************************************************************
ok: [localhost] => {
"msg": [
"hoge-server"
]
}
PLAY RECAP **************************************************************************************************************************
localhost : ok=7 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Movable Type 9をインストールしてみた
Movable Type 9のデベロッパープレビューが公開されていたので、インストールしてみました。
Movable Type 9 デベロッパープレビュー を公開しました
ここではMT8との管理画面の違いを紹介します。
1.ダッシュボード
サイドバーがデフォルトで非表示になりました。
システム管理画面へのリンクがみつからなかったのですが、ヘッダー右上の歯車アイコンに移動したようです。
検索アイコンをクリックすると、検索フォームが表示されます。
サイトアイコンをクリックすると、各サイトへのリンクが表示されます。
なお、このヘッダー部分はスクロールしても固定されているので、各メニュー共通になります。
2.サイト
サイト別管理画面でサイドバーが表示されます。
サイドバー上部にあった検索はヘッダーに移動し、「再構築」はそのまま、「サイトの表示」は「サイトを見る」に表記が変わり、「新規作成」が追加されました。
「新規作成」をクリックすると、コンテンツデータ・記事・ウェブページのサブメニューが表示されます。
赤枠のアイコンをクリックすると、サイドバーを折りたためます。
折りたたんだ状態です。
折りたたんだ状態でもサイドバー(矢印アイコン以外の部分)にマウスをポイントすると、一時的に表示されます。
サイドバー株のユーザー名や「ユーザー情報」「ドキュメント」「サインアウト」はヘッダー右端に移動しました。
ダッシュボードに戻るには、左上のMTのアイコンか、パンくずリストの家のアイコンをクリックします。
以上です。
ansibleでハッシュの配列をチェックする方法
ansibleでハッシュの配列をチェックする方法を紹介します。
1.はじめに
下記の3ファイルのmd5sum値を予め用意したコンフィグに設定し、サーバ上の各ファイルのmd5sumと等しいか、チェックする必要が生じました。
ということで、ansibleでハッシュの配列をチェックする方法を紹介します。
2.やりたいこと
複数のファイルをチェックできるように、ファイル名とファイルのmd5sum値をハッシュの配列にしたいです。
ファイルのパスも動的に取得したいので、同じくハッシュの配列に含めます。
また、コンフィグはrolesディレクトリの中ではなく、分かりやすい任意の場所に配置したいです。
3.コンフィグのサンプル
前項の要望にしたがい、コンフィグは下記のようにしました。
/var/tmp/config.yml
files:
- name: kdump
path: /etc/sysconfig
md5sum: e417c7b5754df7287f41b478f2200793
- name: CentOS-Base.repo
path: /etc/yum.repos.d
md5sum: 447b4d2df1a36e64348bbd8b6c5b0fae
- name: sysctl.conf
path: /etc
md5sum: 4bae3962eeef7d1e7c7ef39314db9fb0
"files"というハッシュキーの中に配列を作り、さらにそれぞれの配列に、
- ファイル名
- ファイルパス
- md5sum値
を設定しました。
これをansibleで読み込ませるにはどうすればいいかを次項で説明します。
4.コンフィグファイルの読み込み
コンフィグファイルを読み込むには、Playbook本体(test.yml)に"vars_files"を用います。
test.yml
- hosts: test
roles:
- role: test
vars_files:
- "/var/tmp/config.yml"
これで、実行するロール内のタスクで前述のコンフィグを読み込むことができます。
5.ハッシュの配列をチェック
ハッシュの配列をチェックするには、ロール内のタスク(roles/test/tasks/main.yml)を下記のようにします。
roles/test/tasks/main.yml
- name: ファイルのmd5sum実行
command: "md5sum {{ item.path }}/{{ item.name }}"
loop: "{{ files }}"
register: file_md5_result
changed_when: false
- name: ファイルのmd5sum結果取得
set_fact:
md5sum_result: "{{ item.stdout.split(' ')[0] }}"
loop: "{{ file_md5_result.results }}"
register: file_md5
- name: コンフィグのmd5sumと比較
fail:
msg: "### {{ item.name }}のmd5sumが一致しません ###"
failed_when: item.md5sum != file_md5.results[index].ansible_facts.md5sum_result
loop: "{{ files }}"
loop_control:
index_var: index
タスクの解説です。まず、loopにコンフィグのハッシュキー"files"を指定し、コンフィグからファイルの情報を収集し、md5sumを実行します。
実行結果はfile_md5_result(配列)に保持します。changed_whenは、md5sum実行でchanged=1となるのを抑止しています。
- name: ファイルのmd5sum実行
command: "md5sum {{ item.path }}/{{ item.name }}"
loop: "{{ files }}"
register: file_md5_result
changed_when: false
次に実行結果file_md5_resultをloop変数に指定し、splitを使ってmd5sum値のみを収集し、set_factを使って変数"md5sum_result"に設定します。
- name: ファイルのmd5sum結果取得
set_fact:
md5sum_result: "{{ item.stdout.split(' ')[0] }}"
loop: "{{ file_md5_result.results }}"
register: file_md5
最後に、もう一度loopにコンフィグのハッシュ"files"を指定し、
- name: コンフィグのmd5sumと比較
fail:
msg: "### {{ item.name }}のmd5sumが一致しません ###"
failed_when: item.md5sum != file_md5.results[index].ansible_facts.md5sum_result
loop: "{{ files }}"
loop_control:
index_var: index
failed_whenは、指定した条件がTrueのとき、タスクを失敗させる条件を定義します。
ここでは、コンフィグのmd5sum値と配列変数に保持したmd5sum値が等しくない場合にタスクを失敗させます。
タスクを失敗させた場合にfailが発動し、msgに指定した文字列を出力します。
「index_var: index」は、ループのインデックス(0から始まる番号)を"index"という変数として利用できるようにしています。
これを使うことで、配列変数"file_md5.results"をインデックスを使って順に参照できます。
bashスクリプトでCSVファイルを読み込む方法
bashスクリプトでCSVファイルを読み込む方法を紹介します。
1.問題点
bashスクリプトで大量CSVのデータを読み込む必要が生じましたが、読み込む方法がわかりません。
ということで、bashスクリプトでCSVファイルを読み込む方法を紹介します。
2.bashスクリプトでCSVファイルを読み込む
ここではCSVファイルに「名前」「ユーザー名」「パスワード」を3件設定したファイル(sample.csv)を読み込むものとします。
山田,yamada,GU2LTgyM
鈴木,suzuki,Njg4ZWYz
佐藤,sato,b291bf53
bashスクリプト(test.sh)でCSVファイルを読み込むには次のようにします。
#!/bin/bash
# 引数でCSVファイル名を取得
input_file="$1"
# CSVファイルを行ごとに読み込み
while IFS=',' read -r NAME USER PASS; do
echo "名前: $NAME"
echo "ユーザー名: $USER"
echo "パスワード: $PASS"
# ここに必要な処理を追加
done < "$input_file"
これでCSVファイルの内容が1行ずつ読み込まれ、変数$NAME,$USER,$PASSにそれぞれ格納されます。
あとは、必要な処理をその中に追加すればOKです。
実行結果
$ ./test.sh sample.csv
名前: 山田
ユーザー名: yamada
パスワード: GU2LTgyM
名前: 鈴木
ユーザー名: suzuki
パスワード: Njg4ZWYz
名前: 佐藤
ユーザー名: sato
パスワード: b291bf53
引数が設定されていない場合のチェックを行うには、赤字の処理を追加します。
#!/bin/bash
# 引数でCSVファイル名を取得
input_file="$1"
# 引数が指定されていない場合のエラーメッセージ
if [[ -z "$input_file" ]]; then
echo "使用法: $0 <CSVファイル名>"
exit 1
fi
# CSVファイルを行ごとに読み込み
while IFS=',' read -r NAME USER PASS; do
echo "名前: $NAME"
echo "ユーザー名: $USER"
echo "パスワード: $PASS"
# ここに必要な処理を追加
done < "$input_file"
さらに、CSVファイルにコメント行や空行が含まれる場合は赤字の処理を追加します。
#!/bin/bash
# 引数でCSVファイル名を取得
input_file="$1"
# 引数が指定されていない場合のエラーメッセージ
if [[ -z "$input_file" ]]; then
echo "使用法: $0 <CSVファイル名>"
exit 1
fi
# CSVファイルを行ごとに読み込み
while IFS=',' read -r NAME USER PASS; do
# 空行やコメント行はスキップ
if [[ -z "$NAME" || "$NAME" =~ ^# ]]; then
continue
fi
echo "名前: $NAME"
echo "ユーザー名: $USER"
echo "パスワード: $PASS"
# ここに必要な処理を追加
done < "$input_file"
TeraTermで「サーバはこのマシンに転送を試みました」のメッセージを抑止する方法
TeraTermで「サーバはこのマシンに転送を試みました」のメッセージを抑止する方法を紹介します。
1.問題点
TeraTermでサーバにログインすると下記のダイアログが表示されることがあります。
サーバはこのマシンに転送を試みました.
localhost 上のXサーバへの接続を要求しました (ディスプレイ 0:0).
接続は拒否されました (おそらくサービス停止中です)(code 10061).
転送接続を終了します.
このダイアログを消すとログインまで辿り着きますが、そもそもこのダイアログを表示させない方法がわかりません。
ということで、TeraTermで「サーバはこのマシンに転送を試みました」のメッセージを抑止する方法を紹介します。
2.「サーバはこのマシンに転送を試みました」のメッセージを抑止する
メッセージを抑止するには、「設定」→「SSH転送を選択」
「リモートのXアプリケーションをローカルのXサーバに表示する」のチェックを外します。
これでSSHログイン時にダイアログが表示されなくなると思います。
PowerPoint 2024ダウンロード版のライセンス認証手順
PowerPoint 2024インストール版(サブスクではない)をAmazonで購入しました。
Amazonで購入すると、ライセンスキーと併せて下記の手順が送られてきます。
- www.office.com/setup/ にアクセスします。
- 指示に従い、25桁のプロダクトキーを入力します。
- ご利用したい Microsoft アカウントでサインインします。Microsoft アカウントをお持ちでない場合は、作成してください。
- Windows PC または Mac に Office アプリをダウンロードしてください。
上記ののダウンロードからインストールまでは割と楽に手順を踏めたのですが、PowerPoint初回起動後のライセンス認証がわかりにくかったので、キャプチャできた画面を使って紹介します。
初回起動すると操作は行えず、下記のダイアログが表示されるので「Microsoft365を購入」をクリックしてみます。
Microsoft365購入画面が表示されるだけなので閉じます。
この間の操作を忘れてしまったのですが、再び何かのダイアログが表示され、サブスクの誘惑に屈することなく操作をしていたら下記の画面が出たので、「プロダクトキーを所有している場合」をクリック。
キャプチャしていませんが、このあとプロダクトキー入力画面が出たので、プロダクトキーを入力すると下の画面が表示されたので、再度「プロダクトキーを所有している場合」をクリック。
このあと再度プロダクトキー入力画面が出たので、プロダクトキーを入力すると、このライセンス認証画面が出たので、メールアドレスを入力(プロダクトキーを入力した方がよかったかもしれません)。
これでライセンス契約同意画面が表示されるので「同意する」をクリック。
このあとも使用可能になる前の設定が表示されますが、たいした問題ではないので省略。
うっかりすると間違えてサブスクリプション購入してしまうので、ダウンロード版を購入された場合はサブスクリプション契約しないよう、注意しましょう。
CentOS9 + Perl5.38.2でPSGI環境を構築する方法
この記事は「Movable Type Advent Calendar 2024」の7日目の記事です。
CentOS9 + Perl5.38.2でPSGI環境を構築する方法を紹介します。
CentOS9のVMを作成すると、Perlはデフォルトで5.32.1になりますが、5.38.2を個別にビルドします。
また、MovableType(PSGI)の利用を前提としてウェブサーバーとして動作できるまでの手順も併せて紹介します。
動作確認にはVirtualBoxを使用しています。
1.mysql関連パッケージのインストール
# rpm -Uvh https://repo.mysql.com/mysql80-community-release-el9-1.noarch.rpm
# dnf install mysql-community-server --nogpgcheckdnf install mysql-community-server --nogpgcheck
# dnf install mysql-community-devel --nogpgcheck
2.gccとmakeのインストール(Perlのビルド用)
# dnf install make gcc
3.httpd関連のインストール
# dnf install httpd httpd-tools httpd-devel
4.firewalldの停止
# systemctl status firewalld
# systemctl stop firewalld
# systemctl disable firewalld
5.httpdの常駐化
# systemctl is-enabled httpd
# systemctl enable httpd
6.mysqlのパスワード変更(赤字が初期パスワード、青字が変更後のパスワード)
# systemctl start mysqld
# grep 'temporary password' /var/log/mysqld.log
2024-11-26T12:52:05.760486Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: ei#(n;i9uf$k
mysql> ALTER USER 'root'@'localhost' identified BY 'rJOIaea%#%(JO';
Query OK, 0 rows affected (0.03 sec)
7.Perl5.38.2のビルドとインストール
インターネットからダウンロードしたPerlのアーカイブ(tar.gz)を任意のフォルダにアップロードして、コマンドを実行します。
デフォルトのPerlとは異なるディレクトリにインストールします。
# tar zxvf perl-5.38.2.tar.gz
# cd perl-5.38.2/
# ./Configure -des -Dprefix=/usr/local/perl-5.38.2./Configure -des -Dprefix=/usr/local/perl-5.38.2
# make
# make install
8.Perlのパス張り替え
Perl5.32.1から5.38.2に張り替えます。
# perl -v
This is perl 5, version 32, subversion 1 (v5.32.1) built for x86_64-linux-thread-multi
:
# cd /usr/bincd /usr/bin
# mv perl perl--
# ln -s /usr/local/perl-5.38.2/bin/perl /usr/bin/perl
# perl -v
This is perl 5, version 38, subversion 2 (v5.38.2) built for x86_64-linux
:
9.cpanmでPerlモジュールのインストール
MovableTypeの動作に必要なモジュールをインストールします。
# perl -MCPAN -e 'install App::cpanminus'perl -MCPAN -e 'install App::cpanminus'
:
Would you like to configure as much as possible automatically? [yes] yes
:
# /usr/local/perl-5.38.2/bin/cpanm HTML::Entities/usr/local/perl-5.38.2/bin/cpanm HTML::Entities
# /usr/local/perl-5.38.2/bin/cpanm DBI/usr/local/perl-5.38.2/bin/cpanm DBI
# /usr/local/perl-5.38.2/bin/cpanm DBD::mysql/usr/local/perl-5.38.2/bin/cpanm DBD::mysql
10.postfixのインストール
# dnf -y install postfixdnf -y install postfix
11.SeLinuxの無効化
エディタで/etc/selinux/configを開き、
SELINUX=enforcing
を
SELINUX=disabled
に変更します。
# vi /etc/selinux/config
12.メールサーバの設定
/etc/postfix/main.cfと/etc/postfix/master.cfを編集します。
詳細は「さくらのVPSに送信メールサーバを設定する方法」を参照してください。
12.httpd起動
starman起動前に通常のCGIでMovableTypeの管理画面にアクセスします。
# systemctl start httpd
13.PSGI環境構築のためのパッケージとモジュールのインストール
# dnf install perl-ExtUtils-MakeMaker
# /usr/local/perl-5.38.2/bin/cpanm/usr/local/perl-5.38.2/bin/cpanm --sudo CGI::Compile--sudo CGI::Compile
# /usr/local/perl-5.38.2/bin/cpanm --sudo CGI::CompilePlack
# /usr/local/perl-5.38.2/bin/cpanm --sudo Plack
# /usr/local/perl-5.38.2/bin/cpanm --sudo XMLRPC::Transport::HTTP::Plack
その他、
CGI::Parse::PSGI
CGI::PSGI
も必要ですが、インストールされていたので省略。
インストールされていることの確認は、モジュールのバージョン表示コマンドを実施。
# perl -MCGI::PSGI -e 'print $CGI::PSGI::VERSION . "\n";'
# perl -MCGI::Parse::PSGI -e 'print $CGI::Parse::PSGI::VERSION . "\n";'
14.httpd.conf修正
# vi /etc/httpd/conf/httpd.conf
PSGI動作のために下記のLoadModuleディレクティブを追加
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
ServerNameディレクティブにVMのIPアドレスを設定。
ServerName 192.168.56.100
一番最後に下記の内容を追加(上記のmod_proxyを設定しておかないと機能しません)。
<IfModule mod_proxy.c>
ProxyPass /cgi-bin/mt/ http://localhost:5000/cgi-bin/mt/
ProxyPassReverse /cgi-bin/mt/ http://localhost:5000/cgi-bin/mt/
</IfModule>
修正後、httpdを再起動します。
# systemctl restart httpd
起動後、/etc/httpd/logs/error_logにエラーが出ていないことを確認。
私はServerNameが設定されていなかったのと、LoadModuleが設定されていないところで躓きました(error_logに表示されているのをみつけて解決)。
15.mt.pid用ディレクトリ作成
ここではMTインストールディレクトリ(/var/www/cgi-bin/mt)配下に作成します。
# mkdir -p /var/www/cgi-bin/mt/pids
16.mt-config.cgiに環境変数追加
下記の1行を追加します。
PIDFilePath /var/www/cgi-bin/mt/pids
17.starman起動
# cd /var/www/cgi-bin/mt
# starman -l 0.0.0.0:5000 --pid /var/www/cgi-bin/mt/pids/mt.pid ./mt.psgi
18.ブラウザからMT管理画面にアクセス
今回の例では、ポート番号5000番を指定して、
http://192.168.56.100:5000/cgi-bin/mt/mt.cgi
にアクセスします。
これでMT管理画面が表示されればOKです。
「MTDDC Meetup Tokyo 2024」の発表スライド
2024年11月23日、「MTDDC Meetup Tokyo 2024」が開催され、久しぶりに登壇させて頂きました。
今回は「プラグインよもやま話」というタイトルでお話ししました。
内容は各種プラグインの作り方がメインで、Perlやプログラムがわからない人でも理解できる程度のサンプルを使って、わかりやすくしているつもりです。
実例がないとわかりにくいものは、リリースしているプラグインを抜粋しています。
また、私自身、プラグインをなんとなく先人達のマネをして作ってきたので、
- 定義ファイル名が「config.yaml」なのはなぜだろう?
- ハンドラの先頭に"$"を付与するのはなぜだろう?
- クラスファイルをlibディレクトリ配下に配置するのはなぜだろう?
- プラグインはどうやって登録されるんだろう?
- コールバックの仕組みはどうなっているんだろう?
といった疑問にも取り組んでみました。
ということで、そのときの発表スライド(PDF)を公開しておきます。
当日発表用にレイアウトを全体的に少し上にずらしているので、修正したら差し替えます。
約200ページあります。目次は次の通りです。
- 自己紹介
- プラグイン基礎
- mt.cgiの仕組み
- プラグインが登録される仕組み
- 各種プラグインの定義と実装
- コールバック
- テンプレートタグ
- グローバルモディファイア
- テンプレート
- トランスフォーマー
- メニュー
- リスティング・リストアクション
- ウィジェット
- パーミッション
- スケジュールタスク
- DataAPI
- オーバーライド
- ローカライズ
- プラグインデータ・プラグイン設定
- アプリケーション
- データベースにテーブル・フィールド追加
- プラグイン資材
- デバグ
- ノウハウ
- パフォーマンス
- 失敗談
- プラグイン・プラグイン開発関連サイト
「MTDDC Meetup Tokyo 2024」に登壇します
間際のご報告となり恐縮ですが、今週末の11/23(土)、「MTDDC Meetup Tokyo 2024」が開催されます。
場所は「LINEヤフー株式会社(東京ガーデンテラス紀尾井町内)」。時間は11:30開場、12:30開始。一般チケット4000円、学生チケット1000円です。
(以下サイトより引用)MTDDCとは、MTDDCは「Movable Type Developers & Designers Conference」の略で、MTに携わる技術者やデザイナー向けのカンファレンスです。
2007年8月に東京で開催した「Movable Type 開発者向けカンファレンス (Movable Type Developer Conference)」が最初で、その後にデザイナー向けのセッションも加えて、MTDDCとして開催しています。
MTDDCおよびMTDDC Meetupは、Movable Typeを中心としたイベントです。
とは言え、Movable Type一色ではなく、Web全般についての各種のセッションも多数展開します。
「Movable Typeを使っていない」という方でも、Webに関係する方であれば、十分お楽しみいただける内容になっています(引用ここまで)。
私も久しぶりに登壇させて頂くことになりました。
出演予定時間は14:30~15:25です。
今回は「プラグインよもやま話(仮)」というタイトルで、プラグインの仕組みやプラグイン開発にまつわる経験談などを交えてお話させて頂く予定です。
MovableTypeにご興味のあるかた、まだ参加を迷われている方、ご参加をお待ちしています。