{"id":32616877,"url":"https://github.com/lukeurban/dev-machine","last_synced_at":"2026-05-01T23:39:33.048Z","repository":{"id":195206921,"uuid":"537813793","full_name":"lukeurban/dev-machine","owner":"lukeurban","description":"Software development VM machine management tool made to make Docker experience on Mac way better.","archived":false,"fork":false,"pushed_at":"2022-09-17T14:21:05.000Z","size":1468,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-05-01T23:39:31.674Z","etag":null,"topics":["developer-tools","development","development-environment","docker","docker-on-mac","linux"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lukeurban.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2022-09-17T13:16:44.000Z","updated_at":"2022-09-18T14:37:27.000Z","dependencies_parsed_at":null,"dependency_job_id":"1b1bdc8c-5bc3-4cf6-abfc-e950448bfc3b","html_url":"https://github.com/lukeurban/dev-machine","commit_stats":null,"previous_names":["lukeurban/dev-machine"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/lukeurban/dev-machine","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukeurban%2Fdev-machine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukeurban%2Fdev-machine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukeurban%2Fdev-machine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukeurban%2Fdev-machine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lukeurban","download_url":"https://codeload.github.com/lukeurban/dev-machine/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukeurban%2Fdev-machine/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32517232,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"online","status_checked_at":"2026-05-01T02:00:05.856Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["developer-tools","development","development-environment","docker","docker-on-mac","linux"],"created_at":"2025-10-30T17:00:33.364Z","updated_at":"2026-05-01T23:39:33.033Z","avatar_url":"https://github.com/lukeurban.png","language":"Shell","funding_links":["https://www.buymeacoffee.com/thatlukeurban"],"categories":[],"sub_categories":[],"readme":"# QEMU wrapper to create VM designed for software development\n\n\n### Build for MAC OS X\n\n🔥This is jest the beginning of the project.🔥\n\n## BEFORE\nInstall:\n* **QEMU** - MUST! (https://www.qemu.org/download/#macos)\n* **GO** - OPTIONAL (to be able to rebuild forwarding tool) (https://go.dev/doc/install)\n\n## INSTALL\n```bash\ncd ~ \u0026\u0026 git clone git@github.com:lukeurban/dev-machine.git \u0026\u0026 sudo cd ./dev-machine/install.sh\n```\n\n## Steps to create a working VM\n\n### Command\n```bash\ndev-machine vm init\n```\n### What is happening during init?\nDuring init you will:\n* create a config file\n* create a VM disc\n* install distro on newly created disc\n\n#### Example config \n```yml\nversion: 0.0.1\ndev_machine:\n  volume_size: 100G\n  memory_size: 16G\n  cores: 6\n  os_image: /Users/luke/.dev-machine/image/debian.iso\n  file_butler_directory:  /Users/luke/dev-machine\nsystem:\n  user: luke\n```\n#### Config explanation\n1. Keep in mind that you need to download a .iso file and paste an absolute path to it in `os_image`. I recommend debian (https://www.debian.org/distrib/)\n2. `file_butler_directory` is the ONLY directory shared between host and VM. Sometimes we need to copy some files. That's what is it for. **DO NOT PLACE YOUR ENTIRE PROJECTS THERE** It's just a middleman.\n3. `system.user` is the user you're planning to create during the install process inside your VM.\n\n\n## Tips on DISTRO installation\n1. Don't close QEMU window immediatel -\u003e log in as `root` and:\na. install sudo and make `system.user` to use sudo without password\nb. Enable paswordless login to `system.user` using ssh-key and authorized_keys -\u003e you won't need to type you VM users password each time you log into a VM.\n\n### AFTER INSTALLATION\n#### 1.Enable VMs `enp0s3` network interface or add:\n```\nallow-hotplug enp0s3\niface enp0s3 inet dhcp\n```\n at the end of  **/etc/network/interface** file inside VM\n####2.Add VM `enp0s3` IP to HOSTs /ets/hosts\n\nbu running ip addr in VM you can see that our VM IP is `192.168.2.3` \n```\n2: enp0s3: \u003cBROADCAST,MULTICAST,UP,LOWER_UP\u003e mtu 1500 qdisc pfifo_fast state UP group default qlen 1000\n    link/ether 54:54:00:55:55:55 brd ff:ff:ff:ff:ff:ff\n    inet 192.168.2.3/24 brd 192.168.2.255 scope global dynamic enp0s3\n       valid_lft 82518sec preferred_lft 82518sec\n```\nNow we can add this to out HOST /etc/hosts\n```\n192.168.2.3 develop\n```\nand access our apps in the browser on `http://develop:X`\n\n## Usage\nAfter installation you can type `dev-tools` and you'll see all available commands\n```bash\n                  _________\n                  / ======= \\\n                 / __________\\\n                | ___________ |\n                | | -       | |\n                | |         | |\n                | |_________| |________________________\n                \\=____________/   DEV MACHINE for mac  )\n                / \"\"\"\"\"\"\"\"\"\"\" \\                       /\n               / ::::::::::::: \\                  =D-\n              (_________________)\n\n\nUsage:\n   dev-machine  [target]\n\nAvailable targets in :\n   Name:                     Doc:\n   c                         Short for connect to dev VM\n   connect                   Connect dev VM\n   help                      Help menu\n   network                   Host \u003c-\u003e VM network tools\n   start                     Start dev VM\n   stop                      Start dev VM\n   update                    Self update method\n   vm                        All VM tools\n```\nBut on daily basis you'll need few:\n`dev-machine start` -\u003e to start the VM\n`dev-machine stop` -\u003e to stop the VM\n`dev-machine connect` or  `dev-machine c`-\u003e to connect to the VM\n\n#### Bonus tool\nSometimes we need to test out frontend and backend on our physical devices. In my case when I develop an API for my Flutter app I need to access the API on my physical device. It's easy to connect to out host machine, we just type our local network IP address. The problem is that our API is living on our VM not out HOST. So we need to be able to access VM **through** our HOST.\nIn order to do that I have to forward all traffic form HOST_PORT to VM_PORT.\nThat why I wrote a forward command:\n```bash\ndev-machine network forward HOST_PORT VM_PORT\n```\n**Example: `dev-machine network forward 4201 4200`**\nUse case from the example command execution above:\nI ran an Angular frontend app inside VM on port `4200`. I want to test the app on my phone.\nMy host Mac is connected to the same network as my phone and my Mac(HOST) has the IP address `192.168.0.56`.\nAfter running forward command I can type `192.168.0.56:4001` on my phones browser and access my Angular app.\n\n#### KNOWN ISSUES:\n* stoping VM can throw permission error\n* Everything is not out of the box\n* version is in config file 😂\n\n## CONTRIBUTING\nAnybody is welcome to contribute!\n\n## License\n\n[MIT](https://github.com/lukeurban/dev-machine/blob/master/LICENSE.md)\n\n## MOTIVATION\n\nI work a lot with docker and it sucks on mac. I think I don't need file sharing between host and docker VM. \nThat's why I created a tool to create VM using QEMU. Every line of code is remote and I use VSCode remote features to access them.\n\n## Links\n\nIf you find this to be of value maybe consider buying me a coffee??\n\n\u003ca href=\"https://www.buymeacoffee.com/thatlukeurban\"\u003e\n\u003cimg src=\"https://github.com/lukeurban/cdn/blob/main/images/bmc-button.png?raw=true\" width=\"200\" /\u003e\n\u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flukeurban%2Fdev-machine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flukeurban%2Fdev-machine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flukeurban%2Fdev-machine/lists"}