Giter Site home page Giter Site logo

ubuntu-desktop-installer's Introduction

Important

This project is in maintenance mode.

Ubuntu Desktop Installer

Active development has been consolidated at Ubuntu Desktop Provision.

ubuntu-desktop-installer's People

Contributors

arishsultan avatar atalanttore avatar atriwidada avatar bittin avatar carlosnihelton avatar charafau avatar comradekingu avatar d-loose avatar dbungert avatar dependabot[bot] avatar didrocks avatar feichtmeier avatar fitojb avatar github-actions[bot] avatar hugok79 avatar jpnurmi avatar kenvandine avatar lisapple avatar madsrh avatar marcustomlinson avatar matthaiks avatar osomon avatar p-bo avatar pranavo72bex avatar renovate[bot] avatar seb128 avatar ser82-png avatar sukso96100 avatar welaq avatar yarons avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ubuntu-desktop-installer's Issues

Accessibility

Will the new installer be usable by sight-impaired users ? Just raising the issue, since articles online say that Flutter doesn't produce HTML that adheres to accessibility standards. I'm not impaired myself, and I don't know what kind of "reader" a person could use to handle doing an install. How do sight-impaired people do an Ubuntu install today ? Use a char-mode installer ?

Contribution Guide!

Hi, I want to contribute to this project, is there any guide or a roadmap?

Slightly clumsy English in screen 6

"installThirdPartyTitle": "Install third-party software for graphics and Wi-Fi hardware and additional media formats",

Generally we try not to this and that and the other in English, but prefer commas. So, this would be preferable.

"installThirdPartyTitle": "Install third-party software for graphics, Wi-Fi hardware, and additional media formats",

[Log Warning] Try Ubuntu: Exception caught by gesture

══╡ EXCEPTION CAUGHT BY GESTURE
╞═══════════════════════════════════════════════════════════════════
The following assertion was thrown while handling a gesture:
Could not find a generator for route RouteSettings("/tryubuntu", null) in the
_WidgetsAppState.
Make sure your root app widget has provided a way to generate
this route.
Generators for routes are searched for in the following order:
 1. For the "/" route, the "home" property, if non-null, is used.
 2. Otherwise, the "routes" table is used, if it has an entry for the route.
 3. Otherwise, onGenerateRoute is called. It should return a non-null value for
 any valid route not
handled by "home" and "routes".
 4. Finally if all else fails onUnknownRoute is called.
Unfortunately, onUnknownRoute was not set.

When the exception was thrown, this was the stack:
#0      _WidgetsAppState._onUnknownRoute.<anonymous closure>
(package:flutter/src/widgets/app.dart:1219:9)
#1      _WidgetsAppState._onUnknownRoute
(package:flutter/src/widgets/app.dart:1234:6)
#2      NavigatorState._routeNamed
(package:flutter/src/widgets/navigator.dart:4148:37)
#3      NavigatorState.pushNamed
(package:flutter/src/widgets/navigator.dart:4190:20)
#4      Navigator.pushNamed (package:flutter/src/widgets/navigator.dart:1726:34)
#5      TryOrInstallPageState.continueWithSelectedOption
(package:ubuntu_desktop_installer/tryorinstallpage.dart:153:17)
#6      _InkResponseState._handleTap
(package:flutter/src/material/ink_well.dart:991:20)
#7      GestureRecognizer.invokeCallback
(package:flutter/src/gestures/recognizer.dart:182:24)
#8      TapGestureRecognizer.handleTapUp
(package:flutter/src/gestures/tap.dart:607:11)
#9      BaseTapGestureRecognizer._checkUp
(package:flutter/src/gestures/tap.dart:296:5)
#10     BaseTapGestureRecognizer.handlePrimaryPointer
(package:flutter/src/gestures/tap.dart:230:7)
#11     PrimaryPointerGestureRecognizer.handleEvent
(package:flutter/src/gestures/recognizer.dart:475:9)
#12     PointerRouter._dispatch
(package:flutter/src/gestures/pointer_router.dart:93:12)
#13     PointerRouter._dispatchEventToRoutes.<anonymous closure>
(package:flutter/src/gestures/pointer_router.dart:138:9)
#14     _LinkedHashMapMixin.forEach
(dart:collection-patch/compact_hash.dart:397:8)
#15     PointerRouter._dispatchEventToRoutes
(package:flutter/src/gestures/pointer_router.dart:136:18)
#16     PointerRouter.route
(package:flutter/src/gestures/pointer_router.dart:122:7)
#17     GestureBinding.handleEvent
(package:flutter/src/gestures/binding.dart:381:19)
#18     GestureBinding.dispatchEvent
(package:flutter/src/gestures/binding.dart:361:22)
#19     RendererBinding.dispatchEvent
(package:flutter/src/rendering/binding.dart:278:11)
#20     GestureBinding._handlePointerEventImmediately
(package:flutter/src/gestures/binding.dart:316:7)
#21     GestureBinding.handlePointerEvent
(package:flutter/src/gestures/binding.dart:280:5)
#22     GestureBinding._flushPointerEventQueue
(package:flutter/src/gestures/binding.dart:238:7)
#23     GestureBinding._handlePointerDataPacket
(package:flutter/src/gestures/binding.dart:221:7)
#27     _invoke1 (dart:ui/hooks.dart:180:10)
#28     PlatformDispatcher._dispatchPointerDataPacket
(dart:ui/platform_dispatcher.dart:276:7)
#29     _dispatchPointerDataPacket (dart:ui/hooks.dart:96:31)
(elided 3 frames from dart:async)

