# Cli R&D
## [Choco/Chocolatey](https://chocolatey.org/)
Chocolatey is a software management solution unlike anything else you've ever experienced on Windows. Chocolatey brings the concepts of true package management to allow you to version things, manage dependencies and installation order, better inventory management, and other features.
- Install Package `choco install pkgname`, adding `-y` will confirm all the prompts : `choco install pkgname -y`
- Checking all commands and flags available : `choco --help`
### Available Commands
* list - lists remote or local packages
* find - searches remote or local packages (alias for search)
* search - searches remote or local packages (alias for list)
* info - retrieves package information. Shorthand for choco search pkgname --exact --verbose
* install - installs packages from various sources
* pin - suppress upgrades for a package
* outdated - retrieves packages that are outdated. Similar to upgrade all --noop
* upgrade - upgrades packages from various sources
* uninstall - uninstalls a package
* pack - packages up a nuspec to a compiled nupkg
* push - pushes a compiled nupkg
* new - generates files necessary for a chocolatey package from a template
* sources - view and configure default sources (alias for source)
* source - view and configure default sources
* config - Retrieve and configure config file settings
* feature - view and configure choco features
* features - view and configure choco features (alias for feature)
* setapikey - retrieves, saves or deletes an apikey for a particular source (alias for apikey)
* apikey - retrieves, saves or deletes an apikey for a particular source
* unpackself - have chocolatey set itself up
* version - [DEPRECATED] will be removed in v1 - use `choco outdated` or `cup <pkg|all> -whatif` instead
* update - [DEPRECATED] RESERVED for future use (you are looking for upgrade, these are not the droids you are looking for)
### Flags
```shell=
-?, --help, -h
Prints out the help menu.
-d, --debug
Debug - Show debug messaging.
-v, --verbose
Verbose - Show verbose messaging. Very verbose messaging, avoid using
under normal circumstances.
--trace
Trace - Show trace messaging. Very, very verbose trace messaging. Avoid
except when needing super low-level .NET Framework debugging. Available
in 0.10.4+.
--nocolor, --no-color
No Color - Do not show colorization in logging output. This overrides
the feature 'logWithoutColor', set to 'False'. Available in 0.10.9+.
--acceptlicense, --accept-license
AcceptLicense - Accept license dialogs automatically. Reserved for
future use.
-y, --yes, --confirm
Confirm all prompts - Chooses affirmative answer instead of prompting.
Implies --accept-license
-f, --force
Force - force the behavior. Do not use force during normal operation -
it subverts some of the smart behavior for commands.
--noop, --whatif, --what-if
NoOp / WhatIf - Don't actually do anything.
-r, --limitoutput, --limit-output
LimitOutput - Limit the output to essential information
--timeout, --execution-timeout=VALUE
CommandExecutionTimeout (in seconds) - The time to allow a command to
finish before timing out. Overrides the default execution timeout in the
configuration of 2700 seconds. '0' for infinite starting in 0.10.4.
-c, --cache, --cachelocation, --cache-location=VALUE
CacheLocation - Location for download cache, defaults to %TEMP% or value
in chocolatey.config file.
--allowunofficial, --allow-unofficial, --allowunofficialbuild, --allow-unofficial-build
AllowUnofficialBuild - When not using the official build you must set
this flag for choco to continue.
--failstderr, --failonstderr, --fail-on-stderr, --fail-on-standard-error, --fail-on-error-output
FailOnStandardError - Fail on standard error output (stderr), typically
received when running external commands during install providers. This
overrides the feature failOnStandardError.
--use-system-powershell
UseSystemPowerShell - Execute PowerShell using an external process
instead of the built-in PowerShell host. Should only be used when
internal host is failing. Available in 0.9.10+.
--no-progress
Do Not Show Progress - Do not show download progress percentages.
Available in 0.10.4+.
--proxy=VALUE
Proxy Location - Explicit proxy location. Overrides the default proxy
location of ''. Available for config settings in 0.9.9.9+, this CLI
option available in 0.10.4+.
--proxy-user=VALUE
Proxy User Name - Explicit proxy user (optional). Requires explicity
proxy (`--proxy` or config setting). Overrides the default proxy user of
''. Available for config settings in 0.9.9.9+, this CLI option available
in 0.10.4+.
--proxy-password=VALUE
Proxy Password - Explicit proxy password (optional) to be used with
username. Requires explicity proxy (`--proxy` or config setting) and
user name. Overrides the default proxy password (encrypted in settings
if set). Available for config settings in 0.9.9.9+, this CLI option
available in 0.10.4+.
--proxy-bypass-list=VALUE
ProxyBypassList - Comma separated list of regex locations to bypass on
proxy. Requires explicity proxy (`--proxy` or config setting). Overrides
the default proxy bypass list of ''. Available in 0.10.4+.
--proxy-bypass-on-local
Proxy Bypass On Local - Bypass proxy for local connections. Requires
explicity proxy (`--proxy` or config setting). Overrides the default
proxy bypass on local setting of 'True'. Available in 0.10.4+.
--log-file=VALUE
Log File to output to in addition to regular loggers. Available in 0.1-
0.8+.
```
### Experiments
- Running : `choco info zip`
```shell=
Title: Info-ZIP | Published: 22-Jul-15
Package approved by ferventcoder on Dec 28 2015 16:44:48.
Package testing status: Passing on Dec 20 2015 11:36:25.
Number of Downloads: 274936 | Downloads for this version: 274936
Package url
Chocolatey Package Source: n/a
Package Checksum: 'BoA6DFar2Pc3q618yD3W5lhrwh0t5nercxIcR0UtVK6XrqhY+qLIwzFn2i9HP2b9BLEWDGJ/YvLjuvxoOOfF0w==' (SHA512)
Tags: compression zip archive
Software Site: http://www.info-zip.org/
Software License: http://www.info-zip.org/license.html
Summary: package and compress (archive) files
Description: Info-ZIP's purpose is to provide free, portable, high-quality versions of the Zip and UnZip compressor-archiver utilities that are compatible with the DOS-based PKZIP by PKWARE, Inc.
```
- Running : `choco list zip`
```shell=
zip 3.0 [Approved] Downloads cached for licensed users
zip.template 1.0.0 [Approved]
unzip 6.0 [Approved] Downloads cached for licensed users
7zip 19.0 [Approved]
7zip.portable 19.0 [Approved]
7zip.commandline 16.02.0.20170209 [Approved]
7zip.install 19.0 [Approved]
Devbox-UnZip 5.52 - Possibly broken
peazip 8.3.0 [Approved]
lhaplus 1.59.3 - Possibly broken
peazip.portable 6.0.3 [Approved] Downloads cached for licensed users
peazip.install 8.3.0 [Approved]
kzip 0.0.20070414 - Possibly broken
archive 0.0.7 [Approved]
zipinst 1.21 [Approved] Downloads cached for licensed users
VirtualEngine-Compression 1.1.0.18 [Approved] Downloads cached for licensed users
bandizip 7.21 [Approved] Downloads cached for licensed users
DeflOpt 2.0.7 - Possibly broken
freearc 0.666 [Approved]
freearc.install 0.666 [Approved] Downloads cached for licensed users - Possibly broken for FOSS users (due to original download location changes by vendor)
freearc.portable 0.666 [Approved] Downloads cached for licensed users
universal-extractor 1.6.1.20161126 [Approved] Downloads cached for licensed users
Fitbit.Connect 2.0.0.6512 [Approved] - Possibly broken
archiver 3.1.0 [Approved] Downloads cached for licensed users
Easy7zip 0.1.6 [Approved] Downloads cached for licensed users
winmerge-7z 0028.465.920 [Approved] - Possibly broken
passcovery 3.1 [Approved] Downloads cached for licensed users
yacreader 9.8.2 [Approved]
carbon 2.10.2 [Approved]
lzip7z 1.6 [Approved]
bzip2 1.0.5 [Approved]
lzip 1.19 [Approved]
gzip 1.3.12 [Approved]
7zip-zstd 1.4.9.20 [Approved]
jwpce 1.50.20200915 [Approved] Downloads cached for licensed users
lhaca 0.76 [Approved] - Possibly broken
keepass-classic-langfiles 1.31 [Approved]
syncback 7.6.36.0 [Approved] - Possibly broken
keepass-langfiles 2.41 [Approved]
wpilib 2021.3.1 [Approved]
shexview.install 2.01 [Approved] Downloads cached for licensed users
shexview.portable 2.01 [Approved] Downloads cached for licensed users
intel-proset-drivers 22.60.0 [Approved]
git-lfx 0.1.0 [Approved]
shexview 2.01 [Approved]
xmplay 3.8.5 [Approved]
MSFilterPack2-redist-x64 1.1 [Approved]
PsGet 1.0.4.407 [Approved]
ripgrep 13.0.0.20210621 [Approved]
modern7z 1.8.7.2 [Approved]
ArecaBackup 7.5 [Approved] Downloads cached for licensed users
winrar 6.02 [Approved] Downloads cached for licensed users
hazelcast 3.5 [Approved] Downloads cached for licensed users
sync 2.20 [Approved] Downloads cached for licensed users
HtmlPackager 0.1.9 [Approved]
capture2text 4.6.1 [Approved] Downloads cached for licensed users
transwiz-new 1.17 [Approved] Downloads cached for licensed users
flac 1.3.2 [Approved] Downloads cached for licensed users
wavpack7z 1.3 [Approved]
libressl 2.5.5 [Approved]
weather-chrome 4.2.97 [Approved]
uniextract.portable 1.6.1 [Approved] Downloads cached for licensed users
getdiz 4.91 [Approved]
batch-file-encrypt 5.0.0 [Approved] Downloads cached for licensed users
batch-files 5.0.0 [Approved] Downloads cached for licensed users
file-hash-generator 5.0.0 [Approved] Downloads cached for licensed users
freecommander 2009.2.2
uniextract 1.6.1 [Approved]
uniextract.install 1.6.1 [Approved] Downloads cached for licensed users
0install 2.20.0 [Approved]
nexus-root-toolkit 2.1.9.20170607 [Approved]
golly 4.0 [Approved]
wimlib 1.13.4 [Approved] Downloads cached for licensed users
batch-hex-editor 5.0.0 [Approved] Downloads cached for licensed users
batch-text-file-editor 5.0.0 [Approved] Downloads cached for licensed users
PersonalBackup 6.2.0701 [Approved] Downloads cached for licensed users
nmm 0.83.3 [Approved]
leanify 0.4.2 [Approved] Downloads cached for licensed users
kindle-comic-converter 5.5.2.20210830 [Approved]
allow-block-remove-firewall 1.0.0 [Approved] Downloads cached for licensed users
batch-regex 5.0.0 [Approved] Downloads cached for licensed users
sleeponlan 1.1 [Approved] Downloads cached for licensed users
CLOC 1.90 [Approved]
vim 8.2.3595 [Approved]
komodo-ide 12.0.1 [Approved] Downloads cached for licensed users
choco-cleaner 0.0.8.4 [Approved]
internet-download-manager 6.39.8 [Approved] Downloads cached for licensed users
bgb 1.5.9 [Approved] Downloads cached for licensed users
disk-wipe 1.7 [Approved] Downloads cached for licensed users
stigviewer 2.15 [Approved] Downloads cached for licensed users
90 packages found.
```
### Recipes
- Uses powershell
- Structure
```shell=
$packageName= 'bob'
$toolsDir = "$(Split-Path -Parent $MyInvocation.MyCommand.Definition)"
$url = 'https://somewhere.com/file.msi'
$url64 = 'https://somewhere.com/file-x64.msi'
$packageArgs = @{
packageName = $packageName
fileType = 'msi'
url = $url
url64bit = $url64
silentArgs = "/qn /norestart"
validExitCodes= @(0, 3010, 1641)
softwareName = 'Bob*'
checksum = '12345'
checksumType = 'sha256'
checksum64 = '123356'
checksumType64= 'sha256'
}
Install-ChocolateyPackage @packageArgs
```
### Examples
- flashplayerplugin

