{"id":38079720,"url":"https://github.com/cbsd/mirrors","last_synced_at":"2026-01-16T20:47:35.181Z","repository":{"id":268922663,"uuid":"905869003","full_name":"cbsd/mirrors","owner":"cbsd","description":"CBSD mirrors","archived":false,"fork":false,"pushed_at":"2025-01-18T18:42:38.000Z","size":5,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-01-18T19:31:36.495Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cbsd.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-12-19T17:24:56.000Z","updated_at":"2025-01-18T18:42:40.000Z","dependencies_parsed_at":null,"dependency_job_id":"5396792a-fddf-47cd-8bd7-976fe9d2dcff","html_url":"https://github.com/cbsd/mirrors","commit_stats":null,"previous_names":["cbsd/mirrors"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/cbsd/mirrors","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cbsd%2Fmirrors","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cbsd%2Fmirrors/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cbsd%2Fmirrors/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cbsd%2Fmirrors/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cbsd","download_url":"https://codeload.github.com/cbsd/mirrors/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cbsd%2Fmirrors/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28482311,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T11:59:17.896Z","status":"ssl_error","status_checked_at":"2026-01-16T11:55:55.838Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":[],"created_at":"2026-01-16T20:47:34.426Z","updated_at":"2026-01-16T20:47:35.169Z","avatar_url":"https://github.com/cbsd.png","language":null,"funding_links":["https://www.patreon.com/clonos"],"categories":[],"sub_categories":[],"readme":"# CBSD Mirrors\n\n## Intro\n\nThe CBSD project uses images ( ISO and CLOUD ) referenced by the project's [base profiles](https://github.com/cbsd/cbsd-vmprofiles).\nSince images on the original sites tend to disappear after a while (especially if it's a rolling release model), to improve the quality of service, the CBSD project maintains its own mirror infrastructure (you can take part in it and become a contributor to the project - see below).\n\nThese mirrors store up-to-date images referenced by the latest versions of profiles, and this is an additional safety net when the original server has already deleted the old image, but CBSD profiles still reference it.\n\nYou can [create your own mirror](#creating-your-own-mirror) and use it as/for:\n\n- [together with other mirrors or exclusively/forcefully (for example, force all your hosts to look only at your mirror)](#using-your-own-private-mirror);\n- [use a mirror privately](#using-your-own-private-mirror) or (if you have a good channel) [add your mirror to the general index and make users in your region happy](#publishing-your-mirror-for-cbsd-project) (especially if the existing mirrors are located far from you)](#using-your-own-private-mirror);\n- you want to be able to use old images - since the original CBSD mirrors are limited in capacity, we cannot store large files forever and usually with each new profile update old images are deleted. You can remove the `--delete` flag when synchronizing via rsync and your mirrors will always store old images, even if the original source no longer has them.\n\nSome statistics in graphs (updated monthly, graph since the beginning of the year):\n\n- distribution popularity based on the number of successful requests to the CBSD mirror (the graph only shows the general trend, since this is data from single (origin) mirror).\n\n![mirror-distro-family-stats.png](https://convectix.com/img/mirror-distro-family-stats.png?raw=true)\n\nStatistics on the number of files and volumes (if you plan to make a full mirror, keep in mind that the volumes will most likely grow - new profiles appear):\n\n![mirror-stats.png](https://convectix.com/img/mirror-stats.png?raw=true)\n\n## Creating your own mirror\n\nImages are synchronized using the [RSYNC](https://rsync.samba.org/) utility:\n\n**x86**:\n\n- Origin-server for ISO **x86** images: **rsync://mirror.convectix.com/iso/**\n- Origin-server for CLOUD **x86** images: **rsync://mirror.convectix.com/cloud/**\n\n**ARM/aarch64**:\n\n- Origin-server for ISO **aarch64** images: **rsync://mirror.convectix.com/iso-aarch64/**\n- Origin-server for CLOUD **aarch64** images: **rsync://mirror.convectix.com/cloud-aarch64/**\n\n**RISCV/riscv64**:\n\n- Origin-server for ISO **riscv64** images: **rsync://mirror.convectix.com/iso-riscv64/**\n- Origin-server for CLOUD **riscv64** images: **rsync://mirror.convectix.com/cloud-riscv64/**\n\n**Other**:\n\n- Origin-server for base/rootfs and ([marketplace](https://marketplace.convectix.com) containers): **WIP**\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample settings FreeBSD-based environment\u003c/summary\u003e\n\n:bangbang: | :Info: You can get a ready-made container with a web service and a cron task for creating a CBSD mirror from the [marketplace](https://marketplace.convectix.com/#cbsdmirror) !\n:---: | :---\n\n\n---\n\n\nStep-by-step setup (on FreeBSD) of the mirror with periodic synchronization via RSYNC (http://rsync.samba.org/) in crontab(5) (http://man.freebsd.org/crontab/5):\n\n1) Install packages:\n\n```\npkg install -y rsync nginx\n```\n\n2) Activate nginx services:\n\n```\nsysrc nginx_enable=\"YES\"\n```\n\n3) Create _/usr/local/www/cbsd-mirror_ directory where we will save ISO images, create a log file for rsync and set the right permissions for the **nobody** user, from which we will synchronize:\n\n```\nmkdir -p /usr/local/www/cbsd-mirror/iso /usr/local/www/cbsd-mirror/cloud \\\n    /usr/local/www/cbsd-mirror/iso-aarch64 /usr/local/www/cbsd-mirror/cloud-aarch64 \\\n    /usr/local/www/cbsd-mirror/iso-riscv64 /usr/local/www/cbsd-mirror/cloud-riscv64 \\\n    /var/log/nginx\n\ntouch /var/log/cbsd_mirror_iso.log /var/log/cbsd_mirror_cloud.log \\\n    /var/log/cbsd_mirror_iso_aarch64.log /var/log/cbsd_mirror_cloud_aarch64.log \\\n    /var/log/cbsd_mirror_iso_riscv64.log /var/log/cbsd_mirror_cloud_riscv64.log\n\nchown -R nobody:nobody /usr/local/www/cbsd-mirror /var/log/cbsd_mirror_iso.log /var/log/cbsd_mirror_cloud.log \\\n    /var/log/cbsd_mirror_iso_aarch64.log /var/log/cbsd_mirror_cloud_aarch64.log \\\n    /var/log/cbsd_mirror_iso_riscv64.log /var/log/cbsd_mirror_cloud_riscv64.log\n```\n\n4) Correct **nginx.conf**, specifying **server\\_name** as correct name of the server (in this example: **cbsd-mirror.example.com**) and set path to root directory, edit /usr/local/etc/nginx/nginx.conf file like this:\n\n```\nuser nobody;\nworker_processes  2;\n\nerror_log       /dev/null;\npid             /var/run/nginx.pid;\n\nevents {\n        use kqueue;\n        kqueue_changes  1024;\n        worker_connections  1024;\n}\n\nhttp {\n        server_tokens off;\n        include       mime.types;\n        default_type  application/octet-stream;\n\n        log_format  main  '$remote_addr - $remote_user [$time_local] \"$request\" ' '$status $body_bytes_sent \"$http_referer\" ' '\"$http_user_agent\" \"$http_x_forwarded_for\"';\n\n        access_log                      /dev/null;\n        client_body_buffer_size         32K;\n        client_body_timeout             3m;\n        client_header_buffer_size       1k;\n        client_header_timeout           3m;\n        client_max_body_size            20m;\n        error_log                       /dev/null;\n        gzip                            off;\n        keepalive_timeout               8;\n        large_client_header_buffers     4 8k;\n        log_not_found                   off;\n        output_buffers                  1 32k;\n        postpone_output                 1460;\n        reset_timedout_connection       on;\n        send_timeout                    3m;\n        sendfile                        on;\n        tcp_nodelay                     on;\n        tcp_nopush                      on;\n\n        server {\n                listen       *:80;\n                #listen      [::]:80;   # Enable IPv6;\n\n                server_name     cbsd-mirror.example.com;  # Set valid name here\n                access_log      /var/log/nginx/mirror.example.com.acc main;\n                error_log       /var/log/nginx/mirror.example.com.err;\n                root            /usr/local/www/cbsd-mirror;\n        }\n}\n```\n\n5) Create an entry in crontab for `nobody` user with the rsync call for 14/15 minutes through lockf to stop duplication of processes\n\n```\ncat \u003e /var/cron/tabs/nobody \u003c\u003cEOF\nSHELL=/bin/sh\nPATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin\n*/14    *       *       *       *       /usr/bin/lockf -s -t0 /tmp/cbsd_mirror_iso.lock /usr/local/bin/rsync -a --delete rsync://mirror.convectix.com/iso/ /usr/local/www/cbsd-mirror/iso/ \u003e /var/log/cbsd_mirror_iso.log 2\u003e\u00261\n*/15    *       *       *       *       /usr/bin/lockf -s -t0 /tmp/cbsd_mirror_cloud.lock /usr/local/bin/rsync -a --delete rsync://mirror.convectix.com/cloud/ /usr/local/www/cbsd-mirror/cloud/ \u003e /var/log/cbsd_mirror_cloud.log 2\u003e\u00261\n\n# uncomment for aarch64 mirror\n#*/16    *       *       *       *       /usr/bin/lockf -s -t0 /tmp/cbsd_mirror_iso_aarch64.lock /usr/local/bin/rsync -a --delete rsync://mirror.convectix.com/iso-aarch64/ /usr/local/www/cbsd-mirror/iso-aarch64/ \u003e /var/log/cbsd_mirror_iso_aarch64.log 2\u003e\u00261\n#*/17    *       *       *       *       /usr/bin/lockf -s -t0 /tmp/cbsd_mirror_cloud_aarch64.lock /usr/local/bin/rsync -a --delete rsync://mirror.convectix.com/cloud-aarch64/ /usr/local/www/cbsd-mirror/cloud-aarch64/ \u003e /var/log/cbsd_mirror_cloud_aarch64.log 2\u003e\u00261\n\n# uncomment for riscv64 mirror\n#*/18    *       *       *       *       /usr/bin/lockf -s -t0 /tmp/cbsd_mirror_iso_riscv64.lock /usr/local/bin/rsync -a --delete rsync://mirror.convectix.com/iso-riscv64/ /usr/local/www/cbsd-mirror/iso-riscv64/ \u003e /var/log/cbsd_mirror_iso_riscv64.log 2\u003e\u00261\n#*/19    *       *       *       *       /usr/bin/lockf -s -t0 /tmp/cbsd_mirror_cloud_riscv64.lock /usr/local/bin/rsync -a --delete rsync://mirror.convectix.com/cloud-riscv64/ /usr/local/www/cbsd-mirror/cloud-riscv64/ \u003e /var/log/cbsd_mirror_cloud_riscv64.log 2\u003e\u00261\nEOF\n\nchmod 0600 /var/cron/tabs/nobody\n```\n\n6) Start WEB service\n\n```\nservice nginx restart\n```\n\u003c/details\u003e\n\n\n\u003cdetails\u003e\n\n  \u003csummary\u003eExample settings Debian-based environment\u003c/summary\u003e\n\n\n---\n\n\n\n  Step-by-step setup (on Debian) of the mirror with periodic synchronization via RSYNC (http://rsync.samba.org/) in crontab(5) (http://man.freebsd.org/crontab/5):\n\n1) Install packages:\n\n```\napt-get install -y rsync nginx util-linux\n```\n\n2) Activate nginx services:\n\n```\nsystemctl enable nginx\n```\n\n3) Create _/var/www/cbsd-mirror_ directory where we will save ISO images, create a log file for rsync and set the right permissions for the **nobody** user, from which we will synchronize:\n\n```\nmkdir -p /var/www/cbsd-mirror/iso /var/www/cbsd-mirror/cloud \\\n    /var/www/cbsd-mirror/iso-aarch64 /var/www/cbsd-mirror/cloud-aarch64 \\\n    /var/www/cbsd-mirror/iso-riscv64 /var/www/cbsd-mirror/cloud-riscv64 \\\n    /var/log/nginx\n\ntouch /var/log/cbsd_mirror_iso.log /var/log/cbsd_mirror_cloud.log \\\n    /var/log/cbsd_mirror_iso_aarch64.log /var/log/cbsd_mirror_cloud_aarch64.log \\\n    /var/log/cbsd_mirror_iso_riscv64.log /var/log/cbsd_mirror_cloud_riscv64.log\n\nchown -R nobody:nogroup /var/www/cbsd-mirror /var/log/cbsd_mirror_iso.log /var/log/cbsd_mirror_cloud.log \\\n    /var/log/cbsd_mirror_iso_aarch64.log /var/log/cbsd_mirror_cloud_aarch64.log \\\n    /var/log/cbsd_mirror_iso_riscv64.log /var/log/cbsd_mirror_cloud_riscv64.log\n```\n\n4) Correct **nginx.conf**, specifying **server\\_name** as correct name of the server (in this example: **cbsd-mirror.example.com**) and set path to root directory, edit /etc/nginx/nginx.conf file like this:\n\n```\nuser www-data;\nworker_processes  2;\n\nerror_log       /dev/null;\npid             /run/nginx.pid;\n\nevents {\n        worker_connections  1024;\n}\n\nhttp {\n        server_tokens off;\n        include       mime.types;\n        default_type  application/octet-stream;\n\n        log_format  main  '$remote_addr - $remote_user [$time_local] \"$request\" ' '$status $body_bytes_sent \"$http_referer\" ' '\"$http_user_agent\" \"$http_x_forwarded_for\"';\n\n        access_log                      /dev/null;\n        client_body_buffer_size         32K;\n        client_body_timeout             3m;\n        client_header_buffer_size       1k;\n        client_header_timeout           3m;\n        client_max_body_size            20m;\n        error_log                       /dev/null;\n        gzip                            off;\n        keepalive_timeout               8;\n        large_client_header_buffers     4 8k;\n        log_not_found                   off;\n        output_buffers                  1 32k;\n        postpone_output                 1460;\n        reset_timedout_connection       on;\n        send_timeout                    3m;\n        sendfile                        on;\n        tcp_nodelay                     on;\n        tcp_nopush                      on;\n\n        server {\n                listen       *:80;\n                #listen      [::]:80;   # Enable IPv6;\n\n                server_name     cbsd-mirror.example.com;  # Set valid name here\n                access_log      /var/log/nginx/mirror.example.com.acc main;\n                error_log       /var/log/nginx/mirror.example.com.err;\n                root            /var/www/cbsd-mirror;\n        }\n}\n```\n\n5) Create an entry in crontab for `nobody` user with the rsync call for 14/15 minutes through lockf to stop duplication of processes\n\n```\ncat \u003e /var/spool/cron/crontabs/nobody \u003c\u003cEOF\nSHELL=/bin/sh\nPATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin\n*/14    *       *       *       *       /usr/bin/flock -w0 -x /tmp/cbsd_mirror_iso.lock /usr/bin/rsync -a --delete rsync://mirror.convectix.com/iso/ /var/www/cbsd-mirror/iso/ \u003e /var/log/cbsd_mirror_iso.log 2\u003e\u00261\n*/15    *       *       *       *       /usr/bin/flock -w0 -x /tmp/cbsd_mirror_cloud.lock /usr/bin/rsync -a --delete rsync://mirror.convectix.com/cloud/ /var/www/cbsd-mirror/cloud/ \u003e /var/log/cbsd_mirror_cloud.log 2\u003e\u00261\n\n# uncomment for aarch64 mirror\n*/16    *       *       *       *       /usr/bin/flock -w0 -x /tmp/cbsd_mirror_iso_aarch64.lock /usr/bin/rsync -a --delete rsync://mirror.convectix.com/iso-aarch64/ /var/www/cbsd-mirror/iso-aarch64/ \u003e /var/log/cbsd_mirror_iso_aarch64.log 2\u003e\u00261\n*/17    *       *       *       *       /usr/bin/flock -w0 -x /tmp/cbsd_mirror_cloud_aarch64.lock /usr/bin/rsync -a --delete rsync://mirror.convectix.com/cloud-aarch64/ /var/www/cbsd-mirror/cloud-aarch64/ \u003e /var/log/cbsd_mirror_cloud_aarch64.log 2\u003e\u00261\n\n# uncomment for riscv64 mirror\n*/18    *       *       *       *       /usr/bin/flock -w0 -x /tmp/cbsd_mirror_iso_riscv64.lock /usr/bin/rsync -a --delete rsync://mirror.convectix.com/iso-riscv64/ /var/www/cbsd-mirror/iso-riscv64/ \u003e /var/log/cbsd_mirror_iso_riscv64.log 2\u003e\u00261\n*/19    *       *       *       *       /usr/bin/flock -w0 -x /tmp/cbsd_mirror_cloud_riscv64.lock /usr/bin/rsync -a --delete rsync://mirror.convectix.com/cloud-riscv64/ /var/www/cbsd-mirror/cloud-riscv64/ \u003e /var/log/cbsd_mirror_cloud_riscv64.log 2\u003e\u00261\nEOF\n\nchmod 0600 /var/spool/cron/crontabs/nobody\n```\n\n6) Start WEB service\n\n```\nsystemctl restart nginx\n```\n\n\n\u003c/details\u003e\n\n## Example of creating a cbsdmirror container from CBSDfile (FreeBSD jail)\n\n```\ncd /tmp\nfetch -o /tmp/cbsdfile-recipes.zip https://codeload.github.com/cbsd/cbsdfile-recipes/zip/refs/heads/master\ntar xfz cbsdfile-recipes.zip\ncd cbsdfile-recipes-master/jail/cbsdmirror/\nenv CBSD_MIRROR_SYNC_ISO=\"0\" CBSD_MIRROR_SYNC_CLOUD=\"*/10 * * * *\" cbsd up\n```\n\nIn the last line, we create a container that does NOT sync ISO, but syncs CLOUD images, running every 10 minutes. You can use arguments to override the parameters without editing CBSDfile, for example, create a cbsdmirror container that syncs ISO and CLOUD with an interval of every 14 and 15 minutes respectively (by default) and a fixed IPv4 address, 172.16.0.55:\n\n```\ncbsd up ip4_addr=\"172.16.0.55\"\n```\n\nAfter some time after startup, the script inside the container will start synchronization (on the index page http:/172.16.0.55 you can see the statistics) and all images will be available to you via http:/172.16.0.55/iso/ (for ISO) and http://172.16.0.55/cloud/ (for CLOUD), which you can use in CBSD.\n\n## Using your own private mirror\n\nTo add your own mirror to the global mirror list, use the ~cbsd/etc/global.conf file to override the iso_site_local= parameter (empty by default). For default parameters, see the contents of the file (~cbsd/etc/defaults/global.conf)[~cbsd/etc/defaults/global.conf]. As an example, let's add the mirror http://172.16.0.55 obtained from the cbsdmirror container (if you are not satisfied with the manual instructions above).\n\nExample of ~cbsd/etc/global.conf file:\n```\niso_site_local=\"http://172.16.0.55/cloud/\"\n```\n\nAfter that, when downloading an image on this host, you will see your mirror in the general list of all mirrors.\nIf your private mirror is fast, then there is a good chance that it will win in preferences and the image will be downloaded from it.\n\n![cbsd_mirror_cust1.png](https://convectix.com/img/cbsd_mirror_cust1.png?raw=true)\n\n\nIf you don't want to leave it to chance and want to unconditionally prefer your mirror and only it (for example, you are in a secure perimeter where Internet access is blocked and it is desirable not to waste time trying to contact public mirrors), then we will need one more parameter as an adjustment in the ~cbsd/etc/global.conf file - `cbsd_fetch_site=`. An example of a new version of ~cbsd/etc/global.conf to use ONLY your mirror:\n\n```\ncbsd_fetch_site=\"iso_site_local\"\niso_site_local=\"http://172.16.0.55/cloud/\"\n```\n\nNow there is no scanning and mirror sorting stage at all:\n\n![cbsd_mirror_cust2.png](https://convectix.com/img/cbsd_mirror_cust2.png?raw=true)\n\n## Publishing your mirror for CBSD project\n\nFinally, if you have sufficient resources for hosting and a desire to help the CBSD project, you can publish a link to your mirror in the index file, which is located in this repository. To do this, clone this repository and add your servers to the cbsd-iso.txt and cbsd-cloud.txt files and, of course, a contact that can be contacted if any difficulties arise. Then create an MR and when the change is accepted, all CBSD installations will start using your mirror.\n\nIn the near future, we plan to launch a health monitoring service for mirrors, which will automatically write out servers from the index in case of prolonged unavailability of mirrors.\n\n1) fork [repo](https://github.com/cbsd/mirrors/fork);\n\n2) make the appropriate changes:\n```\ngit clone git@github.com:XXX/mirrors.git\n// edit mirrors/cbsd-iso.txt + mirrors/cbsd-cloud.txt\ngit add . -A\ngit commit -am \"add new mirrors\"\ngit push\n```\n\n3) create MR\n\n## Thanks\n\nThe CBSD project is grateful to the [donors](https://www.patreon.com/clonos), thanks to whom you have the opportunity to run a minimal/origin mirror infrastructure.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcbsd%2Fmirrors","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcbsd%2Fmirrors","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcbsd%2Fmirrors/lists"}