Handler: "onTap"
Recognizer:
  TapGestureRecognizer#84574
════════════════════════════════════════════════════════════════════════════════
════════════════════

Proposal: add a page indicator

Could we eventually create some kind of indicator for the page index or some sort of orb indicator like so
grafik

?

Easy code snippet

Row(
  mainAxisAlignment: MainAxisAlignment.center,
  children: snapshot.data!.map((url) {
    int index = snapshot.data!.indexOf(url);
    return Container(
      width: 10,
      height: 10,
      margin: EdgeInsets.symmetric(
          vertical: 10.0, horizontal: 10.0),
      decoration: BoxDecoration(
        shape: BoxShape.circle,
        color: _current == index
            ? Theme.of(context)
                .primaryColor
                .withAlpha(180)
            : Theme.of(context)
                .primaryColor
                .withAlpha(60),
      ),
    );
  }).toList(),
)

It could be either be put into the wizard page, or into the AppBar - or? Any other suggestions? :)
@madsrh @long-chung

Don't create swapfile if btrfs is used and/or configure swap following btrfs rules

With the current (old) installer, Ubuntu creates /swapfile even when during installation the drive is formatted as BTRFS.
But this will show an error in syslog and the swapfile will not be used since btrfs does not allow a swapfile.
This means swap is disabled when Ubuntu is installed with btrfs filesystem.

As far as I know, all best practices around swapfile and btrfs point to:

  1. create a dedicated swap subvolume in the root subvolume --> note the current Ubuntu Installer already creates @ and @home subvolumes and properly configures them in /etc/fstab
  2. create a folder /swap and mount the subvolume there.
  3. create the swapfile and apply chattr +c.
  4. enable swap

With the new installer, please at least prevent the /swapfile from being created if filesystem is btrfs. Also please consider configuring swap for btrfs.

Support fscrypt

Full disk encryption with LUKS (2004) became the privacy solution after eCryptfs (2006) was removed in Ubuntu 18.04 for reasons. fscrypt (2017) was recommended in the Ubuntu 18.04 release notes, although it was not ready yet at the time. From kernel v5.4 onwards, it is ready.

Not everyone agrees that encrypting the entire disk is the best alternative. Some have families and like to share a laptop, perhaps even with an unprivileged password-less guest account, and family members want to encrypt their home with a personal password for privacy reasons and data protection against theft. Others simply prefer a more lightweight solution than encrypting an entire system just to protect their documents. Or some people might want to use Wake On Lan or Automatically Restart After Power Loss, which would not work using LUKS and the requirement to enter a boot password.

