FTP හරහා rsync භාවිතා කරන්නේ කෙසේද


191

ඕනෑම යුනික්ස්:

මා සතුව පහත සඳහන් cmd රේඛාව ඇත.

rsync -avr -e ssh /home/dir user@example.com:/home/

නමුත් මට දැන් එය සැකසිය යුත්තේ දුරස්ථ සේවාදායකයකට rsync කිරීමට නම් එය FTP සේවාදායකයක් පමණක් ඇත. මම ඒ ගැන යන්නේ කෙසේද?

මම rsync උදව් දෙස බැලුවද ඉක්මනින් නැති වී ගියේය (මම බොහෝ විට මෙම දේවල් නොකරමි).


21
මෙය IRC හරහා HTTP භාවිතා කරන්නේ කෙසේද, නැතහොත් SMTP හරහා FTP භාවිතා කරන්නේ කෙසේද යන්න විමසීමට සමාන වේ ...
Juliano

2
සමහර විට ඔබට මෙය කිරීමට අවශ්‍ය වීමට හේතු කිහිපයක් පැහැදිලි කළ හැකිය, එවිට අපට ඔබට සාර්ථක විසඳුමක් ඉදිරිපත් කිරීමට උදව් කළ හැකිය.
ජේම්ස්

1
අත්‍යවශ්‍යයෙන්ම මම හවුල් සත්කාරක සේවාදායකයකින් උපස්ථයක් ස්වයංක්‍රීය කිරීමට උත්සාහ කළ අතර rsync ක්‍රියා කරන්නේ කෙසේදැයි නොතේරුණි. මම දැන් වීපීඑස් වෙත මාරු වී ඇති අතර, තවදුරටත්
අඩිපාරේ


නම් යොදවන ලෙස වන අතර, ඔබේ හිතේ මොකක්ද, ඔබ NodeJS කමක් නැහැ, පරීක්ෂා dploy , කම්මැලි හා GIT සමග හොඳින් ක්රියා
ෆ්රෑන්ක් Nocke

Answers:


81

ඔයා එහෙම කරන්නේ නැහැ. rsync ඔබට එය කළ නොහැක, එය තමන්ගේම ප්‍රොටෝකෝලයක් වන අතර එය FTP හරහා ක්‍රියා නොකරයි.

කෙසේ වෙතත්, ඔබට csync උත්සාහ කිරීමට අවශ්‍ය විය හැකිය . IIRC එය HTTP හරහා rsync වැනි හැසිරීම් සපයයි. එය FTP හරහා ක්‍රියාත්මක වේද යන්න පිළිබඳව මට අදහස් දැක්විය නොහැක, ඔබට එය උත්සාහ කළ යුතුය.


1
Csync වෙබ් පිටුව දෙස බලන විට , එය sftp සඳහා සහය දක්වයි, නමුත් සරල ftp සඳහා සහය දැක්වීම ගැන සඳහනක් නොමැත.
කීත් තොම්සන්

165

අනෙක් අය සඳහන් කර ඇති හේතු නිසා rsync ඔබ වෙනුවෙන් වැඩ කරන්නේ නැත. කෙසේ වෙතත්, lftp සහ ncftp යන දෙකටම "දර්පණ" මාතයන් ඇති අතර ඒවා ඔබගේ අවශ්‍යතා සපුරාලනු ඇත.

මගේ දේශීය නාමාවලියෙන් ftp හෝ sftp වෙබ් සත්කාරක සමාගමකට දේවල් තල්ලු කිරීමට මම මෙය භාවිතා කරමි:

lftp -c "set ftp:list-options -a;
open ftp://user:password@your.ftp.com; 
lcd ./web;
cd /web/public_html;
mirror --reverse --delete --use-cache --verbose --allow-chown  
--allow-suid --no-umask --parallel=2 --exclude-glob .svn"

2
lftp හරිම ලස්සනයි. මම දැන් සොයාගත් තවත් එකක් නම්, wputකලාප පළල සීමා කිරීමයි.
කර්මකේස්

124

ඊසෙල් විසින් ලියා ඇති පරිදි , lftpහොඳ මෙවලමකි.

ස්ක්‍රිප්ට් පරාමිතිකරණය කිරීමට මම ඔබට යෝජනා කරමි

exclude-glob

