Skip to content

Commit

Permalink
1.1.5, add proxy support, fix --install-point
Browse files Browse the repository at this point in the history
  • Loading branch information
bkw777 committed Mar 11, 2023
1 parent 7c733e3 commit c9fa830
Show file tree
Hide file tree
Showing 39 changed files with 1,668 additions and 1,774 deletions.
2 changes: 1 addition & 1 deletion .deb_build_number.mak
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
# This file is generated by Makefile "make deb_build_number"
DEB_PKG_VERSION := 1.1.5
DEB_BUILD_NUMBER := 0000
DEB_BUILD_NUMBER := 0001
6 changes: 3 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ DEFAULT_PPA_URI := https://kernel.ubuntu.com/~kernel-ppa/mainline/

SHELL := /bin/bash
CFLAGS := -O2
VALACFLAGS := #--enable-deprecated
VALACFLAGS :=

prefix := /usr
bindir := $(prefix)/bin
Expand Down Expand Up @@ -43,9 +43,9 @@ misc_files := README.md \
debian/copyright \
# share/polkit-1/actions/$(BRANDING_SHORTNAME).policy

common_vala_files := src/Common/*.vala src/Utility/*.vala
common_vala_files := src/Common/*.vala src/lib/*.vala
tui_vala_files := src/Console/*.vala
gui_vala_files := src/Gtk/*.vala src/Utility/Gtk/*.vala
gui_vala_files := src/Gtk/*.vala

po_files := po/*.po
pot_file := po/messages.pot
Expand Down
65 changes: 38 additions & 27 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,30 +1,31 @@
### Ubuntu Mainline Kernel Installer
# Ubuntu Mainline Kernel Installer
A tool for installing the latest Linux kernels from the [ubuntu mainline ppa](https://kernel.ubuntu.com/~kernel-ppa/mainline/) onto debian-based distributions.

![Main window screenshot](main_window.png)

### About
## About
mainline is a fork of [ukuu](https://github.com/teejee2008/ukuu)

### Changes
## Changes
* Changed name from "ukuu" to "mainline"
* Removed all GRUB / bootloader options
* Removed all donate buttons, links, dialogs
* Removed un-related/un-used code
* Better temp and cache management
* Better desktop notification behavior
* Reduced dependencies and system()s (still ongoing)
* Slow but ongoing re-writes of most parts

### Features
## Features
* Download the list of available kernels from the [Ubuntu Mainline PPA](http://kernel.ubuntu.com/~kernel-ppa/mainline/)
* Display, install, uninstall, available and installed kernels conveniently, gui and cli
* For each kernel, the related headers & modules packages are automatically grouped and installed or uninstalled at the same time
* Optionally monitor and send desktop notifications when new kernels become available

### Not Features
## Not Features
* Care if the kernels run or boot or are compatible with your system beyond the basic plaform arch and whatever dependencies the .deb packages declare and dpkg enforces. The mainline-ppa kernel deb packages are produced 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 authors, and runs dpkg to install them the same way you would manually.

### Install
# Install
The [PPA](https://code.launchpad.net/~cappelikan/+archive/ubuntu/ppa) is kindly maintained by [cappelikan](https://github.com/cappelikan)
```
sudo add-apt-repository ppa:cappelikan/ppa
Expand All @@ -34,7 +35,7 @@ sudo apt install mainline
There is also usually a single reference .deb package in [releases](../../releases/latest), generated by ```make release_deb```
but it is usually not current.

### Build
# Build
```
sudo apt install libgee-0.8-dev libjson-glib-dev libvte-2.91-dev valac aria2 lsb-release make gettext dpkg-dev
git clone https://github.com/bkw777/mainline.git
Expand All @@ -43,7 +44,7 @@ make
sudo make install
```

### Usage
# Usage
Look for System -> Ubuntu Mainline Kernel Installer in your desktop's Applications/Start menu.

Otherwise:
Expand All @@ -59,33 +60,34 @@ $ mainline-gtk
Note that neither of those commands invoked sudo or pkexec or other su-alike.
The app runs as the user and uses pkexec internally just for the dpkg command.

**Install** downloads and installs the selected kernel
## Buttons
**\[ Install \]** - downloads and installs the selected kernel

**Uninstall** uninstalls the selected kernel(1)
**\[ Uninstall \]** - uninstalls the selected kernel(1)

**Changes** displays the CHANGES file for the selected kernel
**\[ Changes \]** - displays the CHANGES file for the selected kernel

**PPA** launches your default https:// handler to the web page for the selected kernel
**\[ PPA \]** - launches your default https:// handler to the web page for the selected kernel
If no kernels are selected (when first launching the app before clicking on any) launches the main page listing all the kernels.

**Uninstall Old** uninstalls all installed kernels below the latest installed version(1)
**\[ Uninstall Old \]** - uninstalls all installed kernels below the latest installed version(1)

**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.
**\[ 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.
Management of these files has been a problem with this app in the past due to various spaghetti code and permissions issues.
This is much better now, but there can still be occasional glitches from bad downloads or sometimes the upstream contents change after your copy was downloaded. For instance a kernel might be invalid when you happened to first cache it, and then later become valid (failed build that later succeeded), but your local cached info about that kernel doesn't know it, etc.
Normally the app tries not to re-download things as much as possible for speed and annoyance reasons. The main index is always re-downloaded at least once every start-up, but the individual pages for each kernel are cached and never re-downloaded by default, only new/missing ones are downloaded.
This is much more reliable now, but there can still be glitches from bad downloads or sometimes the upstream contents change after your copy was downloaded. For instance a kernel might be invalid when you happened to first cache it, and then later become valid (failed build that later succeeded), but your local cached info about that kernel doesn't know it, etc.
Normally the app avoids re-downloading things as much as possible for speed and annoyance reasons. The main index is always re-downloaded at least once every start-up, but the individual pages for each kernel are cached and never re-downloaded by default, only new/missing ones are downloaded.
That can lead to some files being stale or wrong over time, so, to compensate for that, this button just makes it as convenient as possible to force a full re-load any time you want.

**Settings** access the [settings](settings.md) dialog to configure various options
**\[ Settings \]** - access the [settings](settings.md) dialog to configure various options

**About** basic info and credits
**\[ About \]** - basic info and credits

**Exit** order pizza
**\[ Exit \]** - order pizza

(1) In all cases the currently running kernel is protected and the app will not uninstall the currently running kernel.
For the single manual uninstall button, the button simply isn't activated. For the cli app if you manually give that version, it will simply ignore it. For uninstall-old, either gui or cli, the currently running kernel is simply skipped over when scanning and building the list of uninstall candidates.

### Help / FAQ
# Help / FAQ

* Secure Boot
Possibly useful, I have not tried:
Expand All @@ -95,10 +97,19 @@ For the single manual uninstall button, the button simply isn't activated. For t
[Install libssl3](../../wiki/Install-libssl3)

* Missing kernels
Failed or incomplete builds for your platform/arch are not included in the list.
If you think the list is missing something, 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, and can not be installed.

### TODO & WIP
* Make the background process for notifications detect when the user logs out of the desktop session and exit itself
* Move the notification/dbus code from the current shell script into the app and make an "applet mode"
* Combine the gtk and cli apps into one, or, make the gtk app into a pure front-end for the cli app, either way is better than the current mix of overlapping concerns and duplicate logic
Failed or incomplete builds for your platform/arch are not shown.
If you think the list is missing something, and the "Reload" button didn't make it appear, 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, and can not be installed.

# TODO & WIP
* Improve the how "invalid" is determined, perhaps use the "status" file as suggested in #71
* Add some extra info into the version strings used for display and --install etc, to better handle multiple kernels of the same main version but from different sources, and other differences like builds and platform/feature options etc
* Replace system("aria2c ...") with libsoup or libcurl or similar
* Make the background process for notifications detect when the user logs out of the desktop session and exit itself
* Move the notification/dbus code from the current shell script into the app and make an "applet" mode
* Combine the gtk and cli apps into one, or, make the gtk app into a pure front-end for the cli app, either way
* Replace the commandline parser
* Allow attaching notes to each kernel
* Toggle display of invalid kernels so you could at least see they aren't simply missing, and use the "PPA" button too
* UI quick toggle for show/hide unstable/-rc kernels
* 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.
* Support all installable kernel variants, not just "-generic"
65 changes: 38 additions & 27 deletions README.md.src
Original file line number Diff line number Diff line change
@@ -1,30 +1,31 @@
### BRANDING_LONGNAME
# BRANDING_LONGNAME
A tool for installing the latest Linux kernels from the [ubuntu mainline ppa](https://kernel.ubuntu.com/~kernel-ppa/mainline/) onto debian-based distributions.

![Main window screenshot](main_window.png)

### About
## About
BRANDING_SHORTNAME is a fork of [ukuu](https://github.com/teejee2008/ukuu)

### Changes
## Changes
* Changed name from "ukuu" to "BRANDING_SHORTNAME"
* Removed all GRUB / bootloader options
* Removed all donate buttons, links, dialogs
* Removed un-related/un-used code
* Better temp and cache management
* Better desktop notification behavior
* Reduced dependencies and system()s (still ongoing)
* Slow but ongoing re-writes of most parts

### Features
## Features
* Download the list of available kernels from the [Ubuntu Mainline PPA](http://kernel.ubuntu.com/~kernel-ppa/mainline/)
* Display, install, uninstall, available and installed kernels conveniently, gui and cli
* For each kernel, the related headers & modules packages are automatically grouped and installed or uninstalled at the same time
* Optionally monitor and send desktop notifications when new kernels become available

### Not Features
## Not Features
* Care if the kernels run or boot or are compatible with your system beyond the basic plaform arch and whatever dependencies the .deb packages declare and dpkg enforces. The mainline-ppa kernel deb packages are produced 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 authors, and runs dpkg to install them the same way you would manually.

### Install
# Install
The [PPA](https://code.launchpad.net/~cappelikan/+archive/ubuntu/ppa) is kindly maintained by [cappelikan](https://github.com/cappelikan)
```
sudo add-apt-repository ppa:cappelikan/ppa
Expand All @@ -34,7 +35,7 @@ sudo apt install BRANDING_SHORTNAME
There is also usually a single reference .deb package in [releases](../../releases/latest), generated by ```make release_deb```
but it is usually not current.

### Build
# Build
```
sudo apt install libgee-0.8-dev libjson-glib-dev libvte-2.91-dev valac aria2 lsb-release make gettext dpkg-dev
git clone BRANDING_GITREPO
Expand All @@ -43,7 +44,7 @@ make
sudo make install
```

### Usage
# Usage
Look for System -> BRANDING_LONGNAME in your desktop's Applications/Start menu.

Otherwise:
Expand All @@ -59,33 +60,34 @@ $ BRANDING_SHORTNAME-gtk
Note that neither of those commands invoked sudo or pkexec or other su-alike.
The app runs as the user and uses pkexec internally just for the dpkg command.

**Install** downloads and installs the selected kernel
## Buttons
**\[ Install \]** - downloads and installs the selected kernel

**Uninstall** uninstalls the selected kernel(1)
**\[ Uninstall \]** - uninstalls the selected kernel(1)

**Changes** displays the CHANGES file for the selected kernel
**\[ Changes \]** - displays the CHANGES file for the selected kernel

**PPA** launches your default https:// handler to the web page for the selected kernel
**\[ PPA \]** - launches your default https:// handler to the web page for the selected kernel
If no kernels are selected (when first launching the app before clicking on any) launches the main page listing all the kernels.

**Uninstall Old** uninstalls all installed kernels below the latest installed version(1)
**\[ Uninstall Old \]** - uninstalls all installed kernels below the latest installed version(1)

**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.
**\[ 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.
Management of these files has been a problem with this app in the past due to various spaghetti code and permissions issues.
This is much better now, but there can still be occasional glitches from bad downloads or sometimes the upstream contents change after your copy was downloaded. For instance a kernel might be invalid when you happened to first cache it, and then later become valid (failed build that later succeeded), but your local cached info about that kernel doesn't know it, etc.
Normally the app tries not to re-download things as much as possible for speed and annoyance reasons. The main index is always re-downloaded at least once every start-up, but the individual pages for each kernel are cached and never re-downloaded by default, only new/missing ones are downloaded.
This is much more reliable now, but there can still be glitches from bad downloads or sometimes the upstream contents change after your copy was downloaded. For instance a kernel might be invalid when you happened to first cache it, and then later become valid (failed build that later succeeded), but your local cached info about that kernel doesn't know it, etc.
Normally the app avoids re-downloading things as much as possible for speed and annoyance reasons. The main index is always re-downloaded at least once every start-up, but the individual pages for each kernel are cached and never re-downloaded by default, only new/missing ones are downloaded.
That can lead to some files being stale or wrong over time, so, to compensate for that, this button just makes it as convenient as possible to force a full re-load any time you want.

**Settings** access the [settings](settings.md) dialog to configure various options
**\[ Settings \]** - access the [settings](settings.md) dialog to configure various options

**About** basic info and credits
**\[ About \]** - basic info and credits

**Exit** order pizza
**\[ Exit \]** - order pizza

(1) In all cases the currently running kernel is protected and the app will not uninstall the currently running kernel.
For the single manual uninstall button, the button simply isn't activated. For the cli app if you manually give that version, it will simply ignore it. For uninstall-old, either gui or cli, the currently running kernel is simply skipped over when scanning and building the list of uninstall candidates.

### Help / FAQ
# Help / FAQ

* Secure Boot
Possibly useful, I have not tried:
Expand All @@ -95,10 +97,19 @@ For the single manual uninstall button, the button simply isn't activated. For t
[Install libssl3](../../wiki/Install-libssl3)

* Missing kernels
Failed or incomplete builds for your platform/arch are not included in the list.
If you think the list is missing something, 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, and can not be installed.

### TODO & WIP
* Make the background process for notifications detect when the user logs out of the desktop session and exit itself
* Move the notification/dbus code from the current shell script into the app and make an "applet mode"
* Combine the gtk and cli apps into one, or, make the gtk app into a pure front-end for the cli app, either way is better than the current mix of overlapping concerns and duplicate logic
Failed or incomplete builds for your platform/arch are not shown.
If you think the list is missing something, and the "Reload" button didn't make it appear, 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, and can not be installed.

# TODO & WIP
* Improve the how "invalid" is determined, perhaps use the "status" file as suggested in #71
* Add some extra info into the version strings used for display and --install etc, to better handle multiple kernels of the same main version but from different sources, and other differences like builds and platform/feature options etc
* Replace system("aria2c ...") with libsoup or libcurl or similar
* Make the background process for notifications detect when the user logs out of the desktop session and exit itself
* Move the notification/dbus code from the current shell script into the app and make an "applet" mode
* Combine the gtk and cli apps into one, or, make the gtk app into a pure front-end for the cli app, either way
* Replace the commandline parser
* Allow attaching notes to each kernel
* Toggle display of invalid kernels so you could at least see they aren't simply missing, and use the "PPA" button too
* UI quick toggle for show/hide unstable/-rc kernels
* 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.
* Support all installable kernel variants, not just "-generic"
5 changes: 3 additions & 2 deletions debian/changelog
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
mainline (1.1.5) unstable; urgency=medium

* Add proxy setting
* Jonas Gorski <jonas.gorski@gmail.com> fix "--install-point" broken by d7943e5

-- Brian K. White <b.kenyon.w@gmail.com> Fri, 10 Mar 2023 15:14:55 -0500
Expand All @@ -24,9 +25,9 @@ mainline (1.1.2) unstable; urgency=medium
* dir_delete() replace system("rm -rf ...") with native code
* uninstall-old look at latest installed version instead of currently running version
* change the logic for determining the oldest version to display.
threshold_major = whechever is lower: latest_available-show_prev_majors or oldest_installed
threshold_major = whichever is lower: latest_available-previous_majors or oldest_installed

So you can keep show_previous_N_majors set at 0 to show only the most recent kernels by default,
So you can keep show_N_previous_majors set at 0 to show only the most recent kernels by default,
yet still have access to all the kernels from your oldest installed kernel and up.

-- Brian K. White <b.kenyon.w@gmail.com> Wed, 08 Mar 2023 03:51:23 -0500
Expand Down
Loading

0 comments on commit c9fa830

Please sign in to comment.