I recommend we re-introduce (the option to choose) home-only encryption using fscrypt. The Ubuntu-Desktop-Installer is making use of the Google-maintained Flutter SDK, so I don't think there is any objection against using the Google-maintained fscrypt.

Installer Mockup

Encryption options:

  • Full Disk Encryption with LUKS (Recommended)
    • Best security. Suitable for single user hardware.
  • Home Encryption with fscrypt
    • Good security. Suitable for shared family computers and workstations with server functionality.
  • No Encryption (not recommended)
    • No security. Good for guests and internet cafes.

Setup

Steps that would need to be scripted:

apt install fscrypt libpam-fscrypt
fscrypt setup
fscrypt setup /
fscrypt setup /home ## only if home is on a separate partition
fscrypt encrypt /home/$USERNAME

Keep in mind that the fscrypt packages on the Ubuntu repositories are outdated. For testing an fscrypt, for now you need to compile a recent version yourself. See: https://bugs.launchpad.net/ubuntu/+source/fscrypt/+bug/1882993

Resources

Fscrypt ext4 native encryption documented on Kernel.org
https://www.kernel.org/doc/html/v5.4/filesystems/fscrypt.html

Build instructions
https://github.com/google/fscrypt#fscrypt-

Fscrypt on Arch Linux
https://wiki.archlinux.org/index.php/Fscrypt

Ubiquity bug report
https://bugs.launchpad.net/ubuntu/+source/ubiquity/+bug/1842417

Use latest localization technique

I have read some of the code and I can see that the old technique is being used for localization. whereas the new technique is much easier to use and it will reduce the overall complexity.

I propose to implement localization (using a new technique). If you approve this proposal then do comment so I will create a PR.

i18n: use launchpad or weblate

Hello,
I'd like to translate the brand new installer but I'm not confident with the way translations are handled.
Would it be possible to use an interface like launchpad or a weblate instance?

Include some BASIC information!

I was able to find out that it is based on some Ubuntu server installer. And build with Flutter, but that is it.

Articles suggest people can try it out in 21.10. Is this true? Is there a compiled version shipped with the daily build? Can I try this with 21.04? What is the difference between "run" and "live run" the readme on how to run it is incomplete and confusing.

I have seen some things that suggest the fucked up manual partitioning has finally been fixed with options disk space to be free for other partitions or something like that. I just tried installing Kubuntu and the installer got ever worse. I had issues for years with the "partion for encrytion" or whatever that option is called. It's not working AT ALL. Going back gives an error about not being able to tot create keyfile or something. I have bad memories of this thing for years as it always had issues. But at least after retries, I was able to manually install a more sane installation without the LVM and swap ...

Also curious about, will it be able to deal with the completely outdated install structure for full disk encryption? Why is Ubuntu still creating a separate /boot partition that is NOT encrypted? I currently have SUSE installed and Grub is able to decrypt the partition it boots from, for years now. And the installer simply creates a SINGLE partition fully encrypted, the way it should be! Ubuntu not only creates a stupid unencrypted boot and has no option for free space and manual was always a pain if it even works at all, it also creates a stupid LVM and swap partition. First nobody with a desktop PC or a good laptop with 16 or 32 gigs of ram even needs swap. Also there is swap files that are not slower for many years also and much simpler. Apparently, everyone says that LVM is great for resizing. Funny thing is I just tried to resize with KDE partition tool and Gparted and they both are NOT able to resize the LVM BS Ubuntu created. Yet I know I used one GUI tool to dead simple resize an ext4 inside LUKS created with a manual installation.

I hope this installer brings a more modern install structure to Ubuntu, at least manually in a non-annoying easy way.

Also what about LUKS 2? Will it use LUKS 2 by default? I read about Grub being able to handle it now. So the installation should simply create a single partition in a single LUKS container and optionally create a swap FILE. And of course you should simply enter the size you want your Ubuntu install to take on the disk and the installer should simply leave empty space in the disk for you to partition to your liking. It's really mind-boggling how horrible the Ubuntu installer is. I really like (K)ubuntu and want to move back to it, but my test install on an HDD already made me angry.

