Làm việc trên một dự án từ xa với Eclipse thông qua SSH


192

Tôi có các hộp sau:

  1. Một hộp Windows với CDT Eclipse,
  2. Một hộp Linux, chỉ có thể truy cập đối với tôi thông qua SSH.

Cả trình biên dịch và phần cứng cần thiết để xây dựng và chạy dự án của tôi chỉ có trên máy B.

Tôi muốn làm việc "trong suốt" từ một hộp Windows trong dự án đó bằng CDT Eclipse và có thể xây dựng, chạy và gỡ lỗi dự án từ xa trong IDE.

Làm cách nào để thiết lập:

  • Tòa nhà sẽ hoạt động? Bất kỳ giải pháp đơn giản nào hơn là viết một tệp tạo tệp cục bộ mà rsyncdự án sẽ gọi một tệp tạo tệp từ xa để khởi tạo bản dựng thực tế? Xây dựng được quản lý Eclipse có một tính năng cho điều đó không?
  • Việc gỡ lỗi sẽ hoạt động?
  • Tốt hơn là - lập chỉ mục mã CDT của Eclipse sẽ hoạt động? Tôi có phải sao chép tất cả các tệp tiêu đề bắt buộc từ máy B sang máy A và thêm chúng để bao gồm đường dẫn theo cách thủ công không?

4
Kos, cuối cùng bạn đã sử dụng RSE? Kinh nghiệm của bạn thế nào?
Alexanderr Levchuk

2
Tôi đã quản lý để làm điều đó, nhưng: a) CDT có một số vấn đề với việc nhận thức được hệ thống tệp ảo (AFAIK đây là sự cố tạm thời và sẽ biến mất khi họ viết lại một số thứ cho API mới hơn; có lẽ họ đã làm vậy? IDK) và b) Tôi đã phải triển khai chuỗi biên dịch của riêng mình (thông qua một tệp tùy chỉnh) và c) một sự phiền toái khó chịu - việc lưu tệp mất khoảng 2 ~ 3 giây và điều này thật đáng lo ngại.
Kos

1
Nếu hôm nay tôi cần phải làm việc từ xa một lần nữa, có lẽ tôi sẽ thực hiện một vòng quay khác với RSE, nhưng tôi có thể thấy khả thi hơn khi giữ nó như một dự án địa phương và triển khai một hệ thống xây dựng tùy chỉnh, dựa trên ví dụ rsyncnhư tôi đề cập.
Kos

2
Và thật không may- Tôi đã không quản lý để thiết lập gỡ lỗi từ xa hoặc lập chỉ mục các tiêu đề thư viện từ xa. Tôi nghi ngờ rằng sau này thậm chí có thể được thực hiện. Điều trước đây - tôi khẳng định là có thể, nhưng tôi không thực sự có nhu cầu nghiên cứu về nó.
Kos

Tôi truy cập vào máy từ xa của mình bằng cách đăng nhập vào máy chủ đăng nhập và sau đó đăng nhập từ đó vào máy từ xa. Cả hai đều có mật khẩu khác nhau. Có cách nào để làm việc trên một máy từ xa như vậy trong Eclipse không?
Arjun J Rao

Câu trả lời:


217

Hãy thử Trình khám phá hệ thống từ xa (RSE). Đó là một tập hợp các trình cắm để thực hiện chính xác những gì bạn muốn.

RSE có thể đã được bao gồm trong cài đặt Eclipse hiện tại của bạn. Để kiểm tra trong Indigo Eclipse, đi tới Cửa sổ > Mở phối cảnh > Khác ... và chọn Remote System Explorer từ hộp thoại Mở phối cảnh để mở phối cảnh RSE.

Để tạo một dự án SSH từ xa từ phối cảnh RSE trong Eclipse:

  1. Xác định kết nối mới và chọn Chỉ SSH từ màn hình Chọn Loại hệ thống từ xa trong hộp thoại Kết nối mới.
  2. Nhập thông tin kết nối sau đó chọn Kết thúc.
  3. Kết nối với máy chủ mới. (Giả sử các khóa SSH đã được thiết lập.)
  4. Sau khi kết nối, hãy đi sâu vào Tệp Sftp của máy chủ , chọn thư mục và chọn Tạo dự án từ xa từ menu ngữ cảnh của mục. (Đợi khi dự án từ xa được tạo.)

