2009-03-02 6 views
8

Ich mache meine Entwicklungsarbeit auf meinem Windows-Rechner, aber meine Kompilierung auf einem Remote-Linux-Rechner. Momentan starte ich einen X-Server unter Windows, ssh in den Linux-Rechner und mache dann die Entwicklung remote.Remote-Programmierung

Was ich tun möchte, ist meine Quelle auf dem Windows-Rechner zu bearbeiten, und es automatisch Dateien auf das Linux-System kopieren, wenn ich speichern. Ich möchte auch, dass meine integrierten Kompilierungsbefehle einen Build auf dem Remote-System ausführen.

Wenn es einen Unterschied macht, ist die Quelle alle in C, mit GCC. In absteigender Reihenfolge der Präferenz habe ich Emacs, Vi und Netbeans auf meinem Desktop und bin bereit, eine andere IDE für einen letzten Ausweg zu installieren.

Antwort

13

Eine Möglichkeit, die TRAMP Remote-Editing-Paket zu verwenden ist (gebaut in Emacs 22 und neuere, und Sie können es in älteren Versionen installieren). Jedes Mal, wenn Sie Ihre Datei speichern, sendet Emacs seinen Inhalt über ssh (standardmäßig ist jedes Detail vollständig konfigurierbar) an den Linux-Rechner. Befehle wie M-x compile und M-x grep sind TRAMP-fähig und werden auf dem entfernten Host ausgeführt.

0

Eine Lösung könnte eine Art von Abfrage-App sein, die den Zeitstempel der Dateien überprüft, um festzustellen, ob sie sich geändert haben. Wenn sie es dann haben, speichern und dann kompilieren. Ein bisschen hackish so, aber es wäre praktikabel.

6

Ich würde in kontinuierliche Integration für Ihre Umgebung suchen. Auf diese Weise können Sie die Änderungen an der Quellcodeverwaltung festschreiben und die Linux-Box als Build-Server verwenden. Sie können Tests und andere damit zusammenhängende interessante Dinge haben, die Sie auf den Builds ausführen möchten.

Update 1: Auch dies könnte für Sie arbeiten: http://metamod-p.sourceforge.net/cross-compiling.on.windows.for.linux.html (es ist auch einen Versuch wert einige Recherchen auf ähnliche Werkzeuge tun)

+0

Aber ich möchte nicht auf Check-Ins für Build abhängen; Ich möchte zuerst bauen, um sicherzustellen, dass es vor dem Einchecken gut ist. –

2

Sie könnten versuchen, eine Scheibe zwischen Linux und Windows-Rechnern teilen Samba mit oder so ähnlich. Dann könnten Sie auf Ihren lokalen Rechnern bearbeiten und die Dateien wären sofort auf dem entfernten Rechner sichtbar, da das Laufwerk für beide sichtbar wäre.

Wo ich arbeite, haben wir alle Dateien auf NFS, auf die von allen Linux-Maschinen und Windows-Maschinen zugegriffen werden kann. Ich weiß nicht, wie schwer es ist, das einzurichten, da ich in einem großen Unternehmen arbeite und die IT von mir abstrahiert ist, aber die einfache gemeinsame Nutzung von Festplatten sollte ziemlich einfach sein.

1

Können Sie einfach eine Samba-Freigabe verwenden, um die Dateien direkt auf dem Remote-Computer zu speichern? Ich mache oft PHP auf diese Weise.

Dann haben Sie einfach ein Putty-Fenster geöffnet, um Befehle auf der Remote-Box auszuführen.

Oder fehlt mir etwas?

2

Warum starten Sie einen X-Server unter Windows? Persönlich würde ich eine Linux-VM mit VMware einrichten oder was auch immer Ihre Lieblings-VM-Technologie ist (VMware ist kostenlos und funktioniert gut). Wählen Sie dann eine beliebige Linux-Distribution. Sie brauchen nur sehr grundlegende Funktionen, meist die Standard-Toolchain. Sie könnten Centos, Ubuntu, Fedora, Debian, was auch immer wählen. Ich benutze normalerweise Centos oder Debian. Richten Sie es ein und verwenden Sie einfach PuTTY in Ihrer VM. Von dort aus können Sie Dateien auf Ihren Remote-Server scannen und so weiter. Auf diese Weise müssen Sie sich nicht mit Cygwin oder einem X-Server oder irgendetwas davon beschäftigen.

5