This server installer can I use it to install a Desktop system?

Hyperlink not changing mouse cursor on hover

I know it's a little silly to land an issue of a UI problem this early, but it comes with thte intention to land a PR(using url_launcher already includeded in the dependencies) to fix it.
And to ask for guidelines or roadmap to help this project (#8 ), as this would be a huge success to flutter if accomplished.

Problem:
In the try or install screen the release notes link does not change mouse cursor on hover:
image

Possible more steps in install

I don't know if this should be in installer or welcome or after first boot of new system, but:

  • Ask if other users will use the machine, and either create those users or give pointer to how to create them.

  • Ask about things that will used with machine: smartphone, printer, Bluetooth devices, etc.

  • Ask what DE user wants, if multiple are available.

  • Let user choose apps to install. Show the defaults already checked, but let the user un-check them and select others if desired.

  • Ask if user is coming from Windows, and if so, try to offer mappings of Windows apps to Linux apps. E.g. if you used Photoshop on Windows, maybe try GIMP on Linux.

  • If user is coming from Windows, install NTFS and exFAT utilities.

  • Ask if user wants to use only FOSS software, or all kinds of software. Configure repos and software manager accordingly.

  • Ask if user wants to enable use of Flatpaks, Snaps, Docker. Configure repos and software manager accordingly, install any packages needed.

Thanks.

CMake Error and Exception during `flutter run`

I run all of the commands to checkout and run on the README, but once I run flutter run, it gives me an error:

CMake Error at flutter/generated_plugins.cmake:12 (add_subdirectory):
    add_subdirectory given source
    "flutter/ephemeral/.plugin_symlinks/url_launcher_linux/linux" which is not
    an existing directory.
Call Stack (most recent call first):
    CMakeLists.txt:59 (include)

Building Linux application...
Exception: Unable to generate build files

My OS: Ubuntu Focal 20.04.2 LTS

P.S. This is the first Issue I have ever submitted, just fyi.

Proposal: decouple routing logic from pages

The proposal is to move routing logic out of wizard pages so that individual pages wouldn't have to care about what comes next.

Requirements:

  • Introducing new pages shouldn't cause changes in existing pages.
  • Re-ordering pages should be a matter of changing the order in one central place.
  • It must be possible to have conditional routes (e.g. if online, skip the connect to internet page).

Example: flutter_wizard_example

Any thoughts?

Enforce coding guidelines & linter warnings

First of all thanks for trying Flutter as the new Ubuntu Desktop Installer. Really cool to see Canonical choosing an "hype" framework for a product which most Linux users trash about being bloat.

Looking into the UI code, it seems that there are missing commas on the end of widget declaration, which is a standard on code quality, embraced by the Flutter community. Also some widget files declare constant UI property values and others don't, which is a bummer when updating the code, when in need.

The analysis_options.yaml file also seems to be lacking linter rules, is there a reason for this?

Also, the UI code seems to be growing for an all in one folder pattern. Why not prepare guidelines for structuring folders and files for the UI?

Installer smoke tests failing

'Ubuntu Desktop installer smoke tests' is currently failing due to the following deprecation:

https://api.flutter.dev/flutter/widgets/BuildContext/inheritFromWidgetOfExactType.html

Output:

00:06 +0: loading /home/marcustomlinson/Projects/flutter/ubuntu-desktop-installer/ubuntu_desktop_installer/test/widget_test.dart                                                ../../../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/chewie_audio-1.1.1/lib/src/chewie_player.dart:99:17: Error: The method 'inheritFromWidgetOfExactType'
isn't defined for the class 'BuildContext'.
 - 'BuildContext' is from 'package:flutter/src/widgets/framework.dart' ('../../../../snap/flutter/common/flutter/packages/flutter/lib/src/widgets/framework.dart').
Try correcting the name to the name of an existing method, or defining a method named 'inheritFromWidgetOfExactType'.
        context.inheritFromWidgetOfExactType(_ChewieAudioControllerProvider) as _ChewieAudioControllerProvider;
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
../../../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_svg-0.19.2+1/lib/src/picture_provider.dart:57:59: Error: No named parameter with the name
'nullOk'.
        context != null ? Localizations.localeOf(context, nullOk: true) : null,
                                                          ^^^^^^
../../../../snap/flutter/common/flutter/packages/flutter/lib/src/widgets/localizations.dart:413:17: Context: Found this candidate, but the arguments don't match.
  static Locale localeOf(BuildContext context) {
                ^^^^^^^^
00:09 +0 -1: loading /home/marcustomlinson/Projects/flutter/ubuntu-desktop-installer/ubuntu_desktop_installer/test/widget_test.dart [E]                                         
  Failed to load "/home/marcustomlinson/Projects/flutter/ubuntu-desktop-installer/ubuntu_desktop_installer/test/widget_test.dart":
  Compilation failed
  Test: /home/marcustomlinson/Projects/flutter/ubuntu-desktop-installer/ubuntu_desktop_installer/test/widget_test.dart
  Shell: /home/marcustomlinson/snap/flutter/common/flutter/bin/cache/artifacts/engine/linux-x64/flutter_tester
  
  
00:09 +0 -1: Some tests failed.                                                                                                                                                 

Add Preset / Unattended Installation possibility

Allow to set-up an Unattended Installation config file. In the example below you will find some Idea for the new Installation manager.

It should be possible to place a config file into root of certain partition of any drive attached to the computer
This config File should allow to set-up the whole Installation and some additionals

e.g.

[SystemHardware]
\\ how to choose the disks  - [SATA, IDE, HD, SSD, NVME, NETWORK]
\\ add seperated by ; ]MIN, MAX, BOOT] as additonal help for choosing the disk
BootDisk:  \\ e.g. SSD;BOOT
EFIDisk: \\ e.g. SSD;BOOT (Special case AUTO)
SystemDisk:  \\ e.g. SSD;MAX  
HomeDisk:   \\ e.g. SSD;MAX  

