SSH üzerinden Eclipse ile uzak bir projede çalışın


192

Aşağıdaki kutular var:

  1. Eclipse CDT içeren bir Windows kutusu,
  2. Yalnızca SSH aracılığıyla erişilebilen bir Linux kutusu.

Hem derleyici hem de projemi oluşturmak ve çalıştırmak için gerekli donanım sadece B makinesinde.

Eclipse CDT kullanarak bu projedeki bir Windows kutusundan "şeffaf" olarak çalışmak ve IDE içinden projeyi uzaktan oluşturmak, çalıştırmak ve hata ayıklamak mümkün.

Bunu nasıl kurarım:

  • Bina çalışacak mı? rsyncProjeyi yerel bir makefile yazmaktan ve daha sonra asıl yapıyı başlatmak için uzak bir makefile çağırmaktan daha basit çözümler var mı? Eclipse yönetilen derlemenin bunun için bir özelliği var mı?
  • Hata ayıklama işe yarayacak mı?
  • Tercihen - Eclipse CDT kodu indeksleme işe yarayacak mı? Gerekli tüm başlık dosyalarını makine B'den makine A'ya kopyalamam ve yolu manuel olarak eklemek için eklemem gerekir mi?

4
Kos, RSE'yi kullandın mı? Deneyiminiz nasıldı?
Aleksandr Levchuk

2
Bunu yapmayı başardım, ancak: a) CDT'nin sanal dosya sisteminin farkında olmayla ilgili bazı sorunları vardı (AFAIK bu geçici bir sorundur ve bazı şeyleri daha yeni bir API'ye yeniden yazdıklarında ortadan kaybolacaktır; belki de zaten? IDK) ve b) Kendi derleme zincirimi (özel bir makefile aracılığıyla) rulo yapmak zorunda kaldım ve c) hoş olmayan bir sıkıntı dosya kaydetme işlemi 2 ~ 3 saniye sürdü ve bu rahatsız ediciydi.
Kos

1
Bugün tekrar uzaktan çalışmam gerekirse, muhtemelen RSE ile başka bir dönüş yapacağım, ancak yerel bir proje olarak tutmak ve özel bir inşa sistemi oluşturmak rsyncgibi daha uygun olabilir. bahsettiniz.
Kos

2
Ne yazık ki, uzak kütüphane başlıklarının uzaktan hata ayıklamasını veya dizine eklenmesini ayarlayamadım. İkincisinin bile yapılabileceğinden şüpheliyim. Birincisi - yapabileceğimden olumluyum, ama gerçekten kazma ihtiyacım yoktu.
Kos

Uzak makineme önce bir oturum açma sunucusuna giriş yapıp sonra oradan uzak makineme giriş yaparak erişiyorum. Her ikisinin de farklı parolaları vardır. Eclipse'de böyle bir uzak makinede çalışmanın bir yolu var mı?
Arjun'un J Rao

Yanıtlar:


219

Uzak Sistem Gezgini'ni (RSE) deneyin . Tam olarak ne istediğinizi yapmak için bir dizi eklenti.

Mevcut Eclipse kurulumunuza RSE zaten dahil edilmiş olabilir. Eclipse Indigo içinde kontrol etmek gidin Window > Aç Perspektif > Diğer ... ve seçim Uzaktan Sistemi Explorer dan Açık Perspektif RSE perspektifini açmak için diyalog.

Eclipse'deki RSE perspektifinden bir SSH uzak projesi oluşturmak için:

  1. Yeni bir bağlantı tanımlayın ve Yeni Bağlantı iletişim kutusundaki Uzak Sistem Türünü Seç ekranından Yalnızca SSH'yi seçin.
  2. Bağlantı bilgilerini girin ve Son'u seçin.
  3. Yeni ana bilgisayara bağlanın. (SSH anahtarlarının zaten ayarlanmış olduğunu varsayar.)
  4. Bağlandıktan sonra, ana bilgisayarın Sftp Dosyalarına inin , bir klasör seçin ve öğenin içerik menüsünden Uzak Proje Oluştur'u seçin. (Uzak proje oluşturulurken bekleyin.)

