Unison Sync Uygulaması

Başlatan mhmtkrktr, 19 Mayıs 2019 - 16:50:32

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

mhmtkrktr

Unison : Belirli bir dizinin ve dizinin içinde ki dosya içeriğini, başka bir bilgisayarla eşitleme işlemi yapar.

Kendi kullanımımı kolaylaştıran bir betik hazırladım fakat zamanım olmadığı için kurulum betiği oluşturmadım. Takılan olursa zamanım yettiğince yanıtlamaya çalışırım.

Gerekli paketler : "unison" - "openssh" - "zenity" - "nautilus" - "gnome-user-share"

(Gnome masaüstü kurulu ise, unison haricindekiler kurulu olacaktır)
(Burada ki işlemlerin tümü, her iki bilgisayarda da uygulanacak)

sshd servisinin her iki bilgisayarda  "enable" olduğunu doğrulayın

$ systemctl list-unit-files | grep 'sshd.service'

Her iki bilgisayarın IP adresini "Elle" seçeneğini seçerek sabitleyin.

kablolu bağlantı için : $ gnome-control-center network
kablosuz bağlantı için : $ gnome-control-center wifi

Aşağıda yapacağnız işlem ssh üzerinden, iki bilgisayarın birbiriyle şifresiz bağlanabilmesi için,
("ssh-keygen" komutun da "Enter passphrase (empty for no passphrase)" bölümünü boş bırakın ve enter tuşlayın. 2 defa )
("ssh-copy-id" komutu diğer bilgisayarın şifresini isteyebilir. )
(Hangi bilgisayarın A-B olduğu fark etmez, Hangisini A hangisini B yaptığınızı bu işlem bitene kadar bilin yeter.)

A_Bilgisayarından;

$ ssh-keygen -t rsa -b 8192 -o -a 1000 -f ~/.ssh/id_rsa_server
$ ssh-copy-id -i ~/.ssh/id_rsa_server.pub -p 22 B_Bilgisayarının_Kullanıcı_Adı@B_Bilgisayarının_IP_Adresi


B_Bilgisayarından;

$ ssh-keygen -t rsa -b 8192 -o -a 1000 -f ~/.ssh/id_rsa_client
$ ssh-copy-id -i ~/.ssh/id_rsa_client.pub -p 22 A_Bilgisayarının_Kullanıcı_Adı@A_Bilgisayarının_IP_Adresi



cd ~
gedit ~/.unison_ssh.sh