Nếu được thực hiện chính xác, bây giờ sẽ có một dự án từ xa mới có thể truy cập từ Project Explorer và các phối cảnh khác trong nhật thực. Với kết nối SSH, thiết lập chính xác mật khẩu có thể trở thành một phần tùy chọn của quy trình xác thực SSH thông thường. Một dự án từ xa với Eclipse thông qua SSH hiện được tạo.


2
RSE vẫn còn khó khăn. Ý tưởng tốt nhất từ ​​RSE là để Eclipse thực hiện mọi thứ qua kết nối SSH, nhưng tính năng đó vẫn chưa hoạt động. Tính năng làm việc liên quan đến một số máy chủ mà bạn cần thiết lập trên hộp Linux.
Ioan

2
Ngoài ra, các anh chàng RSE muốn nhận báo cáo lỗi / tăng cường.
Aaron Digulla

2
@Aaron - Tôi đã thử giải pháp rsync đó trước đây, từ Makefile - về cơ bản sẽ thay thế chuỗi khóa của bạn bằng một Ctrl + B. Vấn đề là với cách tiếp cận này, tôi không thể chạy hay gỡ lỗi từ Eclipse. RSE thực sự có vẻ như là công cụ tốt từ công việc; @Ioan, bạn có thể giải thích những gì không hoạt động? Wiki RSE dường như liệt kê các hệ thống tệp SSH và gỡ lỗi từ xa như một tính năng hiện tại ... Hoặc tôi sẽ dùng thử vào thứ Hai này.
Kos

3
@AaronDigulla Xin chào, giải pháp rất tuyệt, nhưng tôi thấy rằng khi tôi đang xây dựng dự án từ xa, Eclipse đang cố gắng biên dịch nó cục bộ. Có cách nào để cho nó biên dịch và chạy trong máy từ xa không?
shaoyl85

1
Lập chỉ mục C / C ++ không hoạt động đúng với RSE. Indexer phàn nàn về các biểu tượng bị thiếu. Nó hoạt động tốt khi các tệp dự án và nguồn được lưu trữ cục bộ nhưng với RSE thì không. có ý kiến ​​gì không
Black_Zero

12

Cách đơn giản nhất là chạy CDT Eclipse trên Hộp Linux và sử dụng X11-Forwarding hoặc phần mềm máy tính từ xa như VNC.

Tất nhiên, điều này chỉ có thể khi Eclipse của bạn hiện diện trên hộp Linux và kết nối mạng của bạn với hộp đủ nhanh.

Ưu điểm là, do mọi thứ đều cục bộ, bạn sẽ không gặp sự cố đồng bộ hóa và bạn không gặp phải bất kỳ sự cố đa nền tảng khó xử nào.

Nếu bạn không có nhật thực trên hộp, bạn có thể nghĩ đến việc chia sẻ thư mục làm việc linux của mình thông qua SMB (hoặc SSHFS) và truy cập nó từ máy windows của bạn, nhưng điều đó sẽ đòi hỏi khá nhiều thiết lập.

Cả hai sẽ tốt hơn là có hai bản sao, đặc biệt là khi nó đa nền tảng.


1
Tôi sợ hộp linux thậm chí không có X11. :)
Kos

2
@Kos, bạn cần máy chủ X11 chạy ở nơi bạn ngồi thực tế - với Linux trong máy ảo hoặc máy chủ X11 cho Windows - và Eclipse để chạy trên máy chủ Linux. ssh chỉ cho phép tạo đường hầm dữ liệu mạng - bạn sẽ tìm thấy nén + "-c blowfish" để giúp trải nghiệm.
Thorbjørn Ravn Andersen

Chỉ cần làm rõ - bạn đang đề cập đến cái gọi là "Nhật thực không đầu" trên máy từ xa phải không? (Chà, miễn là nó còn có Java :)). Tôi đang tìm kiếm một giải pháp phía máy khách nhẹ, nhưng có một số thiết lập trên máy từ xa cũng có thể là một lựa chọn.
Kos