Doğru şekilde yapılırsa, artık Proje Gezgini'nden ve tutulma içindeki diğer perspektiflerden erişilebilen yeni bir uzak proje olmalıdır. SSH bağlantı kurulumu ile şifreler normal SSH kimlik doğrulama işleminin isteğe bağlı bir parçası haline getirilebilir. SSH üzerinden Eclipse ile uzak bir proje oluşturuldu.


2
RSE hala zor. RSE'nin en iyi fikri Eclipse'in her şeyi bir SSH bağlantısı üzerinden yapmasıdır, ancak bu özellik henüz çalışmıyor. Çalışma özelliği, Linux kutusunda ayarlamanız gereken bazı sunucuları içerir.
Ioan

2
Ayrıca RSE'li adamlar hata / geliştirme raporları almayı sever.
Aaron Digulla

2
@Aaron - Bu rsync çözümünü daha önce bir Makefile'den denedim - temel olarak anahtar dizinizi bir Ctrl + B ile değiştirecekti. Sorun şu ki, bu yaklaşımla Eclipse'den ne çalışabilir ne de hata ayıklayabilirim. RSE gerçekten işten iyi bir araç gibi geliyor; @Ioan, neyin çalışmadığını açıklayabilir misin? RSE wiki, SSH dosya sistemlerini ve uzaktan hata ayıklamayı geçerli bir özellik olarak listeliyor gibi görünüyor ... Yoksa sadece bu Pazartesi günü deneyeceğim.
Kos

3
@AaronDigulla Merhaba, çözüm harika, ama uzak projeyi oluştururken Eclipse'nin yerel olarak derlemeye çalıştığını buldum. Uzak makinede derlenip çalışmasına izin verecek bir şey var mı?
shaoyl85

1
C / C ++ indeksleme RSE ile düzgün çalışmıyor. Dizin oluşturucu eksik sembollerden şikayetçi. Proje ve kaynak dosyalar yerel olarak depolandığında iyi çalışır ancak RSE ile çalışmaz. herhangi bir fikir?
Black_Zero

12

En basit yol Eclipse CDT'yi Linux Box üzerinde çalıştırmak ve X11-Forwarding ya da VNC gibi uzak masaüstü yazılımlarını kullanmaktır.

Bu, elbette, sadece Eclipse Linux kutusunda bulunduğunuzda ve kutuya ağ bağlantınız yeterince hızlı olduğunda mümkündür.

Avantajı, her şeyin yerel olması nedeniyle senkronizasyon sorunlarınız olmayacağı ve garip platformlar arası sorunların olmamasıdır.

Kutuda tutulma yoksa, linux çalışma dizininizi SMB (veya SSHFS) aracılığıyla paylaşmayı ve Windows makinenizden erişmeyi düşünebilirsiniz, ancak bu biraz kurulum gerektirir.

Her ikisi de, özellikle çapraz platform olduğunda, iki kopyaya sahip olmaktan daha iyi olurdu.


1
Korkarım linux kutusunda X11 bile yok. :)
Kos

2
@Kos, sanal bir makinede bir Linux veya Windows için bir X11 sunucusu ile fiziksel olarak oturduğunuz yerde çalışmak için X11 sunucusuna ve Linux sunucusunda çalışmak için Eclipse'e ihtiyacınız var. ssh sadece ağ verilerinin tünellemesine izin verir - deneyime yardımcı olmak için sıkıştırma + "-c blowfish" bulacaksınız.
Thorbjørn Ravn Andersen

Sadece açıklığa kavuşturmak için - uzak makinede "başsız Tutulma" denen şeyden mi bahsediyorsunuz? (Eh, Java bile varsa :)). Hafif bir istemci tarafı çözümü arıyordum, ancak uzak makinede bazı ayarlara sahip olmak da bir seçenek olabilir.
Kos