ඔබගේ කවචයේ ග්ලෝබ් විශේෂාංගය (* ,? ..) භාවිතා කරමින් ගොනු නාමයන් බැහැර කරන විකල්ප:

#!/bin/bash    
HOST="your.ftp.host.dom"
USER="username"
PASS="password"
FTPURL="ftp://$USER:$PASS@$HOST"
LCD="/path/of/your/local/dir"
RCD="/path/of/your/remote/dir"
#DELETE="--delete"
lftp -c "set ftp:list-options -a;
open '$FTPURL';
lcd $LCD;
cd $RCD;
mirror --reverse \
       $DELETE \
       --verbose \
       --exclude-glob a-dir-to-exclude/ \
       --exclude-glob a-file-to-exclude \
       --exclude-glob a-file-group-to-exclude* \
       --exclude-glob other-files-to-exclude"

අවවාදයයි: ඉලක්කගත නාමාවලිය පවතින බවට වග බලා ගන්න, එසේ නොමැති නම් cd විධානය අසමත් වනු ඇත, එබැවින් ලිපිගොනු ගස් මකා දැමීම ඇතුළුව ක්‍රියාකාරිත්වය වැරදි නාමාවලියක (root) සිදු වේ!

මම ස්ක්‍රිප්ට් යාවත්කාලීන කර ඇති අතර එමඟින් එම --deleteවිකල්පය defaut විසින් අක්‍රීය කරනු ලැබේ DELETE= command.


මට ලොකු පොකුරක් උදව් කළා. නමුත් මට "set ftp: list-options -a;" ඉවත් කිරීමට සිදු විය. අවුල් සහගත දේවල්.
mat

1
SFTP (FTPS?) හරහා එකම දේ කරන මේ වගේ දෙයක් තිබේද?
trusktr

1
cd $RCDඅක්ෂර වින්‍යාසය සහිත ස්ක්‍රිප්ට් එකක් වැරදීමකින් වැරදි නාමාවලියෙන් ලිපිගොනු මකා දැමීම වලක්වා ගැනීම සඳහා මම මීට පෙර මෙය කරමි : set cmd:fail-exit yes. ( lftpඔබ ඊළඟ විධානය නිකුත් කරන තුරු එය සැබවින්ම පිටවී ඇති බවක් නොපෙනේ.) - තවද cd $LCDමම මෙය කිරීමට පෙර (දේශීය කවචයේ, එනම් ස්ක්‍රිප්ටයේ ඉහළින්) : set -eu.
කජ්මැග්නස්

3
ඇත්ත වශයෙන්ම, මම පළමු වරට මගේ ස්ක්‍රිප්ට් ධාවනය කරන විට, මම තවමත් දුරස්ථ නාමාවලිය නිර්මාණය කර නොතිබුණි, එබැවින් තිර රචනය එම නොපවතින ඩිරයට සංයුක්ත කිරීමට අසමත් විය. එවිට ස්ක්‍රිප්ට් එක ආරම්භ විය mirror, මේ අනුව --delete: d ගොනු වැරදි dir වෙතින්. (නමුත් මම ඒවා නැවත පිටපත් කළෙමි, එබැවින් එය වැදගත් නොවේ. සමහර විට එය වෙනත් කෙනෙකුට වැදගත් වේ.)
කජ් මැග්නස්

1
'Set -eu' සහ 'cd $ LCD' භාවිතා කිරීම පිළිබඳ ajKajMagnus ගේ උපදෙස් අනුගමනය කිරීම මෙන්ම, 'cd $ LCD' ට පෙර 'mkdir -p $ LCD' එක් කරන්න - එමඟින් ඩිරෙක්ටරිය පවතින බව ඔබට සහතික විය හැකිය. එහි නැවතී සිටින්න.
පෝල් ගියර්

25

ඔබ සැබවින්ම කිරීමට උත්සාහ කරන දේ අනුව, සම්පූර්ණයෙන්ම වෙනස් ප්‍රවේශයක් curlftpsftp ෆෝල්ඩරයක් සවි කිරීම සඳහා භාවිතා කළ හැකිය , පසුව සමහර විට rsync“දේශීය” ෆෝල්ඩර දෙක විය හැකිය .

