Giter VIP home page Giter VIP logo

provisioning's People

Contributors

aisgbnok avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

provisioning's Issues

Prepare for Windows 11 23H2

Summary

Review packages and ensure they provide the best experience for Windows 11 23H2.

To Do

  • Reevaluate the default Provisioned Appx Packages
  • Transition packages to the updated Microsoft-Desktop-Provisioning.dat in 23H2 builds.

Consolidate CABs

Summary

Generating new CABs (Cabinet Files containing assets) for each package is somewhat redundant.

Possible Solutions

  • Remove generated CABs from the repo, and instead generate as needed.
  • Reuse a single CAB in multiple packages and only generate new CABs if different assets are needed. (i.e. general, netlab, etc.)
  • Dynamically generate CABs

Is `Split-WindowsImage` or `Export-WindowsImage` with `SplitImageFilePattern` better?

Description

I'm not sure whether using the Split-WindowsImage cmdlet or the Export-WindowsImage cmdlet with the -SplitImageFilePattern parameter is better. I need to test this and determine if there is any difference.

Split-WindowsImage

This is a dedicated cmdlet for splitting an image into .swm files. However I'm unsure if it does any sort of optimization or cleanup like the Export-WindowsImage cmdlet.

Export-WindowsImage

This cmdlet is for exporting images, and with the -SplitImageFilePattern parameter it can create .swm files. However it also explicitly states that it optimizes images during export:

You can also optimize an image by exporting to a new image file with Export-WindowsImage. When you modify an image, DISM stores additional resource files that increase the overall size of the image. Exporting the image will remove unnecessary resource files.
Source

Add Cortana Package Name to Documentation

I forget that Microsoft.549981C3F5F10_8wekyb3d8bbwe is Cortana and have to look it up every year. It's in the commit log and a quick search brings it up, but documenting it somewhere would be helpful.

Investigate transitioning to WinGet Configuration Files

Description

I have been wanting to explore a transition to WinGet configuration files instead of provisioning packages for a few months now. Now that WinGet 1.8 is launching in June with improved support and Dev Home is much more stable, let's see if this is feasible.

Review `CreatePartitions` Scripts Recovery Size

It is time to review the CreatePartitions scripts. Specifically, the recovery sizes. Do they make sense for 2023-2024?

Microsoft Recovery Scripts

Here are some scripts I pulled from Surface Recovery Images. I usually use these are reference for determining what make sense. Given I have a Surface Laptop 3, I have outdated scripts. Unfortunately, you need a working serial number to pull them, so I went to Best Buy and grabbed the display unit's serial numbers 🤪🤫. These should be more up-to-date.

Surface Laptop Studio 2 (SurfaceLaptopStudio2_BMR_12010_2023.619.823):

convert gpt
create partition efi size=260
format quick fs=fat32 label="System"
assign letter=S
create partition msr size=16
create partition primary
shrink minimum=1152
gpt attributes=0x0000000000000000
format quick fs=ntfs label="Local Disk"
assign letter=W
create partition primary size=1152
set id=DE94BBA4-06D1-4D40-A16A-BFD50179D6AC
gpt attributes=0x8000000000000001
format quick fs=ntfs label="Windows RE tools"
assign letter=T
rescan
exit

Add Repository README

Add a README to this repository explaining the purpose of this repository and the provisioning packages.

Look into relative paths

These packages and commands use hard-coded full paths, instead of relative paths. You must have this repository cloned into the C:\provisioning\ directory because of this.

I'm not sure if ICD and Windows Provisioning accept relative paths. Need to look into this.

What to do with Terminal?

Summary

Hmmmmmm. The Terminal team has announced some significant changes to Terminal that I need to take some time to understand. I need to perform a few small experiments and then think about the best path forward for my current packages.

Details

Upon first glance, it now seems there are a bunch of dependencies bundled with the Provisioning/Preinstall Kits that the Terminal team distributes. On top of that, there are now two kits and differences between Windows 11 and 10 Terminal installations. Previously there was a single kit and it just came with the msixbundle.

Recently I have made lots of changes to make these packages Windows 11 first, but that does not mean ripping support for Windows 10. Some of these packages are literally only built to be used on Windows 10.

What I am thinking...

