This commit is contained in:
Nicole O'Connor 2024-03-08 12:18:29 -08:00
commit be0abb9060
3 changed files with 106 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
*/.vagrant/**

22
README.md Normal file
View File

@ -0,0 +1,22 @@
# Mirror in a Can
## What is this?
This is a package meant to allow one to summon a package mirror for any supported
Linux distro, on command, without having to think about the implementation needs
like what software to use and how to configure it. Mirrors are minimally configurable
but otherwise try to assume sane and rational defaults for all settings.
## Why would I want this?
Having your own local package mirror is handy if you have a lot of sub-machines on
your workspace (virtual machines, Docker containers, etc) that need to pull packages
and updates. Having the packages be local to your host (or to another host on your
network, as appropriate) also helps with the following:
* Prevents you from getting banned from upstream package mirrors by the automatic
scripts. These bans are temporary, but annoying by design, and these files help
set up the correct response.
* Runs the update packages step of your Docker image builds, Vagrant environments,
and everything else locally, which makes your disk speed the bottleneck instead
of your network speed (usually this is faster, especially in parallel)
* Can be left running long term as part of your infrastructure or started/stopped
as needed, depending on what works best for you.

83
ubuntu/Vagrantfile vendored Normal file
View File

@ -0,0 +1,83 @@
# -*- mode: ruby -*-
# vi: set ft=ruby :
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
# The most common configuration options are documented and commented below.
# For a complete reference, please see the online documentation at
# https://docs.vagrantup.com.
# Every Vagrant development environment requires a box. You can search for
# boxes at https://vagrantcloud.com/search.
config.vm.box = "generic/ubuntu2204"
mirror_hostname = "canned-ubuntu-mirror"
mirror_prettyname = "Canned Ubuntu Mirror"
mirror_description = "Ubuntu 22.04 running a local package mirror"
mirror_cpus = 1
mirror_memory = 1024
# package mirrors, unfortunately, are quite large
mirror_disk_size = 512
config.vm.hostname = mirror_hostname
# Disable automatic box update checking. If you disable this, then
# boxes will only be checked for updates when the user runs
# `vagrant box outdated`. This is not recommended.
# config.vm.box_check_update = false
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
# NOTE: This will enable public access to the opened port
# config.vm.network "forwarded_port", guest: 80, host: 8080
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine and only allow access
# via 127.0.0.1 to disable public access
# config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"
# Create a private network, which allows host-only access to the machine
# using a specific IP.
config.vm.network "private_network", ip: "10.10.100.100"
# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
# your network.
# config.vm.network "public_network"
# Disable the default share of the current code directory. Doing this
# provides improved isolation between the vagrant box and your host
# by making sure your Vagrantfile isn't accessable to the vagrant box.
# If you use this you may want to enable additional shared subfolders as
# shown above.
config.vm.synced_folder ".", "/vagrant", disabled: true
# libvirt
config.vm.provider :libvirt do |virt|
virt.title = mirror_hostname
virt.description = mirror_description
virt.cpus = mirror_cpus
virt.memory = mirror_memory
virt.video_type = "none"
virt.machine_virtual_size = mirror_disk_size
end
# VirtualBox
config.vm.provider "virtualbox" do |vb|
# dependencies
#config.vagrant.plugins = ["vagrant-disksize"]
#config.disksize.size = "#{mirror_disk_size}GB"
vb.name = mirror_hostname
vb.cpus = mirror_cpus
vb.memory = mirror_memory
vb.check_guest_additions = false
end
end