ඔබේ ඩිස්ට්‍රෝ මත පදනම්ව ස්ථාපනය වෙනස් වන බැවින් මට එය සාමාන්‍යකරණය කළ නොහැක, නමුත් ඔබ ස්ථාපනය කළ යුතු fuseඅතර curlftpfs(ප්‍රොලි ඩෙබියන් දැනටමත් fuseපෙරනිමියෙන් ස්ථාපනය කර ඇත), පසුව:

  1. sudo apt-get install curlftpfs

  2. fuseමොඩියුලය පටවා ඇති බවට වග බලා ගන්න ( modprobe fuse)

  3. sudo curlftpfs ftp.yourserver.com /path/to/ftp/folder/ -o user=username:password,allow_other

අවසාන කොමාවෙන් පසු ඉඩක් නොමැති බව සලකන්න (එය යතුරු ලියනය නොවේ!). ඔබ එයින් සෑහීමකට පත්වේ නම් හෝ සෑම විටම එය කිරීමට අකමැති නම්, ඔබට එය ඔබේ fstab එකට එකතු කළ හැකිය (සාමාන්‍යයෙන් /etc/fstab):

curlftpfs#user:password@ftp.yourserver.com /path/to/ftp/folder/ fuse auto,user,uid=1000,allow_other 0 0

එවැනි අවස්ථාවකදී, ෆියුස් මොඩියුලය මීට පෙර පටවා ඇති බවට ඔබ සහතික විය යුතුය.

කාරණා දෙකක් ගැන උපදෙස් දෙන්න:

  • මීට වසර එකකට හෝ දෙකකට පෙර සංවර්ධකයා විසින් ව්‍යාපෘතිය අතහැර දැමූ බව, එබැවින් දැනට භාවිතා කළ හැකි / ස්ථාවර වන ආකාරය මම නොදනිමි.
  • මුරපදයේ අමුතු චරිතයක් තිබේ නම් curlftpfsඑය අසමත් විය හැකිය (සමහර විට ඔබට එය සමඟ යමක් කළ හැකිය .netrc).

FTP ෆියුස් සහ rsync ප්‍රශ්නයට වඩාත්ම සමීප නමුත් කුඩා ලිපිගොනු කුඩා කට්ටලයක් හැර අන් කිසිවක් ගැන පැහැදිලිවම උමතු ය.
ස්ටීව්-ඕ

1
එය උමතු වන්නේ ඇයි? පෙරනිමියෙන් rsync stat () s, එය අන්තර්ගතය සංසන්දනය නොකරයි. Ftp සේවාදායකයකු සමඟ ls -l විසින් එය කළ හැකිය.
ptman

මම ඇත්ත වශයෙන්ම මෙය උත්සාහ කළෙමි (rsnapshot හරහා) එය ක්‍රියාත්මක වූයේ නැත, සෑම ගොනුවක්ම ආපසු පැමිණ දෝෂයක් ඇතිවිය, rsync හට සබැඳියක් සෑදිය නොහැකි බව පෙන්වයි. එබැවින් rsnapshot සමඟ ඒකාබද්ධව lftp භාවිතා කිරීම උපක්‍රමය විය
කොන්ස්ටන්ටින් පෙරියස්ලොව්

14.04 LTS මත දෝෂ රහිත; අතිරේක ඉඟිය: ඔබගේ FTP අඩවියේ විසන්ධි කිරීමට ඉන්නේ සූදානම් හුදෙක් භාවිතා කරන විට umount DIRඑහිදී DIRඔබේ විය /path/to/ftp/folderඉහත.
ජෝ

1
2017, මෙය තවමත් ක්‍රියාත්මක වේ! අවංකවම FTP වෙබ් අඩවියකින් ලිපිගොනු පිටපත් කිරීමට පහසුම ක්‍රමය. දේශීයව
සවි කරන්න

16

වීක්ස් තියෙනවා ...

Weex යනු වෙබ් පිටුවක් හෝ වෙනත් FTP සංරක්ෂිතයක් දුරස්ථව නඩත්තු කිරීමේ කාර්යය ස්වයංක්‍රීය කිරීම සඳහා නිර්මාණය කර ඇති උපයෝගීතාවයකි. අවශ්‍ය පරිදි උඩුගත කිරීම් සහ දුරස්ථ මකාදැමීම් සිදු කිරීමෙන් එය දේශීය ගොනු සමූහයක් දුරස්ථ සේවාදායකයකට සමමුහුර්ත කරනු ඇත.