- chrome

### Supports
- Windows
## [Snap](https://snapcraft.io/)
Snaps are app packages for desktop, cloud and IoT that are easy to install, secure, cross‐platform and dependency‐free. Snaps are discoverable and installable from the Snap Store, the app store for Linux with an audience of millions.
- Install Package `snap install pkgname`
- Checking all commands and flags `man snap`
## Segments of snap
- Snap: Used to refer to both the application package format and the command-line interface.
- Snapd: A Snap daemon that helps in managing and maintaining snaps.
- Snap Store: Home to all snaps; allows you to upload your own snaps and explore and install new snaps.
- Snapcraft: A framework that helps you build your own snaps.
### Basic Commands
```shell=
Commonly used commands can be classified as follows:
Basics: find, info, install, remove, list
...more: refresh, revert, switch, disable, enable, create-cohort
History: changes, tasks, abort, watch
Daemons: services, start, stop, restart, logs
Permissions: connections, interface, connect, disconnect
Configuration: get, set, unset, wait
App Aliases: alias, aliases, unalias, prefer
Account: login, logout, whoami
Snapshots: saved, save, check-snapshot, restore, forget
Device: model, reboot, recovery
... Other: warnings, okay, known, ack, version
Development: download, pack, run, try
For more information about a command, run 'snap help <command>'.
For a short summary of all commands, run 'snap help --all'.
```
### Experiments
- Running `snap search zip --narrow`
```shell=
Name Version Publisher Notes Summary
zipstream 0.18.7 mamantoha - Easily share files and directories over the network
telegram-desktop 3.2.2 telegram.desktop - Telegram Desktop
ark 19.08.0 kde✓ - Work with file archives
p7zip-desktop 16.02.2 ernytech - P7Zip - Desktop
exelearning 2.6 exelearning-project - Your Free and Open Source Editor to create Educational Resources.
opencomic 0.2.1 ollm - OpenComic
sharik-app 3.1 marchellodev - An open-source, cross-platform solution for sharing files within a local network
costumemaster-reloaded 1.0.0 ubunturox104 - Switch costume. Solve puzzles. Wake up.
kubu 1.1.4 mrsoir - The Kubu File Manager puts emphasis on a clean look and makes it easy to render, search and traverse your file system.
b1freearchiver 1.5.86.4890 claudioandre-br - Free file archiver and encryption software
mymonero 1.2.1 tekkzbadger - MyMonero
docker-image-save 1.6.6 jadolg - Download zip compressed Docker images.
irpf2017 1.0 claudioandre-br - Programa do IRPF 2017
telegram-testbart 1.7.7 snap-retiring - A cloud-based messaging app with a focus on security and speed.
```
### Recipes / Containers / Bundles
snap does not have recipes, where the recipe tells what to install as dependencies. rather comes as a bundle containing all it needs.
- Directory `/var/lib/snapd/snaps` generally holds all the bundles (.snap files)
- Each snap runs in its own **containerized sandbox**
- Auto updates
- Larger in size
### Supports
- Linux Distributions
## [Homebrew/brew](https://brew.sh/)
Homebrew is the easiest and most flexible way to install the UNIX tools Apple didn’t include with macOS. It can also install software not packaged for your Linux distribution to your home directory without requiring sudo.
- Install package `brew install pkgname`
- Checking all commands and flags `man brew`
### Basic Commands
```shell=
Example usage:
brew search TEXT|/REGEX/
brew info [FORMULA|CASK...]
brew install FORMULA|CASK...
brew update
brew upgrade [FORMULA|CASK...]
brew uninstall FORMULA|CASK...
brew list [FORMULA|CASK...]
Troubleshooting:
brew config
brew doctor
brew install --verbose --debug FORMULA|CASK
Contributing:
brew create URL [--no-fetch]
brew edit [FORMULA|CASK...]
Further help:
brew commands
brew help [COMMAND]
man brew
https://docs.brew.sh
```
### Recipes
- Uses Ruby
- Structure
```shell=
class Wget < Formula
homepage "https://www.gnu.org/software/wget/"
url "https://ftp.gnu.org/gnu/wget/wget-1.15.tar.gz"
sha256 "52126be8cf1bddd7536886e74c053ad7d0ed2aa89b4b630f76785bac21695fcd"
def install
system "./configure", "--prefix=#{prefix}"
system "make", "install"
end
end
```
### Example
```shell=
class HelloWorld < Formula
desc "Rust that simply prints 'Hello, world!'"
homepage "https://github.com/JLDLaughlin/homebrew_hello_world"
url "https://github.com/JLDLaughlin/rust_hello_world/releases/download/0.1.0/hello.tar.gz"
version "0.1.0"
sha256 "fd68121200c67ae5f3b4856a7061e5070ac4c64c0b293134e0889e257d6f34f4"
depends_on "rust" => :build
def install
system "cargo", "build", "--release", "--bin", "hello"
bin.install "target/release/hello"
end
test do
# This test is not good!
system "#{bin}/hello", "--version"
end
end
```
### Supports
- MacOS
- Linux
## Difference between -arg and --arg
It is a matter of convention. POSIX standard programs usually only have single character options, and they're all prefixed with a single hyphen. The longer versions are a GNU improvement for clarity, as far as I can tell, and usually are prefixed with double hyphens. You can see this in the libraries and programs used to parse options - getopt and gnu-getopt respectively. Non-GNU and non-POSIX-compliant programs may do something else altogether. Note that you really can't be sure that the long form of an argument may be the same from program to program. -f usually means --force, but not with apt-get install (common misconception). -v may mean version - usually, or --verbose, and so on. Check the man pages or other documentation to be sure.
## Summary/Compare
- Install
- Choco `choco install pkgname -y`
- install command supports flags
- Snap `snap install pkgname`
- install command supports flags
- Brew `brew install pkgname`
- install command does not support any flags
- Recipes
- Choco
- Uses powershell scripts
- Snap
- No recipes
- Bundles everything to `.snap` file
- Brew
- Uses ruby
- Uses Git
- Works On
- Choco
- Windows
- Snap
- Linux, Possible for development : MacOs, Windows
- Brew
- MacOs, Linux
## Links
- [everything-you-need-to-know-about-snap-and-snap-store](https://www.makeuseof.com/everything-you-need-to-know-about-snap-and-snap-store/)
- [how-does-homebrew-work-starring-rust](https://jldlaughlin.medium.com/-94ae5aa24552)
## Need To Learn
- brew bottles, nuget, filesystem image, cmdlets, powershell, powershell objects