7
@Kos: Hayır. X11 şu şekilde çalışır: Bir istemciniz ve bir sunucunuz var. Sunucu, monitörün bağlı olduğu yerdir. Tüm oluşturma ve görüntüleme yapar. İstemci (bu durumda Eclipse) sunucuya yalnızca oluşturma komutları gönderir. Yani X11'i Windows'a yüklemeli ve Eclipse'yi Linux kutunuzda çalıştırmalısınız. Linux'ta yapmanız gereken tek şey, DISPLAYEclipse'in sunucunun nerede olduğunu bilmesi için değişkeni ayarlamaktır .
Aaron Digulla

5
Ağın hızlı olması gerekiyor ve sunucunuz da öyle, ya da Eclipse gerçekten yavaş çalışacak.
mattalxndr

6

Ben kendimi aynı noktadayım (ya da öyleydim), FWIW Linux ana bilgisayarında bir samba paylaşımına göz attı ve Windows makinesinde yerel olarak notepad ++ ile paylaşan düzenleme yaptım, sonra PuTTY aracılığıyla Linux kutusunda derledim. (Linux ana bilgisayarındaki editörlerin on y / o sürümünü güncellememize izin verilmedi ve Java yoktu, bu yüzden X11 yönlendirmesinden vazgeçtim)

Şimdi ... Modern Linux'u Windows ana bilgisayarımdaki bir VM'de çalıştırıyorum, istediğim tüm araçları (örn. CDT) VM'ye ekliyorum ve sonra RTE'ye benzeyen bir chroot hapishanesi alıyorum.

Bu karmaşık bir çözüm ama karışıma atacağımı düşündüm.


3

Benim çözüm sshfs kullanmak dışında SAMBA ile benzerdir. Uzak sunucumu sshfs ile bağlayın, makefile projemi uzak makinede açın. Oradan git.

Görünüşe göre bu şekilde merkür için bir GUI ön ucu çalıştırabilirim.

Uzaktan kodumu oluşturmak şu kadar basit: ssh address remote_make_command

Yine de hata ayıklamak için iyi bir yol arıyorum. Muhtemelen gdbserver ile mi?


2

Aynı problemi 2 yıl önce yaşadım ve şu şekilde çözdüm:

1) Projelerimi eclipse tarafından yönetilmeyen makefiles ile oluşturuyorum 2) Eclipse içindeki dosyaları düzenlemek için SAMBA bağlantısı kullanıyorum 3) Projeyi oluşturma: Eclipse Linux'a SSH bağlantısı açan bir makefile ile "yerel" bir marka çağırıyor Sunucu. SSH komut satırında Linux ana bilgisayarında yürütülen parametreleri verebilirsiniz. Bu parametre için linux host "gerçek" yapmak çağıran bir makeit.sh kabuk komut dosyası kullanın. Bina için farklı hedefler, linux host üzerindeki yerel makefile -> makeit.sh -> makefile parametrelerine de verebilirsiniz.


Güzel, ama "şeffaf" olarak adlandırılamaz - en azından hata ayıklamaya izin vermez. Ayrıca Samba yerine RSync'e (orijinal sorumu göndermeden önce sahip olduğum) dayanabilir.
Kos

2

Denedim ssh -Xama dayanılmaz derecede yavaştı.

RSE'yi de denedim, ancak bir Makefile ile projenin oluşturulmasını bile desteklemedi ( cevabımı yayınladığımdan beri bunun değiştiği söylendi , ancak bunu denemedim)

NX'in X11 yönlendirmesinden daha hızlı olduğunu okudum, ancak işe yaramadı.

