From 7ec5ddab73855d65555a21873ccf8d2653a22ee6 Mon Sep 17 00:00:00 2001 From: Julien Moutinho Date: Tue, 24 Sep 2013 21:24:58 +0200 Subject: [PATCH] Ajout : remote/duplicity . --- README | 4 ++++ remote/backup-fetch | 9 ++++++--- remote/duplicity | 33 +++++++++++++++++++++++++++++++++ remote/duplicity-key-send | 26 ++++++++++++-------------- remote/gpg | 2 ++ remote/gpg-preset-passphrase | 34 ++++++++++++++++++++++++++++++++++ var/pub/openpgp/pubring.gpg | Bin 18689 -> 26757 bytes var/pub/openpgp/pubring.gpg~ | Bin 18689 -> 26757 bytes var/pub/openpgp/trustdb.gpg | Bin 1760 -> 1880 bytes 9 files changed, 91 insertions(+), 17 deletions(-) create mode 100755 remote/duplicity create mode 100755 remote/gpg-preset-passphrase diff --git a/README b/README index efd9e72..2d49c6f 100644 --- a/README +++ b/README @@ -71,3 +71,7 @@ TASK: configurer un membre du groupe php5-fpm @local % local/runit-configure nginx -- lhc_www TASK: configurer un site nginx @local % local/runit-configure nginx -- lhc_www +TASK: instancier une sauvegarde duplicity sur une machine distante + @remote % name=mysql/test # NOTE: à adapter + @remote % remote/backup-fetch "$name" # NOTE: conserve les fichiers disparus ou modifiés dans var/backup/old/$(date +'%Y%m%d+%H%M%S%z')/ + @remote % remote/duplicity restore --time "7D" --name "$name" file://var/backup/current/data/"$name" var/backup/current/restore/"$name" diff --git a/remote/backup-fetch b/remote/backup-fetch index b8c5ccd..b888830 100755 --- a/remote/backup-fetch +++ b/remote/backup-fetch @@ -9,10 +9,10 @@ path=${1-}; test ! "${1+set}" || shift date=${date:-$(date +'%Y%m%d+%H%M%S%z')} mkdir -p \ "$tool"/var/backup/current \ - "$tool"/var/backup/"$date" + "$tool"/var/backup/old/"$date" rsync \ --backup \ - --backup-dir ../"$date" \ + --backup-dir ../old/"$date" \ --compress-level=0 \ --delete \ --delete-during \ @@ -22,8 +22,11 @@ rsync \ --partial \ ${TRACE:+--progress} \ --recursive \ + --relative \ --rsh "$tool/remote/ssh -o Compression=no" \ --times \ "$@" \ - backup@"$local_fqdn":data/"$path" \ + backup@"$local_fqdn":data/"$path" :archive/"$path" \ "$tool"/var/backup/current +#rmdir --ignore-fail-on-non-empty \ +# "$tool"/var/backup/old/"$date" diff --git a/remote/duplicity b/remote/duplicity new file mode 100755 index 0000000..621dc2d --- /dev/null +++ b/remote/duplicity @@ -0,0 +1,33 @@ +#!/bin/sh -eu +# SYNTAX: $duplicity_options +# DESCRIPTION: encapsuleur de duplicity(1) préchargeant sa clef OpenPGP. +tool=$(readlink -e "${0%/*}/..") +. "$tool"/remote/lib.sh + +uid=backup+"$local_hostname"@"$local_domainname" +trap_exit () { + errno=$? + "$tool"/remote/gpg-preset-passphrase --forget "$uid" + exit $errno + } +trap trap_exit EXIT +"$tool"/remote/gpg-preset-passphrase --preset "$uid" + +while IFS=: read -r type trust size algo keyid date x x x x x cap x + do case $type,$cap in + (sub,e) encrypt_key=${keyid#????????};; + (sub,s) sign_key=$keyid;; + esac done <<-EOF + $("$tool"/remote/gpg --list-public-keys --with-colons -- "$uid") + EOF + +/usr/bin/duplicity \ + --archive-dir "$tool"/var/backup/current/archive \ + --gpg-options --homedir="$tool"/var/pub/openpgp \ + --gpg-options --trusted-key="$sign_key" \ + --gpg-options --no-permission-warning \ + --encrypt-key "$encrypt_key" \ + --sign-key "${sign_key#????????}" \ + --use-agent \ + -vw ${TRACE:+--verbosity info} \ + "$@" diff --git a/remote/duplicity-key-send b/remote/duplicity-key-send index c576ec9..86290bd 100755 --- a/remote/duplicity-key-send +++ b/remote/duplicity-key-send @@ -1,19 +1,17 @@ #!/bin/sh -eu +# SYNTAX: +# DESCRIPTION: envoie sur $local_fqdn la clef OpenPGP utilisée par duplicity(1). tool=$(readlink -e "${0%/*}/..") . "$tool"/remote/lib.sh -PATH=/usr/lib/gnupg2:"$PATH" +uid=backup+"$local_hostname"@"$local_domainname" +trap_exit () { + "$tool"/remote/gpg-preset-passphrase --forget "$uid" + } +trap trap_exit EXIT +"$tool"/remote/gpg-preset-passphrase --preset "$uid" -IFS= read -r pass <<-EOF - $(gpg --decrypt "$tool"/var/sec/openpgp/backup+"$local_hostname"@"$local_domainname".pass.gpg) - EOF -for fpr in $("$tool"/remote/gpg --list-secret-keys --with-colons --with-fingerprint --with-fingerprint \ - -- "backup+$local_hostname@$local_domainname" | grep '^fpr:' | cut -d : -f 10) - do gpg-preset-passphrase --preset -v $fpr <<-EOF - $pass - EOF - done - -"$tool"/remote/gpg --export-options export-reset-subkey-passwd \ - --export-secret-subkeys "backup+$local_hostname@$local_domainname" | -"$tool"/remote/ssh backup@$local_fqdn gpg --import - +"$tool"/remote/gpg \ + --export-options export-reset-subkey-passwd \ + --export-secret-subkeys "$uid" | +"$tool"/remote/ssh backup@"$local_fqdn" gpg --import - diff --git a/remote/gpg b/remote/gpg index 0c5e0a7..c0b67d3 100755 --- a/remote/gpg +++ b/remote/gpg @@ -1,4 +1,6 @@ #!/bin/sh -eu +# SYNTAX: $gpg_options +# DESCRIPTION: encapsuleur de gpg(1) utilisant une configuration propre. tool=$(readlink -e "${0%/*}/..") . "$tool"/remote/lib.sh diff --git a/remote/gpg-preset-passphrase b/remote/gpg-preset-passphrase new file mode 100755 index 0000000..36e9fd1 --- /dev/null +++ b/remote/gpg-preset-passphrase @@ -0,0 +1,34 @@ +#!/bin/sh -eu +# SYNTAX: [--forget|--preset] $uid_email [...] +# DESCRIPTION: encapsuleur de gpg-preset-passphrase(1) facilitant son usage. +# XXX: il faut que gpg-agent(1) soit configuré avec allow-preset-passphrase. +tool=$(readlink -e "${0%/*}/..") +. "$tool"/remote/lib.sh + +if ! grep -Fqx allow-preset-passphrase $HOME/.gnupg/gpg-agent.conf && + ! pgrep -fx >/dev/null '.*gpg-agent .*--allow-preset-passphrase.*' + then + cat >&2 <<-EOF + ${tput_rev-}WARNING${tput_sgr0-}: you MUST configure gpg-agent(1) with allow-preset-passphrase. + EOF + #exit 1 + fi + +command=$1; shift +PATH=/usr/lib/gnupg2:"$PATH" +for uid in "$@" + do + pass_file="$tool"/var/sec/openpgp/"$uid".pass.gpg + test -e "$pass_file" + + IFS= read -r pass <<-EOF + $(gpg --decrypt "$pass_file") + EOF + for fpr in $("$tool"/remote/gpg --list-secret-keys \ + --with-colons --with-fingerprint --with-fingerprint \ + -- "$@" | grep '^fpr:' | cut -d : -f 10) + do gpg-preset-passphrase $command ${TRACE:+--verbose} $fpr <<-EOF + $pass + EOF + done + done diff --git a/var/pub/openpgp/pubring.gpg b/var/pub/openpgp/pubring.gpg index 1183b3aeffead5be401e72cd4bc964208140a494..c39d97df7ad381e676b7fc4438ec397ee656e38b 100644 GIT binary patch delta 6877 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 diff --git a/var/pub/openpgp/pubring.gpg~ b/var/pub/openpgp/pubring.gpg~ index 1183b3aeffead5be401e72cd4bc964208140a494..c39d97df7ad381e676b7fc4438ec397ee656e38b 100644 GIT binary patch delta 6877 zcmb8z1y3Dnm@Qz~Nb!xkYjOAD?(Xgs*P>)aPHr+cGk22t z319MLy=#2|36LQ(khNLRR1pAEXbeaM2zdYj6f7b<+$SgiEEXI99sv;=8vq3fAch3s z_$TImq6Vpeo2g*n;md2}ArRnEXLKKKt&V6jUmJk$oH-z-OvShz*o9191iT~gFrPde z58mliM@A?ka;Bey%P4_UXK!sIMyCD=+YH`CnCU4y^W+UQeX<{MY30gG1+oMe0ekZB zLgsbqJGay*n|MULe=1h_t8GgjRcq8!G(}6KB530NY*z;8>n@pFl6M-hA=3e$Hi?+o zPD?n8R{YExWNW=oxG4BXFpNVqJ7S+KM>pmvS)qd(vQqz+x*r0IJjN$ioy4qcmcS}h zfm*BO1IUK9)Vqk};f~>af0sKNjgWX8F@Z8F+A?k^CHGiMK%)Y&G4>04V1ZMz!~y|} z4a9Vd7|Zph!cYSz(XO1Lk-`7Y2Ls}S#w^gs;SXyj!6umF7OE$f8H14Zj61*MN+_M8 z4Q8rwevI@>_;DQZ{H-pbv7K;bivbOus^3_Kxl{o%=k)k%3&ce^m4!&?h2vr~Ccaex z19p}ETY?tqjCy`B@-pR?FYIDJ{T0)}l30`pvslskgWMY$IzPV^V(II5F68Iqx&mZO49fWG zh|zV~Bh47Pk{=2&y8WhQ@flUf+?CaZHkFQ6wEzgHMyf;;Aa+9|v?t(y=ZgBjx>B75 zeyA_)8qT)~OWYg`Uf?Y3Cl2M^@%0U+-A}1*1?tFi+`sgjP1_zJ3VQAe8FrMcz3suX zPzpZIq3_mN>scU^Di6~Ub@nCY-t@ZVswE8e^}%7Gy^7SP&sIg*FnJ@hb%9;cj>SQ1 z9Lv9JuvhCT_?jace=yY~H0W{r+umpke+hV4e5(aBSj=Ko(^kt0LwyvGKd-R==I~Kx zAw8nK##{N_P6uz;L9;5niUqpHZr&R^VC(4KPy|iKm~xzN$gaMEYd)Ml$GpY05L>wb zBPNRDm!*|~(5X>=l+lyDLH2DvCKI6BDVV73m=Cdq8~2;wC&=%F2W|v{JUl7e{463J z6_d(e;69^=X1}pBhyZ{c^=;w!fC)UfiTdBDrSbQT6d2X~y#26iRN?qpVbIKG0HLwHpjq#TOT-RFAu`Y_w$}g|bFE4+ zOei@4MdVx*oPIlmtwiwm?bL+BU|WvB_VeG zvDbB_)Sg=WXK^WVMs`;NS1$L^Fd1hh@yeE=vrUx@y0`#zkSL`fmvGM8ozV0A^|DX? z;Qdj55{zuR`k1orslkdnB5y@0jB01`=TFx-zBO$|Vvv?Uzmf+JjiviImVLC!G2>rX z#D86hf64_U%760yH;MimF_Aw}A$m*wbQ!p}K#9;fuAiL0k==!mde`fHb1S-&HV?RO z;g#~9E6-(&)QjUEg8;=IT#7j>bs@*1d=WslQSp)tE=<$vt9M`LDp6{m)_bHw^?7ZT*UVC2v?2m7eAFE1W-Z(H$&KdK ze5L3S)*{a6=-9|`y?C4+A-J40`M^?p>IdiRNcwqwFKF^IO=W5E0e+$9;^v~0^60cx zo0)FSax-QaDIS>@@vf-+)}crn+DHzpX87d4!Mf7bsw)%oYy((7%oqoXMPG?jyZ^e9r+7_(VYGkVI93kcGDFA2Vcbn=TBQm*9+2CH`dH59WZvm<^Hm@Z@!9nb zcP&Fx6M50XCI4`{nBY-76Ap${mYr3=3k1y%&%1^CSiOvz-dk zU6T7~r5U%2Qrnkt=+giqI$@wT7HNp%R3Gb2-NlJC!?eS`CjRSn*- z`CLeoX3C6Uw*6dkB;k+$DozAo%Agm!N=aOGK*44YT7$RY3zgtb34_z!N2|q)!Uk!g zz7qy=Sx2O8kz!8g0r@d%Ty*(_l~aYJ^qnmu&3`N2kallBig>h3MR4tq{XrG%BGnN< zlld-IQaWSat{Sg0za-&OI+|nz&gTwvO z&#G4-G3Ss$Q9J`z7|v~m&BK$Y14gdtl+$0x0L-UY_HPbp9p_<=n$>51%6nT zgu#MY(S2CNB*VckTyuEBEb!0+cQ|{QfrG|N+SgB)<~y=mRdUgBb}yodRaMBr#{Bq^ z=3OKZkelhy@ciYZrKI9^?x)JQN{3%!9q}HMYosKzF73Xb8%Y*Ertb5b1yksQGPP$* zbiSE@4C(u~iTr~V8RALJ$y+zZw-B|s3^j{uEaZy;f=ai%N2LLf#cFgfPV{GlQuQ~o zQumo7(Nhg<;%j!>&?uNG$Wgk4&qxn|7EuC1BaLKC%s`fF1khY8J>W{PwQ+1lOjP|Y z`Dd4u79W{P_lnZMefu)A7Lhr~E|;*$f&|J&pIa0Wy=tJ9FW|W%PM1CA92Z_8>OG`) zs!ilec*mcp-kFE=5BsOA9y|Scd#`LGP24VD6wfF$G&1MHt-O=^M?;+ex?^(mqHP2c zavzIUcAG;o!?_NId&l}Yutm_?7K*_1U|K2-EF_%fSA3?EmcY>%L7^v5IfgRKS51ub zC^Ty+@MFA?ZIL^!^sBY;2y2$C-b77Gt!nKR6qNWA^(WcDP^k_OZL?L-17qe7E?tiF zqsgzu5ON$QCTaFD&`@nr!{b*ZDwxOLFZK;OJ~F6AQOP0dg)waOf5)YC&#bpvhCp|J zRbszrq`+_|`oPs&bF9#%o$BZJYiY1bl{*HOy{X|@4LdXf_{2!6 zq&f_g{Y%{Xly--+h(=TGYdwTedvTE0DnDU)3z97~y(zI=_&QRKlm_9`X8Z;0Y& zf(tA_IRBR(JD6aoTE!?$UK~5Q3 zq?F0bBYacIJ1q>+Scu=9DnDTPW=H9d$l`?#`$6muwZwmH-#ozJHuVG+6Yp0?XD5 zr2M-lTfjc5TviR$F4I?~V2eGB zmmbq<$1><2_vPCczNRihbcX%~65MNlX~ecruCk%sn8qBo57+j7whl{UKWxRkIB3nv zpM^n%M22`{(1wq=+Zgo8(z}u1vBP*wV%yTgxf~ybKOY^c)h&t)Gub2=8!{&RHOXrt zi=+Mx1n7%^L?!g#|4&odbVP;dI3Mwq1}_2pyE-N=;FWHWig9_ZJOsicX>&WrV)sW6 z7x%jNQD$pQzs!I287+r&^S&@&NMm3lR?&QCbYwkH-b0#(G z_()+DlyO)L9euL!H#rGF23?&@WRm_iuV_iZ7aoEDCPjO8(`5Z#q>N%jD}56Y^z*cF z+4d=r%Rq09f6&3R)ZFS7fpguQuS{X^_+lzD#gFVUV_Bc{RIg*GF@v2*7d`ylg;?!c4I!RFI# zVeHBaqF8Fdj#++qJm{;)tiON~67Bo1EawZ>eD_63PHpia=M+QR?zS&nmhSB$5Xiw+ zU(7>3K_=j|>7olu&mi$&5{@u3n#JWan0KM0?PckZ^Sl*FAGAOexTJ zGzh&hk zV;9!YaM~I$*f14l7hmH0gCLiVnVur-kM;<;nR3CWr{pOj5_gvT%x+@h_hMxIyC_M@ z9#Ad(IL)McUE4qJk#W5YSVn2o8nRV^l}QkZET>F2*jd^MSe<&s2h)$1nyS-7l9f=g3L&H)LJF@{uy=y2X0Irq%i9MZeeV7$oB z_&R0p;j9`I=|CRh$uT9rZ zJETX0Ndz%Wa)EG)m3lyE6rP4dFlsS7E>OkN3 zsgSxOIngv&g>bEwV7UR3KZJKm=Y0E|UrwvP*2mkr4!E(A6iCy5~_+>_`HB$<* z4hwB$9;#ZF*@XPiKnGM`5FLT0RM$CqRUv=H`8?qBSXGA4sCO{O8-^^cDBP}0zO~IJ ztkB0IdvV<3#2hQ@#;Sk))N%yk0UYY9O9{pZg*^Ze3j^>mlgtc) zYzrd<*mkw_^|e(tzX?hcm?YG0o&=cFn&c4EoptfnB1;){5SKoGn@&6H^=-1`!6%+` zUKiiF-R_>1sSa$75|Za$w-!Snkxz=}v+B3e$xr=ZT@lw5XA2g&he+#GtBwA~7n5NtIZ~3|+?a{PgG-qVMwKDje9i z^lfrvIU_@Q$x&b@x?4_CKfw|mcazF zvWW$ut{6rZ1@T+zzNdXDfk+{f`~-vwd}-3vkyQZ}P?E-Ao;Pl|0iUrj5ectdrZVQ` z$8v)aL+Njq>zruB(EtUv&#`LJj2Rz|0-wwxJ*qY$g(7azSn|Li?d8GZe`A`o;1Scc5KRXP&(iFU6}tdf1| z>Pnyd%0$nHTtXP7JP4$^ObMM3yj8(OYO(%+%TQXfhg-Na@zpgtkZgD)5{3pv0I2@26{Npb z4F0u}m-C+w7`7zvo$k^wY1_r2N^a#+=r!D#8Z%u*A7C>K)llON(1 zE0J@2)-BGHc^^&EwPey+rq#zCw^IUBmUN#4SJU^bMu9teJ1ZJVptQCoZcFFLrm;m4 zWA3hboAd)+w%EcV=pgw*KV4w!&qU8N3ktZo;{PP3|^b1I&viw^rM~Ln?!r1Y^+j-RAlXOZ0ueKsmRK_3H zUzT8=r5XQm#kq(mC#ND=;Dge2yJnY`PWFKh*jOf9I&WHocdsrYKwQ#1VmiM*ire&j zSQNhCfm;ji_#P;R!@xFmDk{IQUq|b~xsE>OJAe!xxQT(x^lhVeSz`_WS<7U0pM`U> z-Ipr1A+n}0{>;0#-SmwBSkrnZjT2QKC3-f^xm|9%tsYC7Zw!>F>0Q0ON!$yjTf-y} z>PlEh8#X3TidxZrr=y}J1#%eeS-Xz2C7}upYvQ69!Mw-|e?J0Ovn{Byc1I=*CU&CS z*?=8e^!@as4AD&h=Pz6gIWtp-0Vp%6KoRATMPUzY3n_eB`;(smm%_9`bkrU?v$$Qk z>R$c&=p1(J4IJeEuNcz5V$}W>QG}WOJ;u2u??gi^U&-Fdo_8{Kpj=sqbDDs~`0&u27vJOZRZ8 zmrTWrj2LO*&3NBsX}s2_cD%-YT^kom#miXZ4XLOG^Z8U|j#XxWPFV}1Op|jj2Gm2~ zi2V@CKS!|>=JXSy)oc9N+0u)}Eikaf+6f$jZqE-PQ(5~lAd^H$93y;=nqR!dt{j`+QbIcFqG(u7pq5q z8m#m6I)XK{tq5HS4sz07BF;jvRYF(s6(Y=rbr=vk^%$Xp1PwTvrk|LZ<_4pqc+l*% z!!g{-7mD@eL3ly7;$96yrrYaX<@wPL-`bV83o|MLhJuL-xb!5~RzmSw6xSURNS$}u z@%!C$4}+Y}9P=DY-lpg-V`u%ohDJ24myY!xXKb++@#bRbcwJx1fnO;q>b1dJ$(`~* z<%h^_GCX)H4DQEQ|L1iHyQxk})EL!2AroXex$>93$YTz44z{-X92ZD j>vc(3h#Lm@*Q0I{^j&gC^>f|F*CIL@m*9;B_LlP d#DAcc!L(UPubXYNhNTV5<_Y#d;)iRm5&%A;8=C+C diff --git a/var/pub/openpgp/trustdb.gpg b/var/pub/openpgp/trustdb.gpg index a7cb8180122fb25bb7be93e74bd52d48f786b439..06d643f30d83443ef53e6672a6a1615bc1f28df2 100644 GIT binary patch delta 167 zcmaFBdxKAeF})z2nUxU;7#M;aAH59SCM!MBPWi2rI