{"id":13623566,"url":"https://github.com/bkw777/mainline","last_synced_at":"2025-10-07T08:30:29.026Z","repository":{"id":37907132,"uuid":"174640105","full_name":"bkw777/mainline","owner":"bkw777","description":"Install mainline kernel packages from kernel.ubuntu.com","archived":false,"fork":true,"pushed_at":"2025-05-02T04:43:06.000Z","size":7630,"stargazers_count":1129,"open_issues_count":11,"forks_count":77,"subscribers_count":22,"default_branch":"master","last_synced_at":"2025-05-02T05:27:18.444Z","etag":null,"topics":["kernel","linux","mainline","mainline-kernel","mainline-ppa","ubuntu-kernel","ukuu","vala"],"latest_commit_sha":null,"homepage":"","language":"Vala","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"shg8/ukuu","license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bkw777.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2019-03-09T02:44:56.000Z","updated_at":"2025-05-02T04:43:10.000Z","dependencies_parsed_at":"2023-10-16T17:10:20.641Z","dependency_job_id":"d74f6823-f451-4a5f-a874-ca2e54bac648","html_url":"https://github.com/bkw777/mainline","commit_stats":null,"previous_names":[],"tags_count":86,"template":false,"template_full_name":null,"purl":"pkg:github/bkw777/mainline","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bkw777%2Fmainline","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bkw777%2Fmainline/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bkw777%2Fmainline/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bkw777%2Fmainline/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bkw777","download_url":"https://codeload.github.com/bkw777/mainline/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bkw777%2Fmainline/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278742889,"owners_count":26037915,"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","status":"online","status_checked_at":"2025-10-07T02:00:06.786Z","response_time":59,"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":["kernel","linux","mainline","mainline-kernel","mainline-ppa","ubuntu-kernel","ukuu","vala"],"created_at":"2024-08-01T21:01:33.198Z","updated_at":"2025-10-07T08:30:29.020Z","avatar_url":"https://github.com/bkw777.png","language":"Vala","readme":"# Temporary Notice\n2025-04-06 - If you can't install any kernels, go to Settings -\u003e Network -\u003e Mainline-PPA URL  \nand replace the url with this mirror: `https://mainline.teamsforlinux.de/mainline/`  \nSee https://github.com/bkw777/mainline/issues/354#issuecomment-2779917983 for more info.\n\n# Mainline Kernels\nA tool for installing [Ubuntu Mainline Kernel Builds](https://wiki.ubuntu.com/Kernel/MainlineBuilds) onto debian-based distributions.\n\n![Main window screenshot](6.4_boot_hang_note.jpg)\n\n![Main window screenshot](main_window.png)\n\nSort by the Lock column to collect all the locked kernels together\n![sort by locked](sort_by_locked.png)\n\nSort by the Status column to collect all the installed kernels together\n![sort by status](sort_by_status.png)\n\nSort by the Notes column to see all kernels with any remarks\n![sort_by_notes](sort_by_notes.png)\n\n## About\nmainline is a fork of [ukuu](https://github.com/teejee2008/ukuu)  \n\n## Changes\n* Changed name from \"ukuu\" to \"mainline\"\n* Removed all GRUB / bootloader options\n* Removed all donate buttons, links, dialogs\n* Removed all unused \u0026 unrelated code\n* Removed all TeeJee lib code\n* Better cache management\n* Rewrote all exec() commands not to use temp files, temp bash scripts, and temp directories\n* Rewrote the desktop notification scripts to be more reliable\n* Reduced dependencies\n* Per-kernel user notes\n* Pinning/locking kernels\n* Verify .deb file downloads with the sha256 hashes in the CHECKSUMS files\n* Customizable external commands for the terminal window and for root access\n* Support the alternative flavors besides \"generic\", ex: lowlatency, generic-64k, server, virtual, etc\n\n## Features\n* Download the list of available kernels from the [Ubuntu Mainline PPA](http://kernel.ubuntu.com/mainline/)\n* Display, install, and uninstall mainline-ppa kernels conveniently, gui and cli\n* For each kernel the associated headers \u0026 modules packages are downloaded, installed, or uninstalled together\n* .deb file downloads are verified with the sha256 hashes from the CHECKSUMS files\n* Optionally monitor and send desktop notifications when new kernels become available\n\n## Not Features\n* Care if the kernels run or boot or work well or are compatible with your system. The kernel deb packages are produced by someone else, and with no warranty. When they work, great, when they don't, don't use them. This app intentionally does not even touch a single grub or bootloader file itself. All it does is download .deb packages that the ubuntu kernel team produces, and runs dpkg to install them the same way you would manually.\n\nSee the [comment by \"setuid\"](https://ubuntuhandbook.org/index.php/2020/08/mainline-install-latest-kernel-ubuntu-linux-mint/):  \n\u003e Note that these kernel packages are missing quite a bit that would be needed on most systems, and many dkms modules and other tools won’t work with them (NVIDIA drivers, VMware modules, etc.).\n\u003e \n\u003e These packages also will not install nor boot on ARM64 (RPi4 for example), despite being spun for those architectures because they lack DTBs and correctly aligned headers.\n\u003e \n\u003e On AMD64, you’ll find that the cloud tools and tools packages are missing, and installing them would try to bring in libssl3 and an incompatible libc6 from a newer release of Ubuntu, which will most-certainly break userland.\n\u003e \n\u003e You have been warned.\n\nThis is all true.\n\nAdditionally the kernels are unsigned, and so they won't boot on a system with secure boot enabled.\n\nThe libssl \u0026 libc issue they mention were transient issues that naturally passed as time went on and most users systems caught up, but new examples of the same kind of issue are bound to appear again from time to time as the kernel.ubuntu.com team updates their build environment ahead of most users.\n\nThat said, I have been running these daily for several years. I just don't need any nvidia or vmware kernel modules nor do I use secure boot.\n\n# Install\nThe [PPA](https://code.launchpad.net/~cappelikan/+archive/ubuntu/ppa) is kindly maintained by [cappelikan](https://github.com/cappelikan)  \n```\nsudo add-apt-repository ppa:cappelikan/ppa\nsudo apt update\nsudo apt install mainline\n```\nThere are also .deb packages in [releases](../../releases/latest), generated by `make release_deb`  \n\n# Build\n```\nsudo apt install libgee-0.8-dev libjson-glib-dev libvte-2.91-dev valac aria2 lsb-release make gettext dpkg-dev\ngit clone https://github.com/bkw777/mainline.git\ncd mainline\nmake\nsudo make install\n```\n\n# Usage\nLook for System -\u003e Mainline Kernels in your desktop's Applications/Start menu.\n\nOtherwise:  \nCLI\n```\n$ mainline --help\n$ mainline\n```\nGUI\n```\n$ mainline-gtk\n```\nNote that neither of those commands invoked sudo or pkexec or other su-alike.  \nThe app runs as the user and uses pkexec internally just for the dpkg command.\n\n## Buttons\n**\\[ Install \\]** - downloads and installs the selected kernel\n\n**\\[ Uninstall \\]** - uninstalls the selected kernel(1)\n\n**\\[ PPA \\]** - launches your default https:// handler to the web page for the selected kernel  \nIf no kernels are selected (when first launching the app before clicking on any) launches the main page listing all the kernels.  \nUse this to see the build summary and CHANGES files.\n\n**\\[ Uninstall Old \\]** - uninstalls all installed kernels below the latest installed version(1)\n\n**\\[ Reload \\]** - deletes, re-downloads, and re-reads the local cached copies of all the index.html's from the mainline-ppa web site, and regenerates the displayed list.  \n\n**\\[ Settings \\]** - access the [settings](settings.md) dialog to configure various options\n\n**\\[ About \\]** - basic info and credits\n\n**\\[ Exit \\]** - order pizza\n\n(1) The currently running kernel and any locked kernels are protected and ignored.\n\n## Pinning / Locking\nThe Lock checkboxes serve as both whitelist and blacklist.\n\nA locked kernel will be frozen in whatever state it was in when you locked it.  \nIf it was installed, it will now stay installed.  \nIf it was not installed, it will now stay uninstalled.\n\nAll forms of install/uninstall commands \u0026 methods are affected.  \nThe gui \"Install\" and \"Uninstall\" buttons are inactive on that kernel.  \nThe cli \"--install\" and \"--uninstall\" commands ignore that kernel.  \nThe gui \"Uninstall Old\" button and the cli \"--uninstall-old\" command ignore that kernel.  \nThe cli \"--install-latest\" and \"--notify\" for the background notification ignore that kernel.  \nThe kernel is still visible, you can still write notes and pull up the PPA info page and toggle the lock to unlock it.\n\nThis can be handy to keep a stock distribution kernel from being uninstalled by \"Uninstall Old\", or prevent a known buggy kernel from being installed by \"--install-latest\" and prevent \"--notify\" from generating a notification to install it.\n\n## Notes\nClicking on the Notes field allows to attach arbitrary note text to a kernel.\n\n## Display Sorting\nAll column headers are clickable to re-sort the list.  \nThe \"Kernel\" coulumn sorts by the special kernel version number sort where \"1.2.3-rc3\" is higher than \"1.2.3-rc2\", yet \"1.2.3\" is higher than \"1.2.3-rc3\".  \nSorting on the \"Lock\" column is a way to see all locked kernels together.  \nSorting on the \"Status\" column is a way to see all installed kernels together.  \nSorting on the \"Notes\" column is a way to see all kernels that have any notes together.  \n\n# Help / FAQ\n\n## [MainlineBuilds WIKI](https://wiki.ubuntu.com/Kernel/MainlineBuilds)\n\n## General debugging  \n  The `-v` or `-v #` option, or the environment variable `VERBOSE=#`, enables increasing levels of verbosity.  \n  Example: `$ mainline-gtk -v 3` or `$ VERBOSE=3 mainline-gtk`  \n  The -v option may also be used alone or repeated. The default with no `-v` is the same as `-v 1`.  \n  Each additional `-v` is like adding 1. ie: `-v -v -v` is like `-v 4` or `VERBOSE=4`  \n  0 = silence all output  \n  1 = normal output (default)  \n  2 = same as --debug  \n  3 = more verbose  \n  4 = even more  \n  5+ mostly just for uncommenting things in the code and recompiling, not really useful in the release builds\n  \n  A few lines of output are printed before the commandline has been parsed, so `-v 0` doesn't silence them.  \n  The environment variable is read earlier in the process and can silence all output.  \n  `VERBOSE=0 mainline install-latest --yes`\n\n  The exit value is also meaningful.  \n  `VERBOSE=0 ;mainline install-latest --yes \u0026\u0026 mainline uninstall-old --yes`  \n\n## If **Uninstall Old** doesn't remove some distribution kernel packages  \n  Use your normal package manager like apt or synaptic to remove the parent meta-package:  \n  `$ sudo apt remove linux-image-generic`  \n  Then **Uninstall Old** should successfully remove everything.  \n\n## Secure Boot  \n  If you want to have secure boot, then you need to have a signed kernel, and the mainline kernels are not signed.\n\n  This might be an answer.  \n  I did not write this, have not tried to use it, nor even looked at it's code to see if it should be trusted.  \n  It appears to be a script that you install in /etc that will be automatically triggered by dpkg as a post-install step.  \n  (I think you also have to read the rest of the readme to set up a shim and owner-key etc, this script would just be the last step to integrate with dpkg after you got everything else actually working.)  \n  https://github.com/berglh/ubuntu-sb-kernel-signing?tab=readme-ov-file#automated-signing-of-mainline-kernels-installed-with-mainline-or-via-dpkg\n  \u003c!-- https://github.com/M-P-P-C/Signing-a-Linux-Kernel-for-Secure-Boot --\u003e\n\n## Kernels with broken dependencies  \n  The build environment that builds the kernels is newer than most installed systems, and so the built kernels occasionally but regularly break compatibility with all current release and older systems.\n\n  The only convenient, practical, clean, safe resolution is \"Update your system to the level that includes those dependencies naturally.\".  \n  And don't install any newer kernels until that is possible. And if that means the next version of Ubuntu isn't even due to be released for another 6 months, so be it.\n\n  Otherwise, here are some hack options you may amuse yourself with (substitute \"libssl3\" for whatever is actually broken for you today): [Install libssl3](../../wiki/Install-libssl3)  \n  TLDR: monkey with apt configs to add beta repos and use priority settings and pinning to try to only let certain packages auto update from them, or manually download specific .deb files from the beta repos and install them with dpkg.\n\n  See [Not Features](#not-features)\n\n## Missing kernels  \n  Only viable installable kernels are shown by default. Failed or incomplete builds for your platform/arch are not shown unless the \"Hide Invalid\" setting is un-selected.  \n  If you think the list is missing a kernel, press the \"PPA\" button to jump to the mainline-ppa web site where the .deb packages come from, and look at the build results for the missing kernel, and you will usually find that it is a failed or incomplete build for your arch (ex: amd64), and can not be installed.\n\n# TODO \u0026 WIP\n* Replace Process.spawn_async_with_pipes(\"aria2c ...\",...) with libcurl  \n* Make the background process for notifications detect when the user logs out of the desktop session and exit itself  \n* Move the notification/dbus code from the current shell script into the app and make an \"applet\" mode  \n* Combine the gtk and cli apps into one, or, make the gtk app into a pure front-end for the cli app, either way  \n* Replace the commandline parser  \n* Toggles to show/hide the rc or invalid kernels in the main ui instead of going to settings  \n* Right-click menu for more functions for a given kernel, such as reloading the cache just for a single kernel to check for new build status etc, without adding 18 buttons all over the ui.  \n* Properly handle when a kernel has multiple builds like 5.16\n\n# hints  \n* cron job to always have the latest kernel installed.  \n  If you install this, you should disable the notifications in settings.\n```\n$ sudo -i\n# cat \u003e/etc/cron.d/mainline \u003c\u003c-%EOF\n\t# Check for new kernels on kernel.ubuntu.com every 4 hours, randomize over ~2.8 hours\n\t1 */4 * * * root sleep ${RANDOM:0:4} ;VERBOSE=0 ;mainline --install-latest --yes \u0026\u0026 { mainline --uninstall-old --yes ;for a in /home/*/.Xauthority ;do echo [[ -s $a ]] \u0026\u0026 DISPLAY=:0.0 XAUTHORITY=$a notify-send -t 0 -a mainline -i mainline \"Mainline Kernels\" \"New kernel installed\" ;done ; }\n%EOF\n```\n\n* external terminal app\n\n`sudo apt install cool-retro-term`  \n\n![settings](settings.jpg)\n\n![cool-retro-term](cool-retro-term.jpg)\n","funding_links":[],"categories":["Vala","HarmonyOS"],"sub_categories":["Windows Manager"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbkw777%2Fmainline","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbkw777%2Fmainline","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbkw777%2Fmainline/lists"}