I have much more thinking to do, but so far I am considering a few options listed from most likely to least likely

  1. Use the Windows 10/11 bundle for all packages, and then Windows 11 installations will just have to convert the W11 version automatically during the user step with store update. (One bundle to rule them all)
  2. Use the Windows 10 bundle in the Windows 10/11 general packages, and then move certain packages to exclusively Windows 11 and use the Windows 11 bundle for those. (Two bundles)
  3. Move all packages to Windows 11 exclusively. (This really isn't even an option atm, just brainstorming.)

Experiments & Questions

Here are some experiments & questions I have to explore.

  • What are the differences between Win10 and Win11 kits?
    • Different msixbundle?
    • Different dependencies?
  • What are all these dependencies?
    • What dependencies did Terminal 1.11 have?
    • What dependencies are needed for Windows 10, Windows 11?
    • What dependencies does the store install?
  • What is the difference between installing Win10 kit and Win11 kit on Windows 11?
    • How acceptable is it to install Win10 kit on W11?
  • How does the Win10 Terminal version get upgraded to the Win11 Terminal?

Update Contributing, Conduct, and "Red Tape"

Description

The "Red Tape" for this project needs some love. The contributing guide specifically could use a rewrite and expansion. The original code of conduct was just taken from the Contributor Covenant, a more personalized code of conduct would be nice. Finally some small refinements to other areas like the license could be made.

Add Code of conduct

Add a code of conduct to outline what kind of learning environment and community space this is.

Documentation Overhaul

Description

A lot of the included readmes and inline documentation has been getting some love lately. However the actual docs directory containing other documentation is falling behind. It doesn't seem very coherent and the formatting could be improved. It would be great to overhaul and consolidate the docs directory.

Look into Intel Graphics Drivers

Description

It seems that 11th gen Xe and up can actually use the newer Arc graphics drivers. Which should be better, I think?

Improve Intel Graphics Drivers Distinction

Summary

Intel's graphics portfolio is diversifying and expanding and it seems its drivers are as well. The documentation needs to be updated to reflect this.

Details

There used to be a single Intel Graphics Driver for 6th-12th gen processors from UHD to Xe graphics. Very simple. Within the past few months, there are now three distinct drivers for UHD to Xe 6th-11th gen, Xe and UHD for 12th gen, and most recently Arc graphics. (Welcome to the graphics industry Intel.) The documentation needs some clarification as to what driver is being used and when you should use a different driver.

Explicitly Add Software Versions to Package Configurations

Explicitly Add Software Versions to Package Configurations

Currently, you can't always tell the version of the software being installed by looking at the package configurations. We should explicitly state version numbers in the installer file names and package configurations.

While someone can just name the Chrome 81 installer Chrome 96, that issue is and will always be apparent. Adding explicit software versions to the package configs and installer filenames helps those properly using the packages understand what software is being installed by each package.

Problem

<CommandConfig Name="Microsoft_Edge_Update">
<CommandFile>C:\provisioning\software\general\MicrosoftEdgeEnterpriseX64.msi</CommandFile>
<CommandLine>msiexec /i "microsoftedgeenterprisex64.msi" /passive</CommandLine>
<ContinueInstall>True</ContinueInstall>
<RestartRequired>False</RestartRequired>
<ReturnCodeRestart>3010</ReturnCodeRestart>
<ReturnCodeSuccess>0</ReturnCodeSuccess>
</CommandConfig>

Above you can only tell that Edge is being installed but you don't know the version. It is like this with most of the general software being installed: Chrome, OneDrive, etc.

<CommandConfig Name="PowerShell_7.2.0">
<CommandFile>C:\provisioning\software\general\PowerShell-7.2.0-win-x64.msi</CommandFile>
<CommandLine>msiexec /i "powershell-7.2.0-win-x64.msi" /passive</CommandLine>
<ContinueInstall>True</ContinueInstall>
<RestartRequired>False</RestartRequired>
<ReturnCodeRestart>3010</ReturnCodeRestart>
<ReturnCodeSuccess>0</ReturnCodeSuccess>
</CommandConfig>

Above you can see that PowerShell explicitly states its version in the default installer name, so it's much easier to know what version is being installed.

Solution

Explicitly add software versions to package configurations.

Software Current Filename New Filename
Edge MicrosoftEdgeEnterpriseX64.msi MicrosoftEdgeEnterpriseX64-96.0.1054.53.msi
PowerShell PowerShell-7.2.0-win-x64.msi PowerShell-7.2.0-win-x64.msi
OneDrive OneDriveSetup.exe OneDriveSetup-21.230.1107.0004.exe
Chrome GoogleChromeStandaloneEnterprise64.msi GoogleChromeStandaloneEnterprise64-96.0.4664.93.msi
... [Filename].[Ext] [Filename]-[Version].[Ext]

Drop Support for Windows 10

Description

Moving forward these packages will be dropping support for Windows 10 and only support supported versions of Windows 11. This is easier for me and supporting Windows 10 was becoming a hassle. We are already a year into Windows 11's launch and it's adoption will only increase at a faster rate from here.

These packages housed in this project are largely for personal use and many of my personal devices are running Windows 11. In the next few months I plan on moving 90% of my devices and my family's devices to Windows 11. Continuing to support Windows 10 is no longer necessary and more of a burden. A large part of this is the significant change in Windows Terminal behavior as noted in #27.

Remove Unused Packages

Description

I think it is time to remove packages that I no longer use very often. This will help improve maintainability.

Additionally, I plan on separating out the CleanSetup package to further improve maintainability and transitioning this repository towards Winget configurations.

Packages to Remove

  • Terminal
  • Terminal Plus
  • Virtual Machine Core

Include VMware Tools in Virtual Machine Core package

Description

I think I should include the VMware Tools installer in the Virtual Machine Core package. I have to always install VMware Tools manually and having it automatically installed during/before OOBE would be nice.

Drawbacks

The only main issue is that VMware Tools is only for VMware virtual machines. That means the Virtual Machine Core package would become less universal and only work in VMware Products without modification. The package size will also increase by ~70MB as well.

Update package asset scripts

Summary

The Custom-Assets.bat scripts are very simple which is good and bad. However, I feel I quickly threw something together that just gets the job done. The current implementation has many drawbacks and these scripts should be updated and expanded.

To Do

  • Convert scripts to better language, like PowerShell
  • #32
  • #33

Do scripts overwrite settings?

Summary

As part of a larger effort #31, the package asset scripts need a refresh. Quickly glancing over them, I fear that they may overwrite the user's terminal settings if the settings.json already exists in their user directory.

To Do

  • Does it overwrite user settings?
    • Yes it does.
  • How should we handle this?
    • Never overwrite settings?
    • Certain packages overwrite settings?
    • Some sort of parameter that dictates if settings are overwritten or left alone?

Microsoft HEVCVideoExtension is included in Windows 11 22H2

Description

Microsoft.HEVCVideoExtension is now included by default in Windows 11 22H2, and therefore it can be removed from the provisioning packages.

Context

Looking at insider build 22621 from May it seems that Microsoft.HEVCVideoExtension is now included by default in Windows. That is nice, if this makes it to stable. Previously you had to pay for the HEVC extension, or sideload the free manufacturer only version which is the one listed above.

Store Extension Package Price
HEVC Video Extensions Microsoft.HEVCVideoExtensions $0.99
HEVC Video Extensions from Device Manufacturer Microsoft.HEVCVideoExtension Free

Notice the omission of the s, in the free and now included package name.

Originally posted by @aisgbnok in #30 (comment)

Handle script run on initial setup or after setup

Summary

Packages can be installed during OOBE (initial setup) or right from a user profile (after setup). There are some important distinctions that need to be made depending on which scenario the package is installed.

Details / To Do

  • Correctly detect if the package is being installed on or after initial setup.
  • If initial setup, then inject settings.json into the default user directory.
  • If after setup, then handle according to #32

Align Package Versions

Align provisioning package versions to improve understandability. They all use the same sources/assets so it makes more sense to keep the versions aligned. This way it is easier to know that they were all compiled using the same assets (i.e., same chrome, edge, intel, etc. versions).

Visual

Package Name Old Version Aligned Version
Clean Setup 3.123 3.140
NetLab Core 1.013 3.140
Terminal 1.033 3.140
Terminal+ 1.033 3.140
Virtual Machine Core 1.043 3.140

Previously

  • Each package had its own individual version number, even though all packages were compiled from the same sources.
  • Clean Setup had the highest version number because it has undergone some significant changes.
  • Virtual Machine Core and

Moving Forward

I have decided for simplicity and understandability to align all package versions under this repository. Now it is easy to understand that all packages with a version of X.XXX are compiled from the same sources (i.e., they both install the same version of chrome, edge, PowerShellCore, etc.).

A package's version will only be modified if the package was updated, so there may be version jumps.

Example

Clean Setup contains intel drivers, whereas the other packages do not. If intel drivers get updated then Clean Setup will be updated and it's version will increase. (For the purposes of this example lets say it increases to 3.150) However, all of the other packages won't have their version increased. (They stay on 3.140).

Later Chrome gets updated and all packages that install Chrome are updated. Their version number will then go to the newest version number plus some. (Every package that installs Chrome will be given version 3.151.)

In effect, the version number acts as the main version number for all of the packages while not all of the packages are included with each version bump/release.

PowerShellCore or PowerShell

The new PowerShell that these packages install is technically called PowerShellCore, but I'm not sure if it should be simplified to just PowerShell. There are references to both PowerShellCore and PowerShell throughout the installers, documentation, etc.

Remove unneeded packages

Description

To improve maintainability, I think it is time to consolidate packages. This means removing packages that are no longer used.

Packages to remove

  • GCI Air Gap
  • NetLab Core

Prepare for Windows 11 22H2

Summary

Review packages and ensure they provide the best experience for Windows 11 22H2.

To Do

  • Reevaluate the default Provisioned Appx Packages
  • #27
    • Terminal comes preinstalled and as the default now. Terminal will no longer be packaged in this project.

Not all software for building packages is included in repo

Some software like drivers are large (500mb+), and not included in this repo.

Something needs to be done to improve this experience. Whether it is simply updating the documentation to better inform users of this, adding scripts or steps to download necessary files, etc.

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.