Ist es besser, MacPorts zu verwenden oder einfach eine Ubuntu-VM für lokale Tools/Dienste zu verwenden, wenn Sie auf einem Mac entwickeln?

Als Entwickler (hauptsächlich JVM-basierte Web-Apps) muss ich viele verschiedene Tools und Dienste wie Redis, RabbitMQ, MySQL, Git, Mercurial usw. verwenden. Da ich in einer Linux-Umgebung gearbeitet habe, in der solche Tools nur eine apt-getAway und einer Windows-Welt, in der ich nur das ausführe, was ich brauche, in einer VMWare Workstation VM (auch bekannt als Away apt-get+ VM Overhead), bin ich jetzt ein bisschen verloren, da ich hoffe, von Windows weg und in die zu wechseln Mac-Ökosystem für mein Computerleben.

Ich habe über MacPorts vs. Fink vs. Homebrew gelesen und fand es alles etwas verwirrend, welches für meine Bedürfnisse am besten geeignet ist, obwohl ich denke, dass MacPorts die flexibelste Option der drei ist.

Da ich es gewohnt bin, das auszuführen, was ich in einer VM benötige, spricht dagegen etwas dagegen, wenn ich OS X verwende? Was sind die Kompromisse zwischen der Verwendung von MacPorts zur direkten Installation von Dingen und der Verwendung einer Ubuntu-VM (über VMWare Fusion) zum Hosten der Tools / Dienste, die ich benötige?

Insbesondere mache ich mir mehr Sorgen um die Festplattennutzung, Wartbarkeit und Benutzerfreundlichkeit als um die Leistung. Mit anderen Worten, das ist es, was mir wichtig ist (in der Reihenfolge der Präferenz):

  1. Benutzerfreundlichkeit - Wie einfach ist es, auf dem Mac zu entwickeln und die Tools / Dienste zu verwenden
  2. Festplattennutzung - Wie viel Speicherplatz belegt ist. Die neueren MacBooks verwenden SSDs und Platz ist knapp.
  3. Wartbarkeit - Welche Arbeit ist erforderlich, um Pakete auf dem neuesten Stand zu halten, neue Pakete hinzuzufügen und alte zu entfernen?
  4. Aktualität – Wie aktuell sind die verfügbaren Tools/Dienste
  5. Leistung – Wie schnell Dinge laufen, insbesondere Dienste

Mein Instinkt sagt, dass die Installation der eigentlichen Entwicklungstools wie Mercurial, Git usw. direkt über die von den Projekten empfohlene Methode und die anschließende Installation der serverseitigen Komponenten wie MySQL, Redis, RabbitMQ usw. in einer VM der beste Weg ist. aber was sind die Vor- und Nachteile, wenn Sie dies tun oder etwas wie MacPorts verwenden?

Hinweis: Mir ist klar, dass dies eine ziemlich programmierzentrierte Frage ist, aber das zentrale Problem ist, dass sich OS X von Windows und * nix unterscheidet, wenn es um die Einrichtung einer Entwicklungsumgebung geht, und ich bin mir nicht sicher, wie ich in diesen Betriebssystemen navigieren soll X-spezifische Gewässer.

Antworten (2)

Letztendlich ist dies eine ziemlich persönliche Frage, die stark von Ihrem Arbeitsablauf und Ihren Vorlieben abhängen wird, aber ich werde hinzufügen, was ich kann.

Mein Instinkt stimmt mit Ihrem überein – installieren Sie die Tools, die Sie zum nativen Schreiben Ihres Codes benötigen, und verwenden Sie eine VM für Ihre serverseitige Umgebung. Meine Argumentation dazu ist, dass Sie (vermutlich) einen Mac gekauft haben, um ihn zu verwenden, und den größten Teil Ihrer Entwicklungsarbeit in einer Linux-VM zu erledigen, scheint eine kleine Verschwendung zu sein. Verwenden Sie die nativen Tools, damit Sie sie mit jeder anderen OS X-Software verwenden können, die Sie möchten.

Auch wenn Sie wahrscheinlich Ihre Bereitstellungsumgebung in OS X anständig nachahmen könnten, ist die Verwendung einer VM der beste Weg, um eine exakte Kompatibilität zu gewährleisten (es erleichtert auch die Verwaltung verschiedener Versionen Ihrer verschiedenen Programme, wenn Sie arbeiten müssen mit einer Produktionsumgebung und einem zukünftigen Server-Upgrade usw.).

Benutzerfreundlichkeit

Ich denke, der Ansatz OS X-Tools + Test-VM gewinnt, da der Zugriff auf alle Ihre Entwicklungstools ohne die Notwendigkeit einer VM am reibungslosesten ist und die Test-VM unabhängig agieren kann. OS X ist im Kern BSD, und als solches gibt es eine großartige Integration mit der Befehlszeile, insbesondere in Entwickler-Tools wie Texteditoren.

Festplattenplatz

