From rp Thu Oct  2 15:33:24 2003
Date: Thu, 2 Oct 2003 15:33:24 +0200
To: Geert-Jan Houben <houben>
Cc: Paul De Bra <debra>
Subject: rsync op cygwin
Message-ID: <20031002133324.GA3419@wsinis17.win.tue.nl>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.4i
Status: RO
Content-Length: 5222
Lines: 203

Er zijn twee methodes om rsync naar Cygwin te doen:

  i) vanuit cygwin rsyncen met een andere machine
 ii) vanuit een andere machine rsyncen met Cygwin

i gaat als volgt:

  1) Start een Cygwin-shell op
  2) Tik in

    cd /cygdrive/d
    mkdir -p backup/probeersel
    cd backup/probeersel
    rsync -e ssh -av cheetah:. .  # of wat je maar wilt backuppen

Om alleen te tonen welte bestanden verschillen moet je -n toevoegen.
Om niets te tonen en het alleen te doen moet je -v weglaten.
Zie man rsync.

Dit was een tijdje geleden griezelig traag, voor details zie

  http://www.google.com/search?q=rsync+cygwin+slow

Maar ik heb Cygwin geupdate, en het lijkt nu te werken.
Als je het wilt automatiseren kan dat o.a. met cron.
Installatie van cron als Windows-service gaat als volgt:

 1) Start een cygwin-shell op (de default shell is bash)
 2) Geef het commando

  cygrunsrv -I cron -p /usr/sbin/cron -a -D -f 'Cygwin cron' -1 /var/log/cron.out -2 /var/log/cron.err -e 'CYGWIN=binmode ntsec tty'

  3) Geef het commando

   cygrunsrv -S cron

  en controleer met

   ps -ef | grep '[c]ron'

  dat cron draait.

Bij mij weigert hij overigens op te starten op het moment.


  4) Tik in

    crontab -e

Mijn crontab ziet er als volgt uit:

30 1 * * * nice -19 updatedb

zodat locate werkt.  

Methode ii, die je sowieso nodig hebt als je van Cygwin naar Cygwin
wilt rsyncen tussen 2 PCs,  kan op (meer dan) 2 manieren:

  A) via ssh
  B) via rsyncd

(Andere manieren beveel ik niet aan.)

In beide gevallen moet je een server installeren; onder Windows 2000/XP
is dat een "service".  Dat gaat als volgt:

In geval A: sshd.

 1) Start een cygwin-shell op (de default shell is bash)
 2) Geef het commando

      /usr/sbin/sshd -t

    en repareer de problemen.  Mijn /etc/sshd_config is (als je al het
    commentaar weglaat):

Port 22
StrictModes no
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes
UsePrivilegeSeparation yes
Subsystem      sftp    /usr/sbin/sftp-server

Vergeet niet

  chown SYSTEM /etc/sshd_config

te doen.

 4) Installeer sshd als NT-service met het commando

      cygrunsrv -I sshd -p /usr/sbin/sshd -a -D -f 'Cygwin sshd' -0 /var/log/sshd.out -1 /var/log/sshd.err -e 'CYGWIN=binmode ntsec tty'

(Ik denk dat dit goed is, ik heb het niet meer in mijn history staan.)

De service moet nu onder  My Computer->Manage  te vinden zijn.

 5) Start de service:

      cygrunsrv -S sshd

Dat kan ook onder My Computer->Manage, natuurlijk.

   Er moet nu een /usr/sbin/sshd-proces draaien; te controleren met

     ps -ef | grep '[s]shd'

 6) Probeer het uit:

    ssh localhost who

Het opstarten duurt lang, maar het moet werken.

 7) Nu kun je ook van elders in de wereld ssh-en, en dus ook rsyncen.

Om mijn cheetah-directory naar mijn PC te backuppen kan ik bv. doen:

  rsync -e ssh -av /home/rpost/. pcwin217.campus:/cygdrive/d/backup/cheetah/rpost/.

Ik geef dan mijn Windows-wachtwoord in.

Binnen een halve minuut volgt het eindrapport:

  wrote 117118 bytes  read 130 bytes  3974.51 bytes/sec
  total size is 668393355  speedup is 5700.68

(Het is dus 669M in totaal, en het bijwerken van de laatste updates was
5700 keer zo snel als de eerste keer, toen alles gekopieerd werd.)

Met hezelfde gemak kun je je PC backuppen naar cheetah (behalve dat
we dan uit de schijfruimte lopen):

   rsync -e ssh -av pcwinvanjou.campus:/cygdrive/c  /scratch/`whoami`/mypcbackup

Kijk erg uit met het gebruik van slashes in de argumenten:

  /scratch/`whoami`/mypcbackup maakt een subdirectory c
  /scratch/`whoami`/mypcbackup/ weet ik niet
  /scratch/`whoami`/mypcbackup/. maakt geen subdirectory c

Voor je het weet maak je een totale kopie van /cygdrive/c in
 /scratch/`whoami`/mypcbackup/c/c ipv.  /scratch/`whoami`/mypcbackup/c.

 8) Dit kun je natuurlijk in cron zetten.

In geval B: rsyncd.

1) Schrijf een /etc/rsyncd.conf.  Een tijdje lang had ik dit:

use chroot = yes
transfer logging = yes
log format = %o %h [%a] %m (%u) %f %l %b
dont compress = *.gz *.tgz *.zip *.z *.F *.Z *.bz2 *.gif *.jpg *.rpm *.deb

[backup]
  path = /backup
  comment = remote backup area
  hosts allow = cheetah.win.tue.nl
  read only = false
  auth user = rp
  secrets file = /etc/rsyncd.secrets

met in /etc/rsyncd.secrets zoiets als

  rp:hadjewat?

Vergeet niet

   chmod go-rwx /etc/rsyncd.secrets
   chown SYSTEM /etc/rsyncd.secrets

Ik had eerst een rsyncd.conf zonder auth user, zodat
iedereen mijn /backup-directory kon lezen en schrijven.
Zo kun je het opzetten om te testen of voor echt publieke data
(zou mooi voor AHA kunnen bijvoorbeeld).

Nu kan ik bv. de inhoud naar bv cheetah synchroniseren door
op cheetah te roepen

  rsync pcwin217.campus::backup/. .

(de dubbele dubbele punt betekent: rsyncd ipv. sshd).

maar eerst moet je nog doen:

2) Installeer inetd als NT-service.
Dat gaat net als voor cron en sshd  - zie boven -  alleen
met overal de string 'cron' resp. 'sshd' vervangen door 'inetd'.

3) Zet in inetd de regel

  rsync   stream  tcp     nowait  root    /usr/bin/rsync rsyncd --daemon

Overigens kun je ook sshd vanuit inetd opstarten; de regel daarvoor
staat er al in, maar met een # ervoor.

4) Start inetd als NT-service (zie boven).

Vragen, problemen aub melden.

-- 
Reinier