7
@Kos: Số X11 hoạt động như thế này: Bạn có máy khách và máy chủ. Máy chủ là nơi màn hình được kết nối. Nó thực hiện tất cả các kết xuất và hiển thị. Máy khách (Eclipse trong trường hợp này) chỉ gửi các lệnh kết xuất đến máy chủ. Vì vậy, bạn phải cài đặt X11 trên Windows và chạy Eclipse trên hộp Linux của bạn. Tất cả những gì bạn cần làm trên Linux là đặt DISPLAYbiến để Eclipse biết máy chủ đang ở đâu.
Aaron Digulla

5
Mạng cần phải nhanh, và máy chủ của bạn cũng vậy, hoặc Eclipse sẽ chạy rất chậm.
mattalxndr

6

Tôi cũng ở cùng một vị trí (hoặc là), FWIW Tôi đã kết thúc việc kiểm tra một phần samba trên máy chủ Linux và chỉnh sửa chia sẻ cục bộ trên máy Windows bằng notepad ++, sau đó tôi đã biên dịch trên hộp Linux thông qua PuTTY. (Chúng tôi không được phép cập nhật mười phiên bản y / o của các biên tập viên trên máy chủ Linux và nó không có Java, vì vậy tôi đã từ bỏ việc chuyển tiếp X11)

Bây giờ ... Tôi chạy Linux hiện đại trong máy ảo trên máy chủ Windows của mình, thêm tất cả các công cụ tôi muốn (ví dụ CDT) vào VM và sau đó tôi kiểm tra và xây dựng trong một nhà tù chroot gần giống với RTE.

Đó là một giải pháp mạnh mẽ nhưng tôi nghĩ tôi sẽ đưa nó vào hỗn hợp.


3

Giải pháp của tôi tương tự như SAMBA ngoại trừ sử dụng sshfs. Gắn máy chủ từ xa của tôi với sshfs, mở dự án makefile của tôi trên máy từ xa. Đi từ đó

Có vẻ như tôi cũng có thể chạy giao diện GUI để đồng bóng theo cách này.

Xây dựng mã từ xa của tôi đơn giản như: địa chỉ ssh remote_make_command

Tôi đang tìm kiếm một cách tốt để gỡ lỗi mặc dù. Có thể thông qua gdbserver?


2

Tôi đã có cùng một vấn đề 2 năm trước và tôi đã giải quyết nó theo cách sau:

1) Tôi xây dựng các dự án của mình bằng tệp tạo tệp, không được quản lý bởi nhật thực 2) Tôi sử dụng kết nối SAMBA để chỉnh sửa các tệp trong Eclipse 3) Xây dựng dự án: Eclipse gọi một bản tạo "cục bộ" bằng tệp tạo tệp mở ra kết nối SSH tới Linux Tổ chức. Trên dòng lệnh SSH, bạn có thể đưa ra các tham số được thực thi trên máy chủ Linux. Tôi sử dụng cho tham số đó một tập lệnh shell makeit.sh gọi lệnh "thực" trên máy chủ linux. Các mục tiêu khác nhau để xây dựng bạn cũng có thể cung cấp bởi các tham số từ tệp Makefile cục bộ -> makeit.sh -> makefile trên máy chủ linux.


Đẹp, nhưng không thể được gọi là "minh bạch" - ít nhất không cho phép gỡ lỗi. Cũng có thể dựa trên RSync thay vì Samba (đó là những gì tôi đã có trước khi tôi đăng câu hỏi ban đầu của mình).
Kos

2

Tôi đã cố gắng ssh -Xnhưng nó chậm không chịu nổi.

Tôi cũng đã thử RSE, nhưng nó thậm chí không hỗ trợ xây dựng dự án bằng Makefile ( Tôi được thông báo rằng điều này đã thay đổi kể từ khi tôi đăng câu trả lời của mình , nhưng tôi đã không thử điều đó)

Tôi đọc rằng NX nhanh hơn chuyển tiếp X11, nhưng tôi không thể làm cho nó hoạt động được.