VMs werden offensichtlich mehr Platz beanspruchen, als nur die Tools nativ zu installieren, aber Ubuntu scheint in der Lage zu sein, in einem ziemlich kleinen Fußabdruck zu laufen (die reine CLI-Installation auf meinem Heimserver läuft ungefähr 3-4 GB, denke ich, und das könnte wahrscheinlich sein gekürzt werden, wenn ich es versuchte). Wenn Sie also nicht wirklich wenig Platz haben, würde ich mir keine allzu großen Sorgen machen, es sei denn, Sie benötigen viele verschiedene VMs.

Wartbarkeit

Ich denke, Sie sollten sich auf jeden Fall für einen Paketmanager entscheiden, egal ob es sich um MacPorts oder eine der anderen Optionen handelt. Ich habe mit keinem von ihnen Erfahrung, aber ich weiß, dass MacPorts (und wahrscheinlich Homebrew und die anderen) einzeilige Update-Befehle haben, ähnlich wie apt.

Aktualität

Dies hängt stark davon ab, wie Sie Ihre Software installieren und welche Software Sie verwenden. Apple neigt dazu, die mitgelieferten CLI-Tools nicht sehr oft zu aktualisieren (häufig nur mit größeren Betriebssystemversionen). Wenn Sie sich also auf eine bestimmte Version von etwas verlassen, das ansonsten integriert ist, möchten Sie möglicherweise eine neuere Version installieren (was Sie tun sollten durch Installation an einem neuen Speicherort, ohne die Systemversion zu überschreiben). Mein bester Rat hier ist, etwas zu googeln und herauszufinden, wie aktuell die für Sie wichtigen Pakete in jedem Paketmanager sind.

Leistung

Die VM-Leistung auf jedem neueren Mac sollte ziemlich gut sein, aber es hängt natürlich davon ab, wie intensiv die Aufgaben sind, die auf dem Gastbetriebssystem ausgeführt werden. Sofern Ihre serverseitige Komponente nicht ziemlich schwer ist (und ich verstehe nicht, warum sie unter einer Entwicklungstestlast stehen sollte), sollten Sie eine ziemlich gute Leistung sehen, insbesondere wenn Ihre VM keine GUI ausführt.

Wie auch immer, das ist meine Meinung, vielleicht können sich andere mit spezifischeren Meinungen zu Macports im Vergleich zu anderen Optionen oder anderen Ansichten zu VM im Vergleich zu nativen äußern.

Ich habe beide Ansätze unter verschiedenen Umständen verwendet. Während MacPorts ein guter Weg ist, um die neuesten Versionen verschiedener GNU-Tools zu erhalten (z. B. Bash 4.x, wenn Apple noch 3.x anbietet), neigt es dazu, mit der Zeit zu verpfuschen, ich würde mich nicht ausschließlich darauf verlassen.

Die meisten Open-Source-Stacks bieten jedoch einfach zu verwendende binäre Installationsprogramme für Mac. Ich habe gute Erfahrungen mit Distributionen von Git, PostgreSQL und Apache. Ich habe gute Erfahrungen damit, sie für die webbasierte Entwicklung zu verwenden. Python-Skripte werden im Allgemeinen unverändert ausgeführt. Ich habe eine Webanwendung in Python + PostgreSQL auf meinem Macbook entwickelt und sie einfach unverändert auf dem Linux-Produktionscomputer ausgeführt. Gleiches gilt für verschiedene Skripte bei der Arbeit, die die Verwaltung von SSH-Anmeldeinformationen in Python-Klassen usw. einschließen. - Ssh ist ausreichend einheitlich.

Ich muss Ubuntu-VMs für einige Zwecke ausführen. Das mache ich meistens auf VMWare-Servern, weil mein Arbeits-Macbook Air schlecht für große Zusammenstellungen und Datenübertragungen geeignet ist. Ich konnte sie jedoch aus VMWare als OVF exportieren und in VirtualBox auf dem Mac importieren. Eine Ubuntu-VM ohne X-Server, die auf einem Mac ausgeführt wird, kann mit weniger als 10 GB Speicherplatz und 1 GB RAM sehr leicht sein. Meine Lösung für E/A-intensive Workloads besteht darin, eine separate Partition auf dem Mac zu erstellen (völlig problemlos, kein Neustart erforderlich) und sie der Ubunbu-VM als Raw-Festplatte zuzuweisen, sie dann mit Linux fdisk zu partitionieren und die Partitionen nach Bedarf zu mounten .

Einige Tool-Empfehlungen für Mac:

  • SourceTree als Git-GUI.
  • iTerm2 als Terminalemulator
  • Textwrangler als kleiner und eleganter Texteditor, der einfach über die Befehlszeile aufgerufen werden kann.
  • Xquarz, der X-Server für Mac, ist nicht mehr im Lieferumfang von OS/X 10.8 enthalten, installieren Sie ihn einfach separat.