Докачка с scp. Способы решения проблемы.


vti - Posted on 21 Сентябрь 2008

scp не поддерживает докачку файла. Таким образом, иногда, очень обидно, скачивая очередной большой файл, получать обрыв связи. Это можно решить несколькими способами:

1. Использовать rsync

$ alias scprsync="rsync --partial --progress --rsh=ssh"

Правда, необходим rsync на удаленной стороне.

2. Использовать curl

$ curl -T filename -C - -u yourlogin sftp://example.net/~/filename

С alias'ом здесь сложновато, но написать простенькую функцию, думаю, не составит большого труда.

Ссылки:
http://panela.blog-city.com/resume_scp_after_interrupted_downloads_use_rsync.htm
http://www.linuxquestions.org/questions/linux-networking-3/scp-resume-aborted-download-290836/

5
Ваша оценка: Ничего Рейтинг: 5 (2 голоса)

еще lftp такое умеет

$ lftpget -c sftp://login@example.net:/~/filename .

ну или интерактивно

$ lftp sftp://login@example.net
lftp> get -c filename

если curl говорит
curl: (1) Protocol sftp not supported or disabled in libcurl
(актуально для федоры, и видимо редхатообразного)
то надо компилиловарить с опцией
--with-libssh2=/path/to/libssh2

собственно как это делается в федоре (с помощьью rpm-build):
1. тянем curl-....src.rpm

2.
кроме компилятора типа gcc, rpmbuild и т.п., для сборки понадобится:
libssh2-devel
ну и может всякая другая фигня с которой было сконфигурировано curl
# yum -y install libssh2-devel

3.
# rpm -i /tmp/curl.src.rpm
правим /usr/src/redhat/SPECS/curl.spec

находим строку %configure и подправляем её с учетом своих требований (я например повыкидывал kerberos, ipv6, ldap, и добавил libssh2 )

%configure --without-ssl --with-nss=%{_prefix} --disable-ipv6 \
   --with-ca-bundle=%{_sysconfdir}/pki/tls/certs/ca-bundle.crt \
   --with-libidn \
   --disable-ldaps --disable-static \
   --with-libssh2=%{_prefix}

в BuildRequires поубирал зависимости при сборке от kerberos,ldap либ. и добавил libssh2-devel

BuildRequires: nss-devel >= 3.11.7-7, libssh2-devel

4. запускаем сборку пакетов rpmbuild -bb curl.spec
при удачном положении звезд мы получим

Checking for unpackaged file(s): /usr/lib/rpm/check-files /var/tmp/curl-7.18.2-5.fc9-root-root
Wrote: /usr/src/redhat/RPMS/i386/curl-7.18.2-5.fc9.i386.rpm
Wrote: /usr/src/redhat/RPMS/i386/libcurl-7.18.2-5.fc9.i386.rpm
Wrote: /usr/src/redhat/RPMS/i386/libcurl-devel-7.18.2-5.fc9.i386.rpm
Wrote: /usr/src/redhat/RPMS/i386/curl-debuginfo-7.18.2-5.fc9.i386.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.54210
+ umask 022
+ cd /usr/src/redhat/BUILD
+ cd curl-7.18.2
+ rm -rf /var/tmp/curl-7.18.2-5.fc9-root-root
+ exit 0

5. последний шаг он легкий самый:
# rpm -Uih /usr/src/redhat/RPMS/i386/curl-7.18.2-5.fc9.i386.rpm /usr/src/redhat/RPMS/i386/libcurl-7.18.2-5.fc9.i386.rpm --replacefiles --replacepkgs

и результат:

$ curl -o /tmp/accesslog.day -C - -u squid sftp://squid/var/log/squid/access.log
Enter host password for user 'squid':
** Resuming transfer from byte position 19417871
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
 16 85.6M   16 14.1M    0     0   360k      0  0:04:03  0:00:40  0:03:23  370k

ЗЫ. в целях защиты этих пакетов при обновлении - надо бы занести их в красную книгу:
yum-versionlock или yum-protect-packages

это в отдельный типс можно о том как пересобирать rpm

Отправить комментарий

Google Friend Connect (leave a quick comment)
loading...
Содержание этого поля является приватным и не предназначено к показу.