Andere haben SAMBA vorgeschlagen, die möglicherweise nicht auf Ihrer Linux-Box machbar sind. Eine gute Alternative ist die Verwendung von Dokan SSHFS auf Ihrer Windows-Box, um ein Remote-Verzeichnis über SSH bereitzustellen.

24

Dies ist sicherlich in vim machbar. Sie können das Protokoll scp: // in vim verwenden, um entfernte Dateien zu bearbeiten, und einen Befehl einrichten, der eine lokale Kopie schreibt. Sie können auch ändern, für welches Programm vim verwendet wird: make, um stattdessen einen ssh make auf Ihrem Server auszuführen.

Sie müssen Ihre SSH-Schlüssel einrichten, um dies schmerzfrei zu halten (sonst geben Sie Ihr Passwort die ganze Zeit ein), aber das ist ziemlich einfach.

Eine andere Alternative wäre, als Teil Ihres make-Befehls zu einem Remote-Repos zu schieben, anstatt remote zu bearbeiten.


EDIT:

Zuerst mit dem scp:// Protokoll innerhalb vim. Von :help netrw-start (oder unten auf der Seite von :help scp)

Netrw unterstützt "transparent" Bearbeitung von Dateien auf anderen Computern mit Urls (siehe | netrw-transparent |). Nehmen wir als Beispiel an, Sie haben ein Konto auf einer anderen Maschine; Wenn Sie scp verwenden können, versuchen Sie:

vim scp://hostname/path/to/file 

Möchten Sie ssh/scp einfacher zu bedienen? Check out | netrw-ssh-hack |!

Sie können auch scp:// Pfade in :edit Befehlen verwenden, oder wirklich überall, dass Sie einen normalen Weg benutzen können.

Und von den erwähnten :help netrw-ssh-hack, Anweisungen, wie die SSH-Schlüssel einzurichten:

