{"id":13905347,"url":"https://github.com/dschier-wtd/fedora-homeserver","last_synced_at":"2025-04-19T09:54:09.462Z","repository":{"id":37044986,"uuid":"444426162","full_name":"dschier-wtd/fedora-homeserver","owner":"dschier-wtd","description":"Kickstart and Ansible setup of my homeserver.","archived":false,"fork":false,"pushed_at":"2023-01-07T09:31:04.000Z","size":842,"stargazers_count":43,"open_issues_count":1,"forks_count":15,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-29T07:05:44.862Z","etag":null,"topics":["ansible","fedora","homeautomation","homeserver","iot","kickstart","linux"],"latest_commit_sha":null,"homepage":"","language":"Jinja","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dschier-wtd.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-01-04T13:18:40.000Z","updated_at":"2025-02-23T09:34:49.000Z","dependencies_parsed_at":"2023-02-06T19:32:40.954Z","dependency_job_id":null,"html_url":"https://github.com/dschier-wtd/fedora-homeserver","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dschier-wtd%2Ffedora-homeserver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dschier-wtd%2Ffedora-homeserver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dschier-wtd%2Ffedora-homeserver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dschier-wtd%2Ffedora-homeserver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dschier-wtd","download_url":"https://codeload.github.com/dschier-wtd/fedora-homeserver/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249195325,"owners_count":21228173,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["ansible","fedora","homeautomation","homeserver","iot","kickstart","linux"],"created_at":"2024-08-06T23:01:14.131Z","updated_at":"2025-04-16T04:32:02.150Z","avatar_url":"https://github.com/dschier-wtd.png","language":"Jinja","funding_links":[],"categories":["HarmonyOS"],"sub_categories":["Windows Manager"],"readme":"\u003c!--\nreference: https://www.makeareadme.com/\nreference: https://commonmark.org/\n--\u003e\n\n[![Cirrus CI - Base Branch Build Status](https://img.shields.io/cirrus/github/dschier-wtd/fedora-homeserver?logo=Cirrus-ci)](https://cirrus-ci.com/github/dschier-wtd/fedora-homeserver)\n[![GitHub release (latest SemVer)](https://img.shields.io/github/v/release/dschier-wtd/fedora-homeserver?logo=GitHub\u0026label=Release\u0026sort=semver)](https://github.com/dschier-wtd/fedora-homeserver/releases)\n[![GitHub issues](https://img.shields.io/github/issues/dschier-wtd/fedora-homeserver)](https://github.com/dschier-wtd/fedora-homeserver/issues)\n[![GitHub pull requests](https://img.shields.io/github/issues-pr/dschier-wtd/fedora-homeserver)](https://github.com/dschier-wtd/fedora-homeserver/pulls)\n[![GitHub license](https://img.shields.io/github/license/dschier-wtd/fedora-homeserver)](https://github.com/dschier-wtd/fedora-homeserver/blob/main/LICENSE)\n\n# Fedora Homeserver\n\nKickstart and Ansible setup of my homeserver.\n\n## Motivation\n\nI am running my homeserver for quite some time, but wanted to automate it for\na while now. Recently a friend reached out and asked me to provide some kind of\ndocumentation. So, I created this repository and a\n[blog series](https://blog.while-true-do.io/fedora-home-server-intro-concept/)\nabout it.\n\n## Description\n\nThe description provided here, should be reproducible without any further\nexplanation, but it is expected, that you already have some knowledge, when it\ncomes to installing an operating system and using Ansible. In case, you want to\nlearn more about some of the used technologies and software, I reommend having a\nlook at the below list of articles and work your way from there.\n\n- [Fedora - Home Server Series](https://blog.while-true-do.io/fedora-home-server-intro-concept/)\n- [Kickstart - Getting Started](https://blog.while-true-do.io/kickstart-getting-started/)\n- [Spotlight - Fedora Server](https://blog.while-true-do.io/spotlight-fedora-server/)\n- [Git - Getting Started](https://blog.while-true-do.io/git-getting-started/)\n- [Ansible - Getting Started](https://blog.while-true-do.io/ansible-getting-started/)\n- [Podman - Getting Started](https://blog.while-true-do.io/podman-getting-started/)\n\nAfter having the home server in place, you can also check out other guides, that\nmay give an idea how you can put some workload on your server.\n\n- [Tag - Guide](https://blog.while-true-do.io/tag/guide/)\n\n### Features\n\nThe result of the below configurations is a Home Server, that can be used for\nself-hosting, experimenting with new services and home services. It provides a\nweb interface, container and virtual machine capabilities and some useful\nservices for a home lab.\n\n![Screenshot Cockpit](assets/fedora_homeserver_cockpit.png)\n\nThe pre-configured software includes [podman](https://podman.io),\n[kvm](https://www.linux-kvm.org/page/Main_Page),\n[Cockpit](https://cockpit-project.org), [Performance Co-Pilot](https://pcp.io)\nand many more.\n\n### Requirements\n\nFor testing purposes, you need an x86_64 machine/virtual machine with at least\nthe below specifications:\n\n- CPU: Intel Core CPU with 2 Cores\n- Memory: 2 GB\n- Disk: 20 GB\n- Network: 1 Gb LAN\n\nFor a production setup, the below specifications are recommended:\n\n- CPU: Intel Core CPU with 4 Cores\n- Memory: 4 GB\n- Disk: 200 GB\n- Network: 1 Gb LAN\n\n### Preparation\n\nBefore you can start with the installation, you need to download the Fedora\nServer Netinstll image from the\n[website](https://getfedora.org/en/server/download/) and create an USB media.\n\nYou can use the\n[Fedora Media Writer](https://flathub.org/apps/details/org.fedoraproject.MediaWriter)\nand/or follow the\n[detailed instructions](https://docs.fedoraproject.org/en-US/quick-docs/creating-and-using-a-live-installation-image/).\n\nFedora Media Writer is also available for Windows and MacOS.\n\n### OS Installation\n\nI am using [Kickstart](https://pykickstart.readthedocs.io/en/latest/) for the\ninitial deployment of my homeserver. Kickstart automates all the steps needed in\nthe installer and you can also provide additional packages, scripts and files.\n\nThere are 2 Kickstart files in this repository:\n\n- [base_ks.cfg](./kickstart/base_ks.cfg) is a general home server setup, that\n  can be used in a VM for testing purposes.\n- [full_ks.cfg](./kickstart/full_ks.cfg) is the automation I am using for my\n  personal setup. The configuration takes care of customized partitioning,\n  password settings and some additional configuration.\n\nFor this guide, I will stick to the [base_ks.cfg](./kickstart/base_ks.cfg), but\nfeel free to check out the other one, too. The installation will do the below\nsteps for you.\n\n1. Create a user and password\n2. Partition disk 1\n3. Set the timezone to UTC\n4. Set the keyboard layout to US\n5. Set the language to en_US\n6. Install packages\n   - core\n   - Cockpit\n   - Ansible\n\nStarting an installation via Kickstart is pretty easy:\n\n1. Boot from USB media\n2. At the below screenshot, interrupt the boot sequence by hitting a key and\n   editing the first entry.\n3. Add `inst.ks=https://your.kickstart.url/path/to/ks.cfg` like shown below:\n   ![Fedora Install Grub](./assets/fedora_install_grub.png)\n4. Continue and the installer will do its work.\n   ![Fedora Install Kickstart](./assets/fedora_install_kickstart.png)\n5. Wait until the system is rebooted and login with the default credentials.\n   - **user: admin**\n   - **pass: password**\n\nAfter the succesful installation, you can configure the machine and install\nadditional software via Ansible as explained in the next section.\n\n### Customization\n\nInstead of providing and maintaining an inventory, I decided to use a\n[manifest.yml](./ansible/manifest.yml). This makes customizing the Ansible\nPlaybook easier and straight forward.\n\nJust change it to your liking and run the playbook as described in the above\nsections. Each option is documented in the \"manifest.yml\".\n\nIf you want to configure the behaviour with an inventory instead, you can do\nthis, too. You can read more about Ansible inventories in another\n[blog article](https://blog.while-true-do.io/ansible-inventories-1/) and the\n[upstream documentation](https://docs.ansible.com/ansible/latest/user_guide/playbooks_inventory.html).\n\n### Configuration\n\nThe [Ansible Playbook \"configure.yml\"](./ansible/playbooks/configure.yml) can be\nused on basically every Fedora Linux Server installation. It will:\n\n- Configure the hostname and timezone\n- Install and configure chrony (NTP)\n- Install and configure some CLI tools\n- Install and configure tuned (power profiles)\n- Install and configure Avahi (mDNS provider)\n- Install and configure Cockpit (Admin Web UI)\n- Install and configure Performance Co-Pilot (performance metrics system)\n- Install and configure KVM and libvirt\n- Configure a bridge network for the virtual machines\n\nTo apply the playbook, you just need to run it from your workstation.\n\n```bash\n# Run the playbook (dry-run)\n$ ansible-playbook -i IP_ADDRESS, --check --diff ansible/playbooks/configure.yml\n\n# Run the playbook (for real)\n$ ansible-playbook -i IP_ADDRESS, ansible/playbooks/configure.yml\n```\n\n### Update\n\nAdditionally, the [Ansible Playbook \"update.yml\"](./ansible/playbooks/update.yml)\ncan be used to keep your machine updated. It will:\n\n- Update the system\n- Reboot if necessary\n\nYou can apply it the same way as the \"configure.yml\" playbook.\n\n```bash\n# Run the playbook (dry-run)\n$ ansible-playbook -i IP_ADDRESS, --check ansible/playbooks/update.yml\n\n# Run the playbook (for real)\n$ ansible-playbook -i IP_ADDRESS, ansible/playbooks/update.yml\n```\n\nI am not a fan of auto-updates (downloading updates is fine, though) and the\nplaybook will ensure that you can update and reboot whenever you feel\ncomfortable.\n\n### VM Creation\n\nIn case you are using the virtualization, I have provided a playbook to create\nVirtual Maschines. It will prompt you for some information and create the VM.\n\n```bash\n# Create a VM\n$ ansible-playbook -i IP_ADDRESS, ansible/playbooks/create_vm.yml\n```\n\nAfterwards, you will be able to log in to the new machine.\n\n### Container Creation\n\nIn case you want to deploy containers via Podman on your home server, you can\nhave a look at the example playbook\n[deploy_hello_container.yml](./ansible/playbooks/deploy_hello_container.yml).\n\n```bash\n# Create hello-world container\n$ ansible-playbook -i IP_ADDRESS, ansible/playbooks/deploy_hello_container.yml\n```\n\n### Container Deployments\n\nAs an example, but also for some real world usage of the home server, this\nrepository includes the below deployments:\n\n- [ntp server in container](./ansible/playbooks/deploy_ntp_container.yml)\n\n## License\n\nExcept otherwise noted, all work is [licensed](LICENSE) under a\n[BSD-3-Clause License](https://opensource.org/licenses/BSD-3-Clause).\n\n## Contact\n\nPlease feel free to reach out to me to provide feedback or get in touch.\n\n- Site: \u003chttps://while-true-do.io\u003e\n- Blog: \u003chttps://blog.while-true-do.io\u003e\n- Code: \u003chttps://github.com/dschier-wtd\u003e\n- Mail: [dschier@while-true-do.io](mailto:dschier@while-true-do.io)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdschier-wtd%2Ffedora-homeserver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdschier-wtd%2Ffedora-homeserver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdschier-wtd%2Ffedora-homeserver/lists"}