HOWTO sync your files/pt
Contents |
Como sincronizar os teus ficheiros
Neste artigo nós iremos te explicar como sincronizar vários ficheiros através do teu computador e como recuperar informação a múltiplas contas shell. A solução abrangida neste artigo não irã ser necessária alguma instalação ou configuração especial no servidor remoto.
Como começar
Primeiro, tu precisas de criar "repositório" e colocar toda a informação que tu queres sincronizar.
mkdir ~/.home cp -fr .tcshrc ~/.home cp -fr .irssi ~/.home
Also, you should create Makefile in your repository. The idea is to run it after your data will be transfered to remote machine.
all: chmod 711 $(HOME)/.ssh \ $(HOME)/.irssi chmod 600 $(HOME)/.tcshrc \ $(HOME)/.bash_profile \ $(HOME)/.logout \ $(HOME)/private.tar.gz.bf64 \ $(HOME)/CHECKSUM
We also recommend you to read this: HOWTO SSH without a password.
ClusterIt!
We will use clusterit to transfer data from your repository to remote machine. Clusterit is a collection of clustering tools to turn your ordinary everyday pile of UNIX workstations into a speedy parallel beast. This facilitates managing a set of program executing in parallel with a very flexible authentication scheme. If you don't want to use it, you will have to edit synchronization script. First, you need to install it. Under FreeBSD you may do:
make -C /usr/ports/net/clusterit/ WITHOUT_X11=yes install clean
Config file for clusterit is a file pointed to by CLUSTER enviroment variable. It's just a list of cluster nodes.
GROUP:shells shellium.org another.free.shell.isp GROUP:work work.machine1 work.machine2 LUMP:all shells work
Scripting
The following script will compress ~/private directory, encrypt it and copy all files to your cluster. After this "make" command will be executed on all cluster nodes.
#!/bin/sh
#
# $Header: $
#
passwd=""
prx=""
prx_type=""
repo="${HOME}/.home"
group=""
node=""
objs="private"
dir="${HOME}"
while getopts p:s:t:r:g:w:o:d:c:h opt; do
case ${opt} in
p) passwd=${OPTARG} ;;
s) prx=${OPTARG} ;;
t) prx_type=${OPTARG} ;;
r) repo=${OPTARG} ;;
g) group=${OPTARG} ;;
w) node=${OPTARG} ;;
o) objs=${OPTARG} ;;
d) dir=${OPTARG} ;;
c) CLUSTER=${OPTARG} ;;
h) echo backup data and sync configs with clusterit tool:
echo http://www.garbled.net/clusterit.html
exit 0 ;;
*)
esac
done
CLUSTER=${CLUSTER:-"${HOME}/.cluster"}
if [ "${passwd}" = "" ]; then
echo -n 'Password: '
read passwd
fi
if [ "${prx}" = "" ]; then
RCMD_CMD=${RCMD_CMD:-"ssh"}
RCP_CMD=${RCP_CMD:-"scp"}
else
RCMD_CMD="ssh -o ProxyCommand='nc -X ${prx_type} -x ${prx} %h %p'"
RCP_CMD="scp -o ProxyCommand='nc -X ${prx_type} -x ${prx} %h %p'"
fi
cd ${dir}
echo compressing...
for obj in ${objs}; do
tar czf ${repo}/${obj}.tar.gz ${obj}
done
cd ${repo}
echo encrypting...
: > CHECKSUM
for obj in ${objs}; do
openssl bf -a -k ${passwd} -in ${obj}.tar.gz -out ${obj}.tar.gz.bf64
rm -rf ${obj}.tar.gz
openssl md5 -c ${obj}.tar.gz.bf64 >> CHECKSUM
openssl sha1 -c ${obj}.tar.gz.bf64 >> CHECKSUM
chmod 600 ${obj}.tar.gz.bf64
done
chmod 600 CHECKSUM
echo Total size: `du -sh ${repo} | cut -d ' ' -f 1`
if [ "${group}" != "" ]; then
group="-g ${group}"
fi
if [ "${node}" != "" ]; then
node="-w ${node}"
fi
echo ClusterIt!
pcp -c -r ${group} ${node} `ls -a ${repo} | awk '! /^(.|..)$/ { print "'${repo}'/" $1 }'` .
dsh ${group} ${node} make
# # if you don't have ClusterIt...
#
# for host in `...`; do
# scp -r ${repo}/ ${host}:. &
# done
#
# wait
#
# for host in `...`; do
# ssh ${host} make &
# done