Cuối cùng, tôi phát hiện ra rằng máy chủ của tôi hỗ trợ X2Go (liên kết có hướng dẫn cài đặt nếu không có của bạn). Bây giờ tôi chỉ phải:

  • tải xuống và giải nén Eclipse trên máy chủ,
  • cài đặt X2Go trên máy cục bộ của tôi ( sudo apt-get install x2goclienttrên Ubuntu),
  • cấu hình kết nối (máy chủ, tự động đăng nhập bằng khóa ssh, chọn chạy Eclipse).

Mọi thứ giống như tôi đang làm việc trên một máy cục bộ, bao gồm xây dựng, gỡ lỗi và lập chỉ mục mã. Và không có độ trễ đáng chú ý.



0

Câu trả lời này hiện chỉ áp dụng cho việc sử dụng hai máy tính Linux [hoặc có thể cũng hoạt động trên Mac? - chưa được kiểm tra trên Mac] (đồng bộ hóa từ máy này sang máy khác) vì tôi đã viết tập lệnh đồng bộ hóa này trong bash. gitTuy nhiên, nó chỉ đơn giản là một trình bao bọc xung quanh , vì vậy, hãy thoải mái lấy nó và chuyển đổi nó thành một giải pháp Python đa nền tảng hoặc một cái gì đó nếu bạn muốn


Điều này không trả lời trực tiếp câu hỏi của OP, nhưng nó rất gần, tôi đảm bảo nó sẽ trả lời câu hỏi của nhiều người khác trên trang này (bao gồm cả tôi, thực sự, khi tôi đến đây trước khi viết giải pháp của riêng tôi), vì vậy tôi Dù sao tôi cũng đang đăng nó ở đây.

Tôi muốn:

  1. sau đó phát triển mã bằng IDE mạnh mẽ như Eclipse trên máy tính Linux hạng nhẹ
  2. xây dựng mã đó thông qua ssh trên một máy tính Linux mạnh hơn, khác (từ dòng lệnh, KHÔNG phải từ bên trong Eclipse)

Hãy gọi máy tính đầu tiên nơi tôi viết mã "PC1" (Máy tính cá nhân 1) và máy tính thứ 2 nơi tôi xây dựng mã "PC2". Tôi cần một công cụ để dễ dàng đồng bộ hóa từ PC1 sang PC2. Tôi đã thử rsync, nhưng nó cực kỳ chậm đối với các repos lớn và mất hàng tấn băng thông và dữ liệu.

Vì vậy, làm thế nào để tôi làm điều đó? Tôi nên sử dụng quy trình công việc nào? Nếu bạn cũng có câu hỏi này, đây là quy trình làm việc mà tôi đã quyết định. Tôi đã viết một tập lệnh bash để tự động hóa quá trình bằng cách sử dụng gitđể tự động đẩy các thay đổi từ PC1 sang PC2 thông qua một kho lưu trữ từ xa, chẳng hạn như github. Cho đến nay nó hoạt động rất tốt và tôi rất hài lòng với nó. Theo tôi, nó nhanh hơn nhiều so với rsync, đáng tin cậy hơn bởi vì mỗi PC duy trì một repo chức năng và sử dụng ít băng thông hơn để thực hiện đồng bộ hóa, do đó, có thể dễ dàng thực hiện trên một điểm nóng của điện thoại di động mà không cần sử dụng hàng tấn dữ liệu của bạn.

Thiết lập:

  1. Cài đặt tập lệnh trên PC1 (giải pháp này giả định ~ / bin nằm trong $ PATH của bạn):

    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. Bây giờ hãy chỉnh sửa tệp "~ / .sync_git numpo" mà bạn vừa sao chép ở trên và cập nhật các tham số của nó để phù hợp với trường hợp của bạn. Dưới đây là các tham số chứa:

    # 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 sao chép repo của bạn mà bạn muốn đồng bộ hóa trên cả PC1 và PC2.

  4. Đảm bảo tất cả các phím ssh của bạn được thiết lập để có thể đẩy và kéo đến repo từ xa từ cả PC1 và PC2. Đây là một số liên kết hữu ích:
    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. Đảm bảo tất cả các khóa ssh của bạn được thiết lập thành ssh từ PC1 đến PC2.
  6. Bây giờ cdvào bất kỳ thư mục nào trong repo git trên PC1 và chạy:

    sync_git_repo_from_pc1_to_pc2
  7. Đó là nó! Khoảng 30 giây sau, mọi thứ sẽ được đồng bộ hóa một cách kỳ diệu từ PC1 sang PC2 và nó sẽ in toàn bộ thời gian để cho bạn biết những gì nó đang làm và nơi nó thực hiện trên đĩa của bạn và trên máy tính nào. Nó cũng an toàn, vì nó không ghi đè hoặc xóa bất cứ thứ gì không được cam kết. Thay vào đó, nó sao lưu nó lên đầu tiên! Đọc thêm dưới đây để biết cách làm việc.