2
චාම් වගේ වැඩ! ඔබ එය මේ ආකාරයට ධාවනය කරයි: $ weex yourFTPconfigNameමෙන්න අත්පොත linuxcertif.com/man/1/weex
sobi3ch

9

rsync ftp ට වඩා ක්‍රියා නොකරයි. දුරස්ථ පැත්තෙන් එයට rsync ඩීමන් හෝ ෂෙල් එකක් අවශ්‍ය වේ. Ftp සාමාන්‍යයෙන් ඔබට විධාන කිහිපයක් ඇමතීමට ඉඩ දෙන අතර rsync ඒවායින් එකක් නොවේ. "Lftp" වැනි ftp කාර්යයන් ස්වයංක්‍රීය කිරීම සඳහා අදහස් කරන වෙනත් මෙවලම් තිබේ.


8

මෙය හොඳ සහ නිදහස් සුදුසුකමක් සේ පෙනේ: https://savannah.gnu.org/projects/ftpsync/


1
දුම්දමන ගොඩක් ලබා ෙදන don't-ස්පර්ශ-සමග-a-දහයක අඩි ධ්රැවය සමුදුර සමහර විට ඔබ පහල ලින්ක් යාවත්කාලීන කළ යුතු, මෑතකදී බවට පත් වී තිබේ ව්යාපෘතියේ වෙබ් පිටුවක් .
බලාපොරොත්තු රහිත N00b

7

ඔබ කිරීමට උත්සාහ කරන බව පෙනෙන දේ සඳහා, ඔබට wget ද භාවිතා කළ හැකිය.

wget -m ftp: // username: password@domain.com


එය වෙබ් අඩවියේ කැඩපතක් පමණක් වනු ඇත. ඔබගේ වෙනස් කිරීම් උඩුගත කිරීමට ඔබට මෙය භාවිතා කළ නොහැක.
ඩේවිඩ් වී.

5

Http://linux.die.net/man/1/curlftpfs පසු ඔබට ftp සවි කිරීමට සහ rsync භාවිතා කිරීමට curlftpfs භාවිතා කළ හැකිය.


ServerFault වෙත සාදරයෙන් පිළිගනිමු! මෙය හොඳ ආරම්භයක් විය හැකි නමුත් මෙය වඩා හොඳ ප්‍රවේශයක් වන්නේ ඇයිද යන්න පිළිබඳ තවත් තාක්ෂණික විස්තරයක් සහ එය කරන්නේ කෙසේද යන්න සමච්චලයට ලක් කිරීම සාධාරණ විය හැකිය.
ස්කොට් පැක්

4

මම GVFS / FTP භාවිතා කරමි. මම මගේ දුරස්ථ FTP සේවාදායකයන් ගිගෝලෝ සමඟ සවි කරමි. ඒවා දේශීය නාමාවලි ලෙස දැකිය හැකි බැවින් දේශීය ලිපිගොනු වල වැඩ කරන ඕනෑම දෙයක් පාහේ ක්‍රියාත්මක වේ. rsync නිර්මාණය කර ඇත්තේ ගොනු මාරු කිරීමකින් තොරව ගොනු සංසන්දනය කිරීම සඳහා දුරස්ථව ගොනු හැෂ් ගණනය කිරීම සඳහා ය, නමුත් අථත්‍ය ලිපිගොනු සමඟ එය සිදු කිරීම කෙසේ හෝ ගොනු මාරු කරයි. unison සහ freefilesync සාමාන්‍යයෙන් හොඳින් ක්‍රියාත්මක වන නමුත් ඔබේ උඩුගත කරන ලද ගොනුවක් නැවත නම් කිරීමට ඔවුන්ට අවශ්‍ය වූ විට මට ගැටළුවක් ඇතිවිය, බාගත කිරීමේ ගැටලුවක් නොමැත. මෙය gvfs 1.6.1 සමඟ ගැටළුවක් විය හැකිය.


3