Son olarak, sunucumun X2Go'yu desteklediğini öğrendim (sizinkinde bağlantı yükleme talimatları var). Şimdi sadece şunları yapmak zorunda kaldım:

  • Eclipse'i sunucuya indirip paketinden çıkarın,
  • X2Go'yu yerel makineme ( sudo apt-get install x2goclientUbuntu'ya) yükle ,
  • bağlantıyı yapılandırın (ana bilgisayar, ssh tuşu ile otomatik giriş, Eclipse'i çalıştırmayı seçin).

Her şey sanki bina, hata ayıklama ve kod indeksleme de dahil olmak üzere yerel bir makinede çalışıyordum. Ve belirgin bir gecikme yok.



0

Bu yanıt şu anda yalnızca iki Linux bilgisayar kullanmak için geçerlidir (ya da Mac'te de çalışıyor olabilir mi? - Mac'te test edilmemiş) (birinden diğerine senkronize) çünkü bu senkronizasyon komut dosyasını bash'de yazdım. gitBununla birlikte, sadece bir sargıdır , bu yüzden onu almaktan ve çapraz platform Python çözümüne veya isterseniz bir şeye dönüştürmekten çekinmeyin.


Bu OP'nin sorusunu doğrudan cevaplamıyor, ancak o kadar yakın ki, bu sayfaya giren diğer birçok insanın sorusunu cevaplayacağını garanti ediyorum (benimki, aslında, kendi çözümümü yazmadan önce buraya geldiğim gibi ) Yine de buraya gönderiyorum.

İstiyorum:

  1. hafif bir Linux bilgisayarda Eclipse gibi güçlü bir IDE kullanarak kod geliştirin,
  2. bu kodu ssh ile farklı, daha güçlü bir Linux bilgisayarda oluşturun (komut satırından, Eclipse içinden DEĞİL)

"PC1" kodunu yazdığım ilk bilgisayarı (Kişisel Bilgisayar 1) ve "PC2" kodunu oluşturduğum 2. bilgisayarı arayalım. PC1'den PC2'ye kolayca senkronize etmek için bir araca ihtiyacım var. Denedim rsync, ancak büyük depolar için inanılmaz derecede yavaştı ve tonlarca bant genişliği ve veri aldı.

Peki, nasıl yaparım? Hangi iş akışını kullanmalıyım? Bu soruya da sahipseniz, işte karar verdiğim iş akışı. gitGithub gibi uzak bir depo aracılığıyla PC1'den PC2'ye değişiklikleri otomatik olarak aktarmak için işlemi otomatikleştirmek için bir bash betiği yazdım . Şimdiye kadar çok iyi çalışıyor ve bundan çok memnunum. Benim görüşüme göre çok daha hızlı rsync, daha güvenilir çünkü her PC işlevsel bir git deposunu koruyor ve tüm senkronizasyonu yapmak için çok daha az bant genişliği kullanıyor, bu nedenle tonlarca veri kullanmadan cep telefonu sıcak noktasında kolayca yapılabilir.

Kurmak:

  1. Komut dosyasını PC1'e yükleyin (bu çözüm ~ / bin'in $ PATH değerinde olduğunu varsayar):

    git clone https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles.git
    cd eRCaGuy_dotfiles/useful_scripts
    mkdir -p ~/bin
    ln -s "${PWD}/sync_git_repo_from_pc1_to_pc2.sh" ~/bin/sync_git_repo_from_pc1_to_pc2
    cd ..
    cp -i .sync_git_repo ~/.sync_git_repo
  2. Şimdi yukarıda kopyaladığınız "~ / .sync_git_repo" dosyasını düzenleyin ve parametrelerini durumunuza uyacak şekilde güncelleyin. İçerdiği parametreler şunlardır:

    # The git repo root directory on PC2 where you are syncing your files TO; this dir must *already exist* 
    # and you must have *already `git clone`d* a copy of your git repo into it!
    # - Do NOT use variables such as `$HOME`. Be explicit instead. This is because the variable expansion will 
    #   happen on the local machine when what we need is the variable expansion from the remote machine. Being 
    #   explicit instead just avoids this problem.
    PC2_GIT_REPO_TARGET_DIR="/home/gabriel/dev/eRCaGuy_dotfiles" # explicitly type this out; don't use variables
    
    PC2_SSH_USERNAME="my_username" # explicitly type this out; don't use variables
    PC2_SSH_HOST="my_hostname"     # explicitly type this out; don't use variables
  3. Git hem PC1'de hem de PC2'de senkronize etmek istediğiniz deponuzu klonlayın.

  4. Ssh tuşlarınızın hem PC1 hem de PC2'den uzak depoya itmek ve çekmek için ayarlandığından emin olun. İşte bazı yararlı bağlantılar:
    1. https://help.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh
    2. https://help.github.com/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent
  5. Ssh tuşlarınızın PC1'den PC2'ye ssh olarak ayarlandığından emin olun.
  6. Şimdi cdPC1'deki git repo içindeki herhangi bir dizine gidin ve çalıştırın:

    sync_git_repo_from_pc1_to_pc2
  7. Bu kadar! Yaklaşık 30 saniye sonra her şey sihirli bir şekilde PC1'den PC2'ye senkronize edilecek ve size ne yaptığını ve diskinizde ve hangi bilgisayarda nerede yaptığını söylemek için sürekli baskı çıktısı olacak. Bu da güvenlidir, çünkü taahhüt edilmeyen hiçbir şeyin üzerine yazmaz veya silmez. İlk önce yedekler! Bunun nasıl çalıştığı hakkında daha fazla bilgi edinin.