[System]
TimeDate: \\ IP or Hostname to an NTP to set Bios Time and Date correctly
Swap: \\ [AutoPartition, AutoFile, /Path/to/file.swap]
BootSize:  \\ [AutoSize, nn [GB, GiB, MB, MiB]

\\ MIN = recomended Size, MAX = maximal possible diskspace (respecting recomended and auto sizes),
SystemSize:  \\ [AutoSize, MIN,MAX, nn [GB, GiB, MB, MiB]
HomeSize:  \\ [AutoSize, MIN,MAX, nn [GB, GiB, MB, MiB]

[Customize System]
UnattendedUpdate: \\ [YES,NO,IMPORTANT]
RootScript:  \\ run after installation 
InstallAdd: \\ apt or snap name to install package separated by space
InstallPurge:\\ apt or snap name to remove separated by space

[RootUser]
\\ With UserProfile (optional) you could setup root-acces by a home Image (Systemd-homed) or by a config file
\\ Otherwise set basic information here
\\ UserProfile: 
Name: root
TimeZone: Europe/Zurich
Language: de_CH
Keyboard: de_DE

\\ Path to an encrypted file (PGP, Veracrypt, Luks) or Webressource (imaps:// , ssh:// , smb:// LDAP://) 
\\ e.g. ssh:// user:Hostname 
\\ On first login as root this ressource get checked. If login is sucessfull the password you used will be set as root password.
\\ Use ; to add fallback ressources 
Password: 

\\ check rootpassword against this ressource continously: NO  [NO, YES,]
AutoUpdatePassword:

[Home]
UserHome:  \\ Directory containing the Userdata (Direcories or encrypted Images) If var HomeDisk is set, It get mounted as this directory 
UserHomeSkel: \\Preset home for new Users (Directory or Script)

Disk Encryption password strength

Coming from Ubiquity, we couldn't set the strength level required for the disk encryption (LUKS). I need to be able to bring this from a documentation policy to a hard policy set in the preseed if possible.

Optional partition content preview in partition dialog

It would be useful to have an optional preview of the partition content (files, directories) within the partition dialog.

From the partition content you can quickly see whether it is really the desired partition (for deletion, formatting, etc.) and you have not mixed up something.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.