Movable Type 8の新機能「コンテンツの分離」

October 13,2023 11:55 PM
Category:[インストール]
Tag:[Movabletype]
Permalink

Movable Type 8の新機能「コンテンツの分離」について紹介します。

1.はじめに

「コンテンツの分離」は、ユーザーのコンテンツとシステムファイルを分離するための機能です。

この機能は、インストールウィザードの中でそれぞれのパスを分離します。

以下、手順を説明します。

2.コンテンツの分離

新規でMT8をインストールして、cgi-bin配下のmt-staticにアクセスできない場合、次の「スタティックウェブパスの設定」画面が表示されます。

MT7までと同様にスタティックウェブパスの設定して「開始」をクリックすると次の「コンテンツの分離」画面が表示されます。

次のように記載されています。

従来アップロードしたファイルはmt-staticディレクトリ配下のディレクトリに入れられましたし、ユーザーのプラグインやテーマはMovable Typeのシステムファイルが存在しているディレクトリにインストールされていました。このやり方は簡単そうですが、Movable Typeを新しいバージョンにアップグレードするときに古いバージョンのファイルが残ったりアップロードしたファイルを消してしまうなどの問題が起こることもありました。

追加のパス設定をして、ユーザーのコンテンツとシステムファイルを分離することをお勧めします。

分離する場合はチェックボックスをチェックせずに「次へ」をクリック、既存通りの手順で進めたい場合(分離しない場合)はチェックボックスをチェックして「次へ」をクリックします。

ここでは、チェックボックスをチェックせずに「次へ」をクリックした場合の手順を説明します。

3.ベースユーザーディレクトリの設定

クリックすると「ベースユーザーディレクトリの設定」画面が表示されます。

ベースユーザーディレクトリの設定

次のように記載されています。

ベースユーザーディレクトリはユーザーの画像やプラグイン、テーマを(適切なサブディレクトリに)アップロードしたり格納したりする場所です。ベースユーザーディレクトリ自体はWebブラウザからアクセスできる場所にあってはなりません。また、Movable Typeディレクトリやそのサブディレクトリであってはいけません。配下にMovable Typeディレクトリを含まないようにするのがお勧めですが、必要なら含めるようにもできます。よくわからない場合、またご自身で細かく設定したい場合は設定を省略できます。

ということで、Webブラウザからアクセスできないパス(/var/www以外等)を作成し、「次へ」をクリック。

ここでは"/var/baseuser"というディレクトリを作成してクリックします。

ベースユーザーディレクトリの設定

4.ベースサイトパスの設定

クリックすると「ベースサイトパスの設定」画面が表示されます。

ベースサイトパスの設定

次のように記載されています。

ベースサイトパスは新規サイトのサイトパスの既定値となります。各サイトのサイトパスは必ずベースサイトパスの配下になります。

ベースサイトパスは設定された状態で表示されるので、表示されたパスのディレクトリを作成して「次へ」をクリックするか、パスを変更したい場合は、変更したいパスに対応するディレクトリを作成し、ベースサイトパス配下のパス名を変更して「次へ」をクリック。

5.サポートディレクトリの設定

クリックすると「サポートディレクトリの設定」画面が表示されます。

サポートディレクトリの設定

次のように記載されています。

サポートディレクトリはアップロードしたアセットファイルが入る場所です。Webブラウザからアクセスできる必要があります。従来はmt-staticディレクトリ配下にありましたが、別の場所に移すことをお勧めします。

ここでは、

  • サポートディレクトリURL:http://user-domain/support/
  • サポートディレクトリパス:/var/www/support

をそれぞれ設定して、「次へ」をクリック。

6.その他のパス設定

クリックすると「その他のパス設定」画面が表示されます。

その他のパス設定

次のように記載されています。

ユーザーのファイルとシステムファイルを分離するうえで設定した方がよいパスがいくつかあります。いずれもWebブラウザからアクセスできる場所にあってはなりません。

各パスはベースユーザーディレクトリ配下にデフォルト値が設定された状態で表示されるので、表示されたパスのディレクトリをそれぞれ作成して「次へ」をクリックするか、パスを変更したい場合は、変更したいパスに対応するディレクトリを作成し、ベースサイトパス配下のパス名を変更して「次へ」をクリック。

これでいつものインストール画面が表示されます。

システムチェック

Comments [0] | Trackbacks [0]

VMをundefineできない場合の対処

October 9,2023 11:55 PM
Category:[Linux]
Tag:[Linux]
Permalink

VMをundefineできない場合の対処方法を紹介します。

1.問題点

VMをundefineしようとしたら下記のエラーが発生しました。

# virsh undefine test-vm
エラー: ドメイン test-vm の定義の削除に失敗しました
エラー: 要求された操作は有効ではありません: 1 個のスナップショットを持つ停止状態のドメインを削除できません

2.原因

スナップショットが保存されているとundefineできないようです。

3.対処

下記の手順でスナップショットを削除します。

まずスナップショットの有無を確認します。

# virsh snapshot-list test-vm
 名前               作成時間              状態
------------------------------------------------------------
 test-vm_ss1        2023-09-08 09:23:27 +0900 shutoff

スナップショットが残っている場合、削除します(本当に必要であれば残すべきですが)。

# virsh snapshot-delete test-vm test-vm_ss1
ドメインのスナップショット test-vm_ss1 が削除されました

これで該当のVMをundefineできます。

# virsh undefine test-vm
ドメイン test-vm の定義が削除されました
Comments [0] | Trackbacks [0]

Perlでansibleライブラリを作成する方法

October 4,2023 11:55 PM
Category:[Perl, ansible]
Tag:[ansible, Perl]
Permalink

Perlでansibleライブラリを作成する方法を紹介します。

