Vortex-Linux / ship

Ship is a powerful tool designed to provide easy to use isolated environments in the form of containers and vms.(Ship is made to be highly compatible with VortexLinux but it can also work with other distros)
GNU General Public License v3.0
5 stars 2 forks source link
containers distrobox docker hacktoberfest libvirt linux package-management qemu virtual-machines

Ship

Setup and Installation

Note:(Ship is the superutility of Vortex Linux but can still be used with other distros. If you are using Vortex Linux, Ship is available by default, and you don't have to download it.)

Important Prerequisites

Debian based distros

git clone https://github.com/Vortex-Linux/ship.git
sudo apt install qemu-kvm libvirt-daemon-system virt-viewer libboost-all-dev lynx aria2 tmux
curl https://raw.githubusercontent.com/89luca89/distrobox/main/install | sudo sh
wget https://github.com/schollz/croc/releases/download/v9.4.2/croc_9.4.2_Linux-64bit.deb
sudo dpkg -i croc-*.deb
sudo usermod -a -G libvirt $user
sudo systemctl enable --now cloud-init-local.service
sudo systemctl enable --now cloud-init.service
sudo systemctl enable --now cloud-config.service
sudo systemctl enable --now cloud-final.service

Fedora based distros

git clone https://github.com/Vortex-Linux/ship.git
curl https://raw.githubusercontent.com/89luca89/distrobox/main/install | sudo sh
sudo dnf install qemu croc @virtualization boost-devel lynx aria2 tmux
sudo usermod -a -G libvirt $user
sudo systemctl enable --now cloud-init-local.service
sudo systemctl enable --now cloud-init.service
sudo systemctl enable --now cloud-config.service
sudo systemctl enable --now cloud-final.service

Arch based distros

git clone https://github.com/Vortex-Linux/ship.git
sudo pacman -S libvirt qemu-base distrobox docker croc virt-viewer boost lynx aria2 tmux
sudo usermod -a -G libvirt $user
sudo systemctl enable --now cloud-init-local.service
sudo systemctl enable --now cloud-init.service
sudo systemctl enable --now cloud-config.service
sudo systemctl enable --now cloud-final.service

NixOS

You need the kvm kernel module for virtualization to work. Choose either kvm-intel or kvm-amd depending on your CPU.

boot.kernelModules = [ ... "kvm-intel" ... ];

Enable libvirtd

virtualisation.libvirtd.enable = true;

Add the user to the docker and libvirtd groups:

users.users.my_username = {
  ...
  extraGroups = [ ... "docker" "libvirtd" ... ];
  ...
};

After rebooting your machine, run:

nix develop

Compiling

Pre compiled executables files are provided in the repo, but in the case that its not compatible or you are want to contribute and want to try your changes you can compile the binaries yourself,run these commands:

cd ship
make clean
make

Running the program

Usage, Run:

./ship [OPTIONS] COMMAND [ARGS...]

Options:
  --help                          Show this help message and exit
  --virtual-machine or --vm        Specify action is for VM
  --container or --ctr             Specify action is for container
  --name NAME                     Specifies the name of the container or VM an action should be executed on

Commands:
  vm
    create
      --source URL                Set the source URL of the VM
      --source-local PATH         Set the local source path of the VM
      --cpus NUMBER               Set the CPU limit of the VM
      --memory or -mem SIZE       Set the memory limit of the VM
    start NAME                    Start the specified virtual machine
    restart or reboot NAME        Start the specified virtual machine
    delete NAME                   Delete the specified virtual machine
    list                          List all virtual machines
    view or enter NAME            Shows a console interface or a full GUI of the virtual machine
    pause NAME                    Pause the specified virtual machine
    resume NAME                   Resume the specified virtual machine if it's paused
    save NAME                     Take a snapshot of the specified virtual machine
    shutdown NAME                 Shut down the specified virtual machine
    exec NAME                     Execute the given command in the console of the specified virtual machine
      --command COMMAND           Set the command to be executed
    package_download or download_packages NAME
                                  Download the specified package using the package manager of the specified virtual machine
      --package PACKAGE           Set the package to be downloaded
    package_remove or remove_packages NAME
                                  Remove the specified package using the package manager of the specified virtual machine
      --package PACKAGE           Set the package to be removed
    package_search or search_packages NAME
                                  Search for the specified package using the package manager of the specified virtual machine
      --package PACKAGE           Set the package to be searched
    send NAME                     Share the specified virtual machine to an end user (protected by a secret code)
    receive                       Receive the virtual machine shared by an end user (protected by a secret code)

  container
    create NAME                   Create a new container with the specified name
    delete NAME                   Delete the specified container
    view or enter NAME            Show a console interface
    upgrade NAME                  Upgrade the specified container
    list                          List all containers
    stop NAME                     Stop the specified container
    exec NAME                     Execute the given command in the console of the specified container
      --command COMMAND           Set the command to be executed
    package_download or download_packages NAME
                                  Download the specified package using the package manager of the specified container
      --package PACKAGE           Set the package to be downloaded
    package_remove or remove_packages NAME
                                  Remove the specified package using the package manager of the specified container
      --package PACKAGE           Set the package to be removed
    package_search or search_packages NAME
                                  Search for the specified package using the package manager of the specified container
      --package PACKAGE           Set the package to be searched
    send NAME                     Share the specified container to an end user (protected by a secret code)
    receive                       Receive the container shared by an end user (protected by a secret code)