තත්වය අනුව ජොනාස් එස් ගේ විසඳුම ප්‍රයෝජනවත් වේ, නිදසුනක් ලෙස ඔබට ඉහළ බාගත කිරීමේ වේගය සහ මන්දගාමී උඩුගත කිරීමක් තිබේ නම්, අනවශ්‍ය ලෙස ලිපිගොනු උඩුගත කිරීමට වඩා සේවාදායකයේ ගොනු පරීක්ෂා කිරීම සාපේක්ෂව වේගවත් විය හැකිය.

ඔබට බොහෝ විට CurlFTPFS භාවිතා කිරීමට අවශ්‍ය වනු ඇත: http://packages.ubuntu.com/search?suite=default§ion=all&arch=any&searchon=names&keywords=curlftpfs

සාමාන්‍යයෙන්, rsync වෙනුවට සාමාන්‍ය FTP ග්‍රාහකයක් භාවිතා කිරීම වඩා හොඳය.


2

ඔබට මෙය කළ හැකි යැයි මම විශ්වාස නොකරමි, ඔබ රු. සමමුහුර්ත කිරීමට උත්සාහ කරන සේවාදායකයට එෆ්ටීපී සේවාදායකයක් පමණක් ක්‍රියාත්මක වනු ඇත, එය රුයික් විසින් යවන විධානයන් තේරුම් නොගනී.

ඔබට මෙය කිරීමට අවශ්‍ය වන්නේ ඔබට 21 වන වරාය වෙත පමණක් ප්‍රවේශය තිබීම, නමුත් ඔබට සේවාදායකයේ පාලනය තිබේ නම්, ඔබට වරාය වෙනස් කළ හැකිය Rsync සේවාදායකයේ සවන් දෙයි, නමුත් මෙය පැහැදිලිවම ප්‍රයෝජනවත් වන්නේ ඔබ එසේ නොකළහොත් පමණි එම වරායේ FTP භාවිතා කිරීමට අවශ්‍යයි.


2

ඔබට කාර්යය ස්වයංක්‍රීය කිරීමට අවශ්‍ය නම්, සමහර අය ඉහත පළ කර ඇති පරිදි ඔබට ස්ක්‍රිප්ට් එකක් සෑදිය හැකි බැවින් lftp භාවිතා කරන්න, ඔබ එක් වරක් විසඳුමක් සොයන්නේ නම් (ඔබට සම්පූර්ණ වෙබ් අඩවියක් බාගත කිරීම අවශ්‍ය වේ) ftp හරහා / වෙනත් සේවාදායකයකට ගෙන යන්න) ncftp භාවිතා කරන්න, එය සරලයි, එය දැනටමත් ස්ථාපනය කර නොමැති නම් එය ස්ථාපනය කරන්න:

apt-get install ncftp

හෝ

yum install ncftp

(සමාවෙන්න ඩෙබියන් නොවන / රතු තොප්පි පදනම් කරගත් ඩිස්ට්‍රෝස් ..)

ස්ථාපනය කළ පසු, පර්යන්තයේ ncftp විවෘත කර ටයිප් කරන්න:

open -u ftpusername ftp.thedomain.com

එය ඔබෙන් මුරපදය ඉල්ලනු ඇත, එය ඇතුළත් කරන්න, පසුව:

get -R /home/remotewebsite/public_html/ /home/localwebsite/public_html/

ඒකෙන් ඉතිරි කොටස ඔබ වෙනුවෙන් කරන්නම් .. වාසනාව


1

“අඩවි පිටපත්” හෝ “කැඩපත” භාවිතා කිරීමෙන් ඔබට කලාප පළල විශාල ප්‍රමාණයක් ඉතිරි කර ගත හැකිය.

ඔවුන් දෙදෙනාම කාර්යක්ෂම වර්ධක යාවත්කාලීන කිරීම් හසුරුවයි.



1

rclone යනු ftp හරහා ඩිරෙක්ටරි සමමුහුර්තකරණය සහ වලාකුළු ගබඩා සපයන්නන් (ඇමසන් එස් 3, ඩ්‍රොප්බොක්ස්, ගූගල් ඩ්‍රයිව්) ඇතුළු තවත් බොහෝ ප්‍රොටෝකෝලයන් කරන හොඳ මෘදුකාංගයකි. එය දේශීය හෝ දුරස්ථ ආචයනයක සිට / සමමුහුර්ත කළ හැකිය.

දුරස්ථයක් සැකසීමට මෙම උපදෙස්ftp අනුගමනය කරන්න .