VERBESSERUNG BROWSING * netrw-listhack * * netrw-ssh-Hack * {{{2

Besonders Mit dem Remote-Verzeichnis-Browser ist die ständige Eingabe des Passworts mühsam.

Für Linux/Unix-Systeme, das Buch "Linux Server Hacks - 100 industrielle Stärke Tipps & Tools" von Rob Flickenger (O'Reilly, ISBN 0-596-00461-3) gibt einen Tipp für die Einrichtung keine -password ssh und scp und behandelt die zugehörigen Sicherheitsprobleme . Es war früher verfügbar unter http://hacks.oreilly.com/pub/h/66, , aber anscheinend wird diese Adresse jetzt zu irgendeinem "Hackzine" umgeleitet. Ich werde eine Zusammenfassung auf diesem Artikel und über eine Mitteilung Ben Schmidt basierte versuchen:

(1) (SSH-Client) auf dem lokalen Rechner ein öffentliches/privates Schlüsselpaar generieren:

ssh-keygen -t rsa 

(Speichern der Datei in ~/.ssh/id_rsa wie aufgefordert)

(2) Drücken Sie einfach auf die Frage nach der Passphrase (zweimal) für keine Passphrase. Wenn Sie eine Passphrase verwenden, müssen Sie auch ssh-agent verwenden, sodass Sie die Passphrase nur einmal pro Sitzung eingeben müssen. Wenn Sie keine Passphrase verwenden, genügt es, sich einfach an Ihren lokalen Computer anzumelden oder Zugriff auf die Schlüsseldatei zu erhalten , um auf alle SSH-Server zuzugreifen, die diesen Schlüssel für die Anmeldung autorisiert haben.

(3) Das erstellt zwei Dateien:

~/.ssh/id\_rsa 
    ~/.ssh/id\_rsa.pub 

(4) Auf der Zielmaschine (SSH-Server):

cd 
mkdir -p .ssh 
chmod 0700 .ssh 

(5) auf dem lokalen Computer (SSH-Client): (eine Zeile)

ssh {serverhostname} cat '>>' '~/.ssh/authorized\_keys2' < ~/.ssh/id_rsa.pub 

oder für OpenSSH, (eine Zeile)

Sie können es mit

ssh {serverhostname} 

testen, und Sie sollten auf dem Server einloggen zu müssen ohne weitere etwas geben.

Wenn Sie sich entschieden ein Passwort zu verwenden, tun:

ssh-agent $SHELL 
ssh-add 
ssh {serverhostname} 

Sie für Ihre Schlüssel Passwort gefragt, wenn Sie ssh-add verwenden, aber nicht anschließend, wenn Sie ssh verwenden. Für den Einsatz mit vim können Sie

ssh-agent vim 

und verwenden Sie beim nächsten innerhalb vim verwenden

:!ssh-add 

Alternativ können Sie ssh-agent zum Terminal Sie planen, auf läuft vim gelten :

ssh-agent xterm & 

und ssh-add wann immer Sie brauchen.

Für Windows haben Leute auf der Vim-Mailingliste erwähnt, dass Pageant hilft mit der Vermeidung der ständigen Notwendigkeit, das Passwort einzugeben.

Kingston Fung über eine andere Art und Weise geschrieben ständig zu vermeiden, benötigt Passwörter eingeben:

Um die Notwendigkeit zu vermeiden, in dem Passwort für scp jedes Mal eingeben, Sie einen Hack in der Dokumentation zur Verfügung zu stellen Richten Sie ein nicht passwortgeschütztes Konto ein. Ich fand eine bessere Möglichkeit, das zu tun: Ich kann ein reguläres ssh-Konto verwenden, das ein Kennwort verwendet, um auf das Material zuzugreifen, ohne das Kennwort jedes Mal eingeben zu müssen. Es ist gut für Sicherheit und Komfort. Ich versuchte ssh öffentlichen Schlüssel Autorisierung + ssh-Agent, dies zu implementieren, und es funktioniert!Hier sind zwei Links mit Anweisungen:

Für auf Remote-Systemen zu machen, müssen Sie Ihre makeprg Variable tun einen ssh machen, um setzen. Von :help makeprg

Programm für den Befehl ": make" verwenden. Siehe |: make_makeprg |. Diese Option kann '%' und '#' Zeichen enthalten, die auf den aktuellen und alternativen Dateinamen erweitert werden. |: _% | |: _ # | Umgebungsvariablen werden erweitert |: set_env |. Siehe | Option-Backslash | über Leerzeichen und umgekehrte Schrägstriche.

Beachten Sie, dass ein '|' muss zweimal maskiert werden: einmal für ": set" und einmal für die Interpretation eines Befehls. Wenn Sie einen Filter verwenden genannt „myFilter“ tun es wie folgt aus:

:set makeprg=gmake\ \\\|\ myfilter 

Der Platzhalter „$ *“ kann (auch mehrfach) gegeben werden angeben, wo die Argumente werden beispielsweise enthalten sein:

:set makeprg=latex\ \\\\nonstopmode\ \\\\input\\{$*} 

Diese Option kann nicht über | |modeline | eingestellt werden oder in der | sandbox |, für Sicherheitsgründe.

+0

Ich würde gerne Details zur Verwendung des Protokolls scp: // sehen. Könnte nett sein, einen Zeiger auf ssh-keys Anweisungen auch einzuschließen. – dreeves

+0

Danke, dass du die Manpage von Vim auf 'scp' kopierst, aber es ist nicht das, was der Typ braucht. Er würde das für alle seine Akten tun müssen. Irgendeine Idee, wie man remote an einem ganzen Projekt arbeitet? –

+0

adrien-giboire: naja, persönlich würde ich einfach an die maschine gehen, tmux oder screen starten und so remote arbeiten. Aber der Fragesteller sagte ausdrücklich, dass sie sich lokal entwickeln wollten. Außerdem können Sie das Präfix 'scp: //' verwenden, um ein entferntes Verzeichnis in vim zu laden, und einfach den Dateibetrachter verwenden, um auszuwählen, mit was Sie arbeiten möchten. Kinderleicht. – rampion

1

Stellen Sie ein Quellcodeverwaltungssystem ein und verwenden Sie es. Dann können Sie einfach einen Commit machen, nachdem Sie in Ihrer IDE gespeichert haben, und auf dem Server kann es passieren, dass etwas beim Commit passiert.

Dies kann Tests auslösen, bauen, um eventuelle Fehler zusenden ...

0

Ich persönlich verwende XMing mit PuTTY. Ich benutze PuTTY, während XMing läuft. Ich kann jeden Editor öffnen (gvim, emacs, gedit, etc) und es wird erscheinen.

Sie müssen einige Setup auf PuTTY obwohl tun:

  1. Expand Verbindung
  2. erweitern SSH
  3. Klicken Sie auf X11
  4. Überprüfen Sie die "Enable X11 Forwarding"
  5. Im Text Geben Sie (ohne Anführungszeichen) Folgendes ein: "localhost: 0"
  6. Sitzung speichern und verbinden.