İşte bu komut dosyasının kullandığı işlem (yani: aslında ne yapıyor)

  1. PC1'den: PC1'de taahhüt edilmemiş değişiklik olup olmadığını kontrol eder. Eğer öyleyse, onları mevcut şube üzerinde geçici bir taahhütte bulunur. Daha sonra onları uzak bir SYNC dalına zorlar. Daha sonra yerel şubede yaptığı geçici taahhüdünü kaldırır, daha sonra komut dosyasını çağırdığınız sırada önceden hazırlanmış olan dosyaları hazırlayarak yerel git repo'sini tam olarak nasıl geri koyar. Sonra, rsyncbetiğin PC2'ye kopyalanması ve sshPC2'ye betiği sadece PC2 şeyler yapmak için özel bir seçenekle çalıştırmasını söyleme çağrısı yapar .
  2. PC2'nin yaptığı şey şudur: cdrepoya girer ve herhangi bir yerel taahhüt edilmemiş değişiklik olup olmadığını kontrol eder . Öyleyse, geçerli daldan çatallanmış yeni bir yedekleme dalı oluşturur (örnek adı: my_branch_SYNC_BAK_20200220-0028hrs-15sec<- YYYYMMDD-HHMMhrs - SSsec olduğuna dikkat edin) ve bu dalda taahhüt edilmeyen değişiklikleri YAPMAK gibi bir tamamlama iletisi ile gerçekleştirir. PC2'DE TAHSİSİZ DEĞİŞİKLİKLER (HEDEF PC / YAPI MAKİNESİ). Şimdi, SYNC şubesini kontrol eder ve yerel makinede yoksa uzak depodan çeker. Ardından, uzak depodaki en son değişiklikleri alır ve yerel SYNC deposunu uzak SYNC deposuyla eşleşmeye zorlamak için sert bir sıfırlama yapar. Buna "sert çekme" diyebilirsiniz. Ancak güvenlidir, çünkü PC2'de yerel olarak sahip olduğumuz taahhüt edilmemiş değişiklikleri zaten yedekledik, bu yüzden hiçbir şey kaybolmuyor!
  3. Bu kadar! Artık komut dosyası sizin için tüm otomatik işlemleri ve işleri gerçekleştirdiğinden, temiz çalışma dizinleri sağlamak zorunda kalmadan PC1'den PC2'ye mükemmel bir kopya ürettiniz! Hızlıdır ve büyük depolarda çok iyi çalışır. Şimdi , depo düzinelerce gigabayt olsa bile ve zamanınız olsa bile, başka bir makinede inşa ederken veya test ederken, seçtiğiniz herhangi bir IDE'yi, gerekirse cep telefonunuzdan bir wifi sıcak noktası üzerinden kolayca kullanmanız için kolay bir mekanizmaya sahipsiniz. ve kaynak kısıtlamalı.

Kaynaklar:

  1. Tüm proje: https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles
    1. Bu proje içinde kaynak kodun kendisinde tonlarca bağlantı ve referans görün.
  2. Dediğim gibi "sert çekme" nasıl yapılır : "git pull" i yerel dosyaların üzerine yazmaya nasıl zorlarım?

İlişkili:

  1. git hareket halindeyken bilgisayarlar arasında veri havuzu senkronizasyonu?
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.