web-dev-qa-db-ja.com

「chown @ destination」で「drush rsync」を実行できますか?

drush rsyncは、設計上、uid:gidを保持できることを理解しています。

私がdrush rsync @site1 @site2と同期していて、uid:didがsite1とsite2の両方に存在する場合、すべて順調です。

Drushのコマンド/エイリアス構成内で、uid:gidをsite2の特定の選択に変更するにはどうすればよいですか?

たとえば、site1ではすべてのファイルがwwwrun:wwwですが、site2ではすべてのファイルをbob:adminsとして保存します。どちらもsite1には存在しません。

統合ソリューションはありますか?次の手順として'drush ssh @site2 "chown ..."'を使用できることはわかっています。代わりに、aliases.drush.rcでコマンドを定義/チェーンできますか?

"remote-user = xxx"の使用は確かに機能しますが、リモートボックスでSSHアクセスを許可されているユーザーに限定されているようです。

@ remote
egrep -i "allowusers" /usr/local/etc/ssh/sshd_config
    AllowUsers         root locuse testuser

@ local
whoami
    locuse
drush --remote-user=testuser rsync @siteA @siteB
    You will destroy data from [email protected]:/srv/www/siteB/ and replace with data from /srv/www/siteA//
    Do you really want to continue? (y/n): y

@ remote
ls -al PROD/ | head -n 5
    total 248K
    drwsrws--- 10 testuser users 4.0K Mar  8 00:08 ./
    drwxrwx---  4 wwwrun   www   4.0K Mar  8 08:11 ../
    -rw-rw----  1 testuser users 6.5K Mar  6 17:31 authorize.php
    -rw-rw----  1 testuser users  64K Mar  6 17:31 CHANGELOG.txt
    -rw-rw----  1 testuser users  996 Mar  6 17:31 COPYRIGHT.txt

それは私の特定の問題/興味に対処しません。

より明確に、私がやりたいことは、許可されたユーザー(「locuse」または「root」)としてlocal-> remoteからssh-inすることですが、リモートファイルのuid:gidが既存のペアに設定されています。 uidはsshアクセスを持っていますか、持っていません(wwwrun:wwwなど)。

「man rsync」の出力を読んで、私は読んだ:

RSYNC-DAEMON機能の使用VIAリモートシェル接続

その後@siteB

mkdir -p            /path/to/target
chown -R wwwrun:www /path/to/target

vi /etc/rsyncd.conf
    transfer logging = true
    log format       = %h %o %f %l %b
    log file         = /var/log/rsyncd.log
    pid file         = /var/run/rsyncd.pid
    lock file        = /var/run/rsync.lock
    hosts deny       = *
    use chroot       = no
    [siteB]
        path = /path/to/target
        hosts allow = *
        comment = COMMENTS
        uid = wwwrun
        gid = www
        read only = no
        list = yes

および@local

whoami
    locuse
ls -al ~/SourceDir
    total 240K
    drwxrwxrwx  2 locuse users 4.0K Mar  8 10:42 ./
    drwxr-xr-x 27 locuse users 4.0K Mar  8 10:41 ../
    -rw-r--r--  1 locuse users 5.2K Mar  8 10:43 file1.txt
    -rw-r--r--  1 locuse users 2.8K Mar  8 10:43 file2.txt

rsync -av --rsh=ssh ~/SourceDir/ [email protected]::SiteB

リモートで確認:

ls -al /path/to/target
    total 240K
    drwxrwxrwx  2 root   root 4.0K Mar  8 10:42 ./
    drwxr-xr-x 27 wwwrun www  4.0K Mar  8 10:41 ../
    -rw-r--r--  1 wwwrun www  5.2K Mar  8 10:43 file1.txt
    -rw-r--r--  1 wwwrun www  2.8K Mar  8 10:43 file2.txt

それはまさに私が求めている最終状態で終わります。

3
user6023

Rsyncにuidを保存するように指示しないと、接続したユーザーの所有権の下に転送されたすべてのファイルが作成されます。したがって、重要なのは、'remote-user' => 'bob'宛先サイトのサイトエイリアス。

これを実現するために使用するrsyncフラグは-rlptzです。だから、私のdrushrc.phpには、

$command_specific['rsync'] = array('mode' => 'rlptz');

以下も参照してください。

http://drupal.org/node/1169776#comment-4612944

http://drupal.org/node/1343892

Drushでrsyncモジュールをサポートするのは厄介です。モジュールを使用する場合は、おそらくrsyncを直接呼び出すのが最善です。例えば。:

rsync -av --rsh = ssh drush dd @siteA [email protected] :: SiteB

いずれにせよ、SiteBモジュールがSite B Drupal rootを指すように設定する必要があるので、これをサイトエイリアスに結び付ける価値はほとんどないようです。

3
greg_1_anderson