Açılan boş dosyaya aşağıda ki içeriği aktarın ve diyez (###) ile not geçilmiş 3 bölümü bağlanacağınız bilgisayara göre düzenleyin

Alıntı Yap#!/bin/bash

### SSHDIR değişkeninden uygun olanın başında ki diyezi silin
### A_Bilgisayarında iseniz ; SSHDIR=~/.ssh/id_rsa_server
### B_Bilgisayarında iseniz ; SSHDIR=~/.ssh/id_rsa_client
### Uygun olan satırın diyezi seçilmeli ve ikisi birden açılmamalıdır.

#  SSHDIR=~/.ssh/id_rsa_server
#  SSHDIR=~/.ssh/id_rsa_client
 
### REMOTE_USER değişkenini uygun biçimde düzenleyin.
### A_Bilgisayarında iseniz B_Bilgisayarının kullanıcı adı veya tersi.
### Örn: Bağlanılacak bilgisayarın adı 'Xyzh' ise; REMOTE_USER='Xyzh'

  REMOTE_USER='Diğer_bilgisayarın_kullanıcı_adı'

### REMOTE_IP değişkenini uygun biçimde düzenleyin.
### A_Bilgisayarında iseniz B_Bilgisayarının IP adresi veya tersi.
### Örn: Bağlanılacak bilgisayarın IP adresi '192.168.2.33' ise; REMOTE_IP='192.168.2.33'

  REMOTE_IP='Bağlanılacak_Bilgisayarın_IP_Adresi'


###--------------------------------------------------------------------------------------------------

  REMOTE_TARGET="home/${REMOTE_USER}/Paylaşılan"
  LOCAL_TARGET=~/Paylaşılan

  UNISON=$(type -p unison) ; SSH=$(type -p ssh) ; NAUTILUS=$(type -p nautilus)

open_local_target()
{
   LOCK_FILE=$(ls -a "$LOCAL_TARGET" | grep '~lock.*')
   [[ $LOCK_FILE ]] && rm "${LOCAL_TARGET}/${LOCK_FILE}"

   nohup &>/dev/null $NAUTILUS "$LOCAL_TARGET"
  }

unison_sync()
{
   "$UNISON" $1 -sshargs="-p 22 -i $SSHDIR" -batch -auto \
     -confirmbigdel=false "$LOCAL_TARGET" ssh://"${REMOTE_USER}@${REMOTE_IP}//$REMOTE_TARGET"

     STATUS=$?
  }

same_changed()
{
  INFO=$(zenity --question --title="" --extra-button="Ortak dizinleri aç" --cancel-label="Eşitleme yapma" --ok-label="Üzerine yaz" \
  --text '<span foreground="red" font="20">\nUyarı !\n</span>\n\n<i>Her iki dosya da aynı anda değiştirilmiş.. Üzerine yazmayı seçerseniz,\n\nilk değiştirilen dosyada ki değişiklikler silinecek ve son değiştirilen dosya ile eşleştirilecektir</i>' \
  --no-wrap)

     case "${?}+$INFO" in
        0+ ) unison_sync '-prefer newer'
              (( STATUS )) || open_local_target ;;
        
        1+[A-Z-a-z]* ) open_local_target ; sleep 1 ; $NAUTILUS ssh://"${REMOTE_USER}@${REMOTE_IP}//$REMOTE_TARGET" ;;

        1+ ) open_local_target ;;
     esac
  }

  [[ -z $UNISON || -z $SSH || -z $NAUTILUS ]] && exit 1
  [[ -d "$LOCAL_TARGET" ]] || { mkdir "$LOCAL_TARGET" ; open_local_target ; exit ; }
   
  ping -q -c 1 -W 1 "$REMOTE_IP" &>/dev/null

   if (( ! $? )); then
      ssh -q "${REMOTE_USER}@${REMOTE_IP}" exit
      if (( ! $? )); then unison_sync
         if (( STATUS == 0 )) ; then open_local_target ; elif (( STATUS == 1 )) ; then same_changed ; fi
      else
         open_local_target
      fi
   else
      open_local_target
   fi

       exit 0


gedit ~/.local/share/applications/unison_ssh.desktop
Açılan boş dosyaya aşağıda ki içeriği aktarın.
Alıntı Yap[Desktop Entry]
Version=1.0
Type=Application
Name=Paylaşılanlar
Comment=Çalışma dosyalarınızı eşitleyin
Icon=gnome-panel-force-quit
NoDisplay=false
Exec=/home/MYNAME/.unison_ssh.sh
StartupWMClass=Zenity

sed -i "s|MYNAME|$USERNAME|" ~/.local/share/applications/unison_ssh.desktop
chmod +x ~/.unison_ssh.sh


$ gnome-control-center sharing
Açılan pencere de "Dosya paylaşımı" ve "Uzaktan oturum açma" yı aktif duruma getirin.

Artık kullanabilirsiniz. Paylaşılanlar simgesi ilk tıklandığın da,  Paylaşılan adında boş bir dizin oluşur ve dosya yöneticisi burada açılır. İçine aktarlan her dosya, bu başlatıcı kullanılarak açıldığın da, diğer bilgisayarla senkronize edilir.
Unison zaman etiketiyle çalışan bir uygulama. En son hangi tarafta ki dosya değiştirilmişse, onu eski olanla değiştirir. Eğer ssh bağlantısının kurulamadığı bir ortamda her iki dosya da değişiklik yapılmışsa, yapmak istediğiniz işleme dair uyarı (yönerge) penceresi açılacaktır.


Empat

Elinize, emeğinize sağlık.

Yarın deneyip sonuçları aktaracağım.
Everything for me is just Peace - Love - Coding. Also, as they say: I am a programmer, I have no life!