එය අවසන් වූ පසු, සමමුහුර්ත කිරීමේ මෙහෙයුම:

rclone sync /home/dir FTP_REMOTE:/home --progress 

0

Wput ද ඇත:

wput --timestamping --reupload --dont-continue source-files ftp://target.host/dir

පරිශීලක නාමය සහ මුරපදය read / .netrc වෙතින් කියවනු ලැබේ. එසේ නොමැතිනම්, ඔබ ආරක්ෂාව ගැන විශේෂයෙන් සැලකිලිමත් නොවන්නේ නම්, ඔබට ඒවා ftp: // username: password@target.host ලෙස සැපයිය හැකිය .


0

මම ඒ සඳහාම විධාන රේඛා මෙවලමක් සාදන ලදී: ftpsync

මන්ද? එය සරල හා අලංකාර බැවින්, වෙනත් මෙවලම් සඳහා බොහෝ පරායත්තතා අවශ්‍ය වේ, සමහර විට සම්පාදනය කරයි, සමහර විට ක්‍රියා නොකරයි (උදා: මැක්ඕස් හයි සියෙරා මත lftp). Ftpsync ලියා ඇත්තේ පිරිසිදු පයිතන් වලිනි, තෙවන පාර්ශවීය ලිබ්ස් අවශ්‍ය නොවන අතර එය කුඩා වේ, ඔබට ඔබේ ව්‍යාපෘතියට ගොනුව ඇතුළත් කළ හැකිය.

භාවිතය: ඔබේ ව්‍යාපෘති නාමාවලියට cd සහ වර්ගය:

ftpsync user:pass@ftp.address.url/remote/dir --delete

--delete දේශීයව නොපවතින දුරස්ථ ලිපිගොනු මකා දැමීම යන්නයි.

ඔබට සමමුහුර්ත කිරීමට අවශ්‍ය නැති නමුත් අමු ftp විධානය භාවිතා කරන්න:

ftpsync -c '...'

ගොනුව යැවීම සහ නැවත නම් කිරීම වැනි සරල මෙහෙයුම් සඳහා එය ප්‍රයෝජනවත් වේ:

ftpsync -c 'PASV; TYPE I; STOR some_file.ext; RNFR some_file.ext; RNTO some_file_renamed.ext'

අනෙක් අය කරන එකම හේතුව නිසා මෙය පැකිලී ගියේය. FTP ප්‍රොටෝකෝලය හරහා හොඳ සමමුහුර්ත කිරීමේ අවශ්‍යතාවයක්. ඔබගේ මෙවලම හොඳ පෙනුමක් ඇත, නමුත් මට එය භාවිතා කිරීමට නොහැකි විය, මන්ද මගේ අවශ්‍යතාවය දුරස්ථයෙන් බාගත කර දේශීය සමඟ සමමුහුර්ත කිරීමයි. දැනටමත් බාගත කර ඇති ගොනු බාගත කිරීමෙන් වැළකී සිටීමට මට අවශ්‍යය. දේශීය වශයෙන් මම බාගත කළ ලිපිගොනු සැකසීමට කටයුතු කරමි. ඊළඟ වතාවේ FTP ස්ක්‍රිප්ට් ක්‍රියාත්මක වන විට එය මඟ හැරිය යුතුය. මේ මොහොතේ විසඳුමක් සොයා ගැනීම දුෂ්කර ය.
anup

ඔව්, ඇත්ත වශයෙන්ම එය එක්-මාර්ග සමමුහුර්තකරණයකි.
superdario128

-7

Sftp ස්ථාපනය කරන්න , එවිට ඔබට rsync භාවිතා කළ හැකිය.

මම පහත දැක්වෙන දේ භාවිතා කරමි.

rsync --delete --times --recursive --perms --owner --group --verbose --progress --stats -e ssh root@192.168.0.100:/folder1/ /folder2/

7
එය FTP නොවේ, එය බොහෝ විට SSH සඳහා අභ්‍යන්තර sftp උප පද්ධතිය භාවිතා කරයි (අවම වශයෙන් එය පෙරනිමි වින්‍යාසය තුළ එය කරයි)
මාටින් එම්.

csync (sftp) සහ rsync එකම ආකාරයකින් ක්‍රියා කළ හැකිය
රාජත්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.