1.問題点

ansibleのシナリオを作成する中で、既存のansibleライブラリに存在しない処理をする必要が生じました。

が、ライブラリの作り方がわかりません。

具体的には、

  • 配置場所
  • 引数の送受信
  • 返却値の送受信

です。

ということで、Perlでansibleライブラリを作成する方法を紹介します。

ここではPerlで説明していますが、他の言語にも応用できると思います。

2.ansibleのディレクトリ構造

本題に入る前に、サンプルとして使用するansibleシナリオのディレクトリ構造を示します。

複雑ですいませんが、ansibleのベストプラクティスで記載しています。

ansible実行ディレクトリ/
  inventory
  send_user_password.yml
  roles/
    send_user_password/
      tasks/
        main.yml
      files/
        lib.tar.gz perlで使用するライブラリ
  library/
    send_user_password Perlスクリプト

このansibleシナリオの実行方法は下記です。

$ cd ansible実行ディレクトリ
$ ansible-playbook -i inventory send_user_password.yml

これで、roles/send_user_password/tasks/main.ymlが動作します。

そして、main.ymlの中でライブラリを使用します。

ansibleライブラリは"library"が該当します。詳細については後述します。

ここでは、ライブラリ以外の、各ファイルの内容を示します。

設定内容は環境に合わせてて適宜修正してください。

inventory

server_00 ansible_host=192.168.0.123
 
[all:vars]
ansible_user=root
ansible_ssh_pass=hogehoge
 
[server1]
server_00

send_user_password.yml

- hosts: server1
  roles:
    - role: send_user_password
      vars:
        work_path: "/tmp"

main.yml

- name: "Perlライブラリ転送"
  unarchive:
    src: lib.tar.gz
    dest: "{ work_path }"
 
- name: ユーザ・パスワード送信
  send_user_password:
    user: test
    password: hoge
  register: result
 
- name: "結果出力"
  debug:
    msg: "{{ result }}"

3.ライブラリ用Perlスクリプトのサンプル

Perlスクリプトのサンプル(send_user_password)を下記に示します。

このスクリプトは、受信した引数をそのまま返却するだけのものです。

#!/usr/bin/perl
 
use lib '/tmp/lib';
 
my $file = shift(@ARGV);
open( my $fh, "<", $file );
my $contents = do { local $/; <$fh> };
 
my @content = split( /\s/, $contents );
 
my $user;
my $password;
for my $data ( @content ) {
    my @tmp1 = split( /user=/, $data );
    if ( $tmp1[1] ) {
        $user = $tmp1[1];
    }
    my @tmp2 = split( /password=/, $data );
    if ( $tmp2[1] ) {
        $password = $tmp2[1];
    }
}
 
if ( !$user || !$password ) {
    print "{ \"msg\" : \"illegal parameter\", \"rc\" : 0, \"changed\" : \"false\", \"failed\" : \"1\" }";
    exit;
}
 
print "{ \"msg\" : \"OK\", \"user\" : \"$user\", \"password\" : \"$password\", \"rc\" : 0, \"changed\" : \"false\" }";

4.ライブラリの実行

まず、ansibleシナリオに記述した"send_user_password"が、そのままライブラリの実行ファイル名になります。

ansible実行ディレクトリ直下にlibraryディレクトリを配置することで、その配下のスクリプトがライブラリとして自動認識されます。

なお、このansibleのサンプルのライブラリ"send_user_password"は、ターゲットサーバに転送されて実行されます。

必要なライブラリがターゲットサーバに存在しない場合、ライブラリをlib.tar.gz等のファイル名でアーカイブして、roles/send_user_password/files/に配置し、unarchiveモジュールでターゲットサーバに転送・展開します。

- name: "Perlライブラリ転送"
  unarchive:
    src: lib.tar.gz
    dest: "{ work_path }"

展開されたPerlライブラリは、Perlスクリプト内のlibモジュールで追加して利用します。

use lib '/tmp/lib';

5.ライブラリの引数

send_user_passwordの引数となるuserとpassword(のキーと値)は、ファイルとして保存され、そのファイル名がPerlスクリプトに渡されます。

- name: ユーザ・パスワード送信
  send_user_password:
    user: test
    password: hoge
  register: result

サンプルの場合、ファイルの中身は次のようになるはずです。

user=test password=hoge

下記に引数を取得するサンプルを示します。

# 引数としてファイル名を取得
my $file = shift(@ARGV);
 
# ファイルオープン
open( my $fh, "<", $file );
 
# 中身をすべで取得
my $contents = do { local $/; <$fh> };
 
# 半角スペースで分割
my @content = split( /\s/, $contents );
 
# 引数を取得
my $user;
my $password;
for my $data ( @content ) {
    my @tmp1 = split( /user=/, $data );
    if ( $tmp1[1] ) {
        $user = $tmp1[1];
    }
    my @tmp2 = split( /password=/, $data );
    if ( $tmp2[1] ) {
        $password = $tmp2[1];
    }
}

6.ライブラリの返却値

返却値はJSON形式です。ダブルクォーテーション等にはエスケープが必要です。

ここでは受信した引数をそのまま返却しています。

print "{ \"msg\" : \"OK\", \"user\" : \"$user\", \"password\" : \"$password\", \"rc\" : 0, \"changed\" : \"false\" }";

サンプルのansibleでは、受信した返却値を変数resultに保存し、出力するようにしています。

- name: ユーザ・パスワード送信
  send_user_password:
    user: test
    password: hoge
  register: result
 
- name: "結果出力"
  debug:
    msg: "{{ result }}"

個別に出力したい場合は、result.userやresult.passwordとします。

Comments [0] | Trackbacks [0]
 1  |  2  |  3  |  4  |  5  | All pages