Đây là quá trình tập lệnh này sử dụng (nghĩa là: những gì nó thực sự đang làm)

  1. Từ PC1: Nó kiểm tra xem có bất kỳ thay đổi không được cam kết nào trên PC1 không. Nếu vậy, nó cam kết cho họ một cam kết tạm thời trên nhánh hiện tại. Sau đó, lực lượng đẩy chúng đến một nhánh SYNC từ xa. Sau đó, nó không tham gia vào cam kết tạm thời của nó, nó đã thực hiện trên nhánh cục bộ, sau đó nó đặt repo git cục bộ trở lại chính xác như thế nào bằng cách dàn dựng bất kỳ tệp nào được dàn dựng trước đó tại thời điểm bạn gọi tập lệnh. Tiếp theo, nó rsyncsao chép tập lệnh qua PC2 và thực hiện một sshcuộc gọi để báo cho PC2 chạy tập lệnh với một tùy chọn đặc biệt để chỉ thực hiện công cụ PC2.
  2. Đây là những gì PC2 hiện: nó cds vào repo, và kiểm tra xem nếu bất kỳ địa phương thay đổi không bị giam tồn tại. Nếu vậy, nó tạo ra một nhánh sao lưu mới tách khỏi nhánh hiện tại (tên mẫu: my_branch_SYNC_BAK_20200220-0028hrs-15sec<- thông báo đó là YYYYMMDD-HHMMhrs - SSsec) và cam kết mọi thay đổi không được cam kết với nhánh đó bằng thông báo cam kết như DO BACKUP OF ALL NHỮNG THAY ĐỔI THAY ĐỔI TRÊN PC2 (MỤC TIÊU PC / MÁY XÂY DỰNG). Bây giờ, nó kiểm tra nhánh SYNC, kéo nó từ kho lưu trữ từ xa nếu nó chưa có trên máy cục bộ. Sau đó, nó tìm nạp các thay đổi mới nhất trên kho lưu trữ từ xa và thực hiện thiết lập lại cứng để buộc kho lưu trữ SYNC cục bộ khớp với kho lưu trữ SYNC từ xa. Bạn có thể gọi đây là "kéo cứng". Tuy nhiên, nó an toàn vì chúng tôi đã sao lưu mọi thay đổi chưa được cam kết mà chúng tôi đã có trên PC2, vì vậy không có gì bị mất!
  3. Đó là nó! Bây giờ bạn đã tạo ra một bản sao hoàn hảo từ PC1 sang PC2 mà không cần phải đảm bảo các thư mục hoạt động sạch sẽ, vì tập lệnh đã xử lý tất cả các cam kết tự động và công cụ cho bạn! Nó nhanh và hoạt động rất tốt trên các kho lưu trữ khổng lồ. Giờ đây, bạn có một cơ chế dễ dàng để sử dụng bất kỳ IDE nào bạn chọn trên một máy trong khi xây dựng hoặc thử nghiệm trên máy khác, một cách dễ dàng, qua điểm nóng wifi từ điện thoại di động của bạn nếu cần, ngay cả khi kho lưu trữ là hàng chục gigabyte và bạn đã có thời gian và hạn chế tài nguyên.

Tài nguyên:

  1. Toàn bộ dự án: https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles
    1. Xem thêm nhiều liên kết và tài liệu tham khảo trong chính mã nguồn trong dự án này.
  2. Làm thế nào để thực hiện "kéo cứng", như tôi gọi: Làm cách nào để buộc "git pull" ghi đè lên các tệp cục bộ?

Liên quan:

  1. đồng bộ hóa kho git giữa các máy tính, khi di chuyển xung quanh?
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.