aspera-cli 4.22.0 → 4.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +374 -364
  4. data/README.md +255 -155
  5. data/lib/aspera/agent/direct.rb +1 -1
  6. data/lib/aspera/api/aoc.rb +9 -12
  7. data/lib/aspera/api/httpgw.rb +8 -4
  8. data/lib/aspera/ascmd.rb +14 -6
  9. data/lib/aspera/ascp/installation.rb +6 -3
  10. data/lib/aspera/assert.rb +3 -3
  11. data/lib/aspera/cli/hints.rb +9 -1
  12. data/lib/aspera/cli/main.rb +1 -1
  13. data/lib/aspera/cli/manager.rb +1 -1
  14. data/lib/aspera/cli/plugin.rb +1 -1
  15. data/lib/aspera/cli/plugins/aoc.rb +33 -23
  16. data/lib/aspera/cli/plugins/config.rb +20 -15
  17. data/lib/aspera/cli/plugins/node.rb +96 -92
  18. data/lib/aspera/cli/plugins/server.rb +1 -0
  19. data/lib/aspera/cli/transfer_agent.rb +7 -11
  20. data/lib/aspera/cli/version.rb +1 -1
  21. data/lib/aspera/data_repository.rb +1 -0
  22. data/lib/aspera/environment.rb +1 -0
  23. data/lib/aspera/log.rb +1 -0
  24. data/lib/aspera/oauth/base.rb +2 -0
  25. data/lib/aspera/oauth/factory.rb +1 -0
  26. data/lib/aspera/preview/file_types.rb +40 -33
  27. data/lib/aspera/preview/generator.rb +1 -1
  28. data/lib/aspera/products/connect.rb +1 -0
  29. data/lib/aspera/rest.rb +18 -7
  30. data/lib/aspera/rest_error_analyzer.rb +1 -0
  31. data/lib/aspera/ssh.rb +1 -1
  32. data/lib/aspera/temp_file_manager.rb +1 -0
  33. data/lib/aspera/timer_limiter.rb +7 -5
  34. data/lib/aspera/transfer/async_conf.schema.yaml +716 -0
  35. data/lib/aspera/transfer/sync.rb +14 -4
  36. data/lib/aspera/transfer/sync_instance.schema.yaml +7 -0
  37. data/lib/aspera/transfer/sync_session.schema.yaml +7 -0
  38. data.tar.gz.sig +0 -0
  39. metadata +3 -5
  40. metadata.gz.sig +0 -0
  41. data/examples/dascli +0 -30
  42. data/examples/get_proto_file.rb +0 -8
  43. data/examples/proxy.pac +0 -60
data/README.md CHANGED
@@ -1,22 +1,21 @@
1
1
  # Command Line Interface for IBM Aspera products
2
2
  <!--
3
3
  DO NOT EDIT: THIS FILE IS GENERATED, edit docs/README.erb.md, for details, read docs/README.md
4
-
5
- markdownlint-disable MD033 MD003 MD053
6
- cspell:ignore Serban Antipolis
7
4
  PANDOC_META_BEGIN
8
- subtitle: "ascli 4.22.0.pre"
5
+ subtitle: "ascli 4.23.0"
9
6
  author: "Laurent MARTIN"
10
7
  PANDOC_META_END
11
8
  -->
12
9
 
10
+ <!-- xmarkdownlint-disable MD033 MD003 MD053 -->
11
+
13
12
  [![Gem Version](https://badge.fury.io/rb/aspera-cli.svg)](https://badge.fury.io/rb/aspera-cli)
14
13
  [![unit tests](https://github.com/IBM/aspera-cli/actions/workflows/test.yml/badge.svg?branch=main)](https://github.com/IBM/aspera-cli/actions)
15
14
  [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/5861/badge)](https://bestpractices.coreinfrastructure.org/projects/5861)
16
15
 
17
16
  ## Introduction
18
17
 
19
- Version : 4.22.0.pre
18
+ Version : 4.23.0
20
19
 
21
20
  Laurent/2016-2025
22
21
 
@@ -67,10 +66,10 @@ It is designed for:
67
66
  - `curl` (for REST calls)
68
67
  - Aspera transfer (`ascp`)
69
68
 
70
- If the need is to perform operations programmatically in languages such as: C, Go, Python, NodeJS, ... then it is better to directly use [Aspera APIs](https://ibm.biz/aspera_api)
69
+ If the need is to perform operations programmatically in languages such as: C/C++, Go, Python, NodeJS, ... then it is better to directly use [Aspera APIs](https://ibm.biz/aspera_api)
71
70
 
72
71
  - Product APIs (REST) : e.g. AoC, Faspex, node
73
- - Transfer SDK : with gRPC interface and language stubs (C, C++, Python, .NET/C#, java, Go, Ruby, Rust, etc...)
72
+ - Transfer SDK : with gRPC interface and language stubs (C/C++, Python, .NET/C#, java, Go, Ruby, Rust, etc...)
74
73
 
75
74
  Using APIs (application REST API and transfer SDK) will prove to be easier to develop and maintain.
76
75
  Code examples here: <https://github.com/laurent-martin/aspera-api-examples>
@@ -101,14 +100,14 @@ Command line arguments beginning with `my_` in examples, e.g. `my_param_value`,
101
100
  Some commands will start an Aspera transfer (e.g. `upload`).
102
101
  The transfer is not directly implemented in `ascli`, rather `ascli` uses one of the external Aspera Transfer Clients called **[Transfer Agents](#transfer-clients-agents)**.
103
102
 
104
- > **Note:** A **[Transfer Agent](#transfer-clients-agents)** is a client for the remote Transfer Server (HSTS).
103
+ > **Note:** A **[Transfer Agent](#transfer-clients-agents)** is a client for the remote Transfer Server (HSTS/HSTE).
105
104
  A **[Transfer Agent](#transfer-clients-agents)** can be local or remote...
106
- For example a remote Aspera Server may be used as a transfer agent (using Node API).
105
+ For example a remote Aspera Transfer Server may be used as a transfer agent (using Node API).
107
106
  i.e. using option `--transfer=node`
108
107
 
109
108
  ## Quick Start
110
109
 
111
- This section guides you from installation, first use and advanced use.
110
+ This section guides you from installation to first use and advanced use.
112
111
 
113
112
  First, follow section: [Installation](#installation) (Ruby, Gem, FASP) to start using `ascli`.
114
113
 
@@ -116,7 +115,7 @@ Once the gem is installed, `ascli` shall be accessible:
116
115
 
117
116
  ```console
118
117
  $ ascli --version
119
- 4.22.0.pre
118
+ 4.23.0
120
119
  ```
121
120
 
122
121
  ### First use
@@ -202,7 +201,7 @@ complete
202
201
 
203
202
  Get familiar with configuration, options, commands : [Command Line Interface](#command-line-interface).
204
203
 
205
- Then, follow the section relative to the product you want to interact with (Aspera on Cloud, Faspex, ...) : [Application Plugins](plugins)
204
+ Then, follow the section relative to the product you want to interact with (Aspera on Cloud, Faspex, ...) : [Application Plugins](#plugins)
206
205
 
207
206
  ## Installation
208
207
 
@@ -230,7 +229,10 @@ A package with pre-installed Ruby, gem and `ascp` may also be provided.
230
229
  It is planned to provide `ascli` as a single platform-dependent executable.
231
230
  [Beta releases can be found here](https://ibm.biz/aspera-cli-exe).
232
231
 
233
- **Note:** This is a Beta feature. On Linux, the executable requires a minimum GLIBC version. Installation of `ascp` is still required separately. Refer to [Install `ascp`](#installation-of-ascp-through-transferd).
232
+ **Note:** This is a Beta feature.
233
+ On Linux, the executable requires a minimum GLIBC version.
234
+ Installation of `ascp` is still required separately.
235
+ Refer to [Install `ascp`](#installation-of-ascp-through-transferd).
234
236
 
235
237
  On Linux, check the minimum required GLIBC on this site: [repology.org](https://repology.org/project/glibc/versions), or check your GLIBC version with `ldd`:
236
238
 
@@ -242,7 +244,7 @@ ldd --version | head -n1
242
244
  ldd (GNU libc) 2.34
243
245
  ```
244
246
 
245
- Check an executable's (`ascli`, `ascp`) minimum required GLIBC version:
247
+ Check an executable's (e.g. `/bin/bash`, `ascli`, `ascp`) minimum required GLIBC version:
246
248
 
247
249
  ```bash
248
250
  objdump -p /bin/bash | sed -n 's/^.*GLIBC_//p' | sort -V | tail -n1
@@ -252,9 +254,9 @@ objdump -p /bin/bash | sed -n 's/^.*GLIBC_//p' | sort -V | tail -n1
252
254
  2.34
253
255
  ```
254
256
 
255
- > **Note:** if `objdump` is not available, then use `strings` or `grep -z 'GLIBC_'|tr \\0 \\n`
257
+ > **Note:** If `objdump` is not available, then use `strings` or `grep -z 'GLIBC_'|tr \\0 \\n`
256
258
 
257
- The required GLIBC version for `ascp` can be found in the [Release Notes of HSTS](https://www.ibm.com/docs/en/ahts) or [here](https://eudemo.asperademo.com/download/sdk.html).
259
+ The required GLIBC version for `ascp` can be found in the [Release Notes of HSTS](https://www.ibm.com/docs/en/ahts) or [in this page](https://eudemo.asperademo.com/download/sdk.html).
258
260
 
259
261
  ### Ruby
260
262
 
@@ -558,7 +560,7 @@ gem install bigdecimal -v '~> 3.1.9'
558
560
  Once you have Ruby and rights to install gems, install the `aspera-cli` gem and its dependencies:
559
561
 
560
562
  ```bash
561
- gem install aspera-cli --pre
563
+ gem install aspera-cli
562
564
  ```
563
565
 
564
566
  To upgrade to the latest version:
@@ -607,10 +609,7 @@ This can be installed either be installing an Aspera transfer software or using
607
609
 
608
610
  #### Installation of `ascp` through `transferd`
609
611
 
610
- The easiest option to install `ascp` is through the use of the IBM Aspera Transfer Daemon.
611
-
612
- Supported platforms are listed in the [Release Notes](https://developer.ibm.com/apis/catalog/aspera--aspera-transfer-sdk/Release+notes) and archives can be downloaded from [Downloads](https://developer.ibm.com/apis/catalog/aspera--aspera-transfer-sdk/downloads/downloads.json).
613
-
612
+ The easiest option to install `ascp` is through the use of the IBM Aspera Transfer Daemon (`transferd`).
614
613
  Install using `ascli` for the current platform with:
615
614
 
616
615
  ```bash
@@ -623,14 +622,18 @@ or
623
622
  ascli config transferd install
624
623
  ```
625
624
 
626
- The installation of the transfer binary follows those steps:
625
+ The installation of the transfer binaries follows those steps:
627
626
 
628
- - Check the value of option `sdk_url`: if the value is the default value `DEF`, then the procedure follows, else it specified a URL where to take the archive from.
629
- - The location of archives is retrieved from the URL specified by option `locations_url` whose default value is <https://ibm.biz/sdk_location>
630
- - The archive for the current system architecture (CPU and OS) is selected and downloaded.
627
+ - Check the value of option `sdk_url`: if the value is the default value `DEF`, then the procedure follows, else it specifies directly the URL where to take the archive from.
628
+ - Download the YAML file from the URL specified by option `locations_url` whose default value is <https://ibm.biz/sdk_location>. This file provides the list of supported OS, CPU and versions of the Aspera Transfer Daemon.
629
+ - Select the archive for the current system architecture (CPU and OS) is selected and downloaded. An alternate version can be specified as position argument, e.g. `1.1.3`.
630
+ - By default, the archive is extracted to `$HOME/.aspera/sdk`, this can be changed by setting the `sdk_folder` option.
631
631
 
632
- The option `locations_url` can be set to override the URL where the list of versions is located, in case of air-gap environment or for testing.
633
- Option `sdk_url` can be set to specify a direct location for the transfer binaries.
632
+ | Option | Default | Description |
633
+ |-----------------|---------|-------------|
634
+ | `sdk_url` | `DEF` | URL to download the Aspera Transfer SDK archive. `DEF` means: select from available archives. |
635
+ | `locations_url` | `https://ibm.biz/sdk_location` | URL to get download URLs of Aspera Transfer Daemon from IBM official repository. |
636
+ | `sdk_folder` | `$HOME/.aspera/sdk` | Folder where the SDK archive is extracted. |
634
637
 
635
638
  Available Transfer Daemon versions available from `locations_url` can be listed with: `ascli config transferd list`
636
639
 
@@ -652,7 +655,7 @@ To download it, pipe to `config download`:
652
655
  ascli config transferd list --select=@json:'{"platform":"osx-arm64","version":"1.1.3"}' --fields=url | ascli config download @stdin:
653
656
  ```
654
657
 
655
- If installation from a local file preferred instead of fetching from internet: one can specify the location of the SDK file with option `sdk_url`:
658
+ If installation from a local file preferred (airgap installation) instead of fetching from internet: one can specify the location of the SDK file with option `sdk_url`:
656
659
 
657
660
  ```bash
658
661
  ascli config ascp install --sdk-url=file:///macos-arm64-1.1.3-c6c7a2a.zip
@@ -660,6 +663,8 @@ ascli config ascp install --sdk-url=file:///macos-arm64-1.1.3-c6c7a2a.zip
660
663
 
661
664
  The format is: `file:///<path>`, where `<path>` can be either a relative path (not starting with `/`), or an absolute path.
662
665
 
666
+ Supported platforms are listed in the [Release Notes](https://developer.ibm.com/apis/catalog/aspera--aspera-transfer-sdk/Release+notes) and archives can be downloaded from [Downloads](https://developer.ibm.com/apis/catalog/aspera--aspera-transfer-sdk/downloads/downloads.json).
667
+
663
668
  #### Installation of `ascp` through other component
664
669
 
665
670
  If the embedded method is not used, the following packages are also suitable:
@@ -685,7 +690,7 @@ Refer to section: [Transfer Agents](#transfer-clients-agents)
685
690
 
686
691
  #### Gem files and dependencies
687
692
 
688
- The sample script: [examples/build_package.sh](examples/build_package.sh) can be used to download all necessary gems and dependencies in a `tar.gz`.
693
+ The sample script: [windows/build_package.sh](windows/build_package.sh) can be used to download all necessary gems and dependencies in a `tar.gz`.
689
694
 
690
695
  ```console
691
696
  $ ./build_package.sh aspera-cli 4.18.0
@@ -769,7 +774,7 @@ gem install --force --local *.gem
769
774
  ascli config ascp install --sdk-url=file:///sdk.zip
770
775
  ```
771
776
 
772
- > **Note:** An example of installation script is provided: [docs/install.bat](docs/install.bat)
777
+ > **Note:** An example of installation script is provided: [windows/install.bat](windows/install.bat)
773
778
 
774
779
  ### Container
775
780
 
@@ -810,7 +815,7 @@ That is simple, but there are limitations:
810
815
 
811
816
  #### Container: Details
812
817
 
813
- The container image is built from this [Dockerfile](Dockerfile.tmpl.erb).
818
+ The container image is built from this [Dockerfile](container/Dockerfile.tmpl.erb).
814
819
  The entry point is `ascli` and the default command is `help`.
815
820
 
816
821
  The container can be executed for individual commands like this: (add `ascli` commands and options at the end of the command line, e.g. `-v` to display the version)
@@ -832,7 +837,7 @@ ascli -v
832
837
  ```
833
838
 
834
839
  ```text
835
- 4.22.0.pre
840
+ 4.23.0
836
841
  ```
837
842
 
838
843
  In order to keep persistency of configuration on the host, you should specify your user's configuration folder as a volume for the container.
@@ -877,9 +882,9 @@ asclish
877
882
 
878
883
  #### Container: Sample start script
879
884
 
880
- A convenience sample script is also provided: download the script [`dascli`](../examples/dascli) from [the GIT repo](https://raw.githubusercontent.com/IBM/aspera-cli/main/examples/dascli) :
885
+ A convenience sample script is also provided: download the script [`dascli`](../container/dascli) from [the GIT repo](https://raw.githubusercontent.com/IBM/aspera-cli/main/container/dascli) :
881
886
 
882
- > **Note:** If you have installed `ascli`, the script `dascli` can also be found: `cp $(ascli config gem path)/../examples/dascli ascli`
887
+ > **Note:** If you have installed `ascli`, the script `dascli` can also be found: `cp $(ascli config gem path)/../container/dascli ascli`
883
888
 
884
889
  Some environment variables can be set for this script to adapt its behavior:
885
890
 
@@ -899,7 +904,7 @@ To add local storage as a volume, you can use the env var `docker_args`:
899
904
  Example of use:
900
905
 
901
906
  ```bash
902
- curl -o ascli https://raw.githubusercontent.com/IBM/aspera-cli/main/examples/dascli
907
+ curl -o ascli https://raw.githubusercontent.com/IBM/aspera-cli/main/container/dascli
903
908
  chmod a+x ascli
904
909
  export xferdir=$HOME/xferdir
905
910
  mkdir -p $xferdir
@@ -2170,7 +2175,7 @@ preset set default shares conf_name
2170
2175
  preset show conf_name
2171
2176
  preset unset conf_name param
2172
2177
  preset update conf_name --p1=v1 --p2=v2
2173
- proxy_check --fpac=@file:examples/proxy.pac https://eudemo.asperademo.com --proxy-credentials=@list:,user,pass
2178
+ proxy_check --fpac=@file:proxy.pac https://eudemo.asperademo.com --proxy-credentials=@list:,user,pass
2174
2179
  pubkey @file:my_key
2175
2180
  remote_certificate chain https://node.example.com/path
2176
2181
  remote_certificate name https://node.example.com/path
@@ -2298,9 +2303,9 @@ The wizard is a command that asks the user for information and creates an [Optio
2298
2303
 
2299
2304
  It takes three optional arguments:
2300
2305
 
2301
- - the URL of the application, else it will ask for it
2302
- - the plugin name: it limits detection to a given plugin, else it will try to detect known plugins from the URL
2303
- - the preset name: it will create a new [Option Preset](#option-preset) with this name, else it will use specific information to generate a unique preset name.
2306
+ - The URL of the application, else it will ask for it;
2307
+ - The plugin name: it limits detection to a given plugin, else it will try to detect known plugins from the URL
2308
+ - The preset name: it will create a new [Option Preset](#option-preset) with this name, else it will use specific information to generate a unique preset name.
2304
2309
 
2305
2310
  Special options are also available to the wizard:
2306
2311
 
@@ -3919,7 +3924,7 @@ ascli server upload "faux:///mydir?file=testfile&count=1000&size=1" --to-folder=
3919
3924
  ```text
3920
3925
  ascli -h
3921
3926
  NAME
3922
- ascli -- a command line tool for Aspera Applications (v4.22.0.pre)
3927
+ ascli -- a command line tool for Aspera Applications (v4.23.0)
3923
3928
 
3924
3929
  SYNOPSIS
3925
3930
  ascli COMMANDS [OPTIONS] [ARGS]
@@ -3990,21 +3995,21 @@ OPTIONS: global
3990
3995
  --default=ENUM Wizard: set as default configuration for specified plugin (also: update): no, [yes]
3991
3996
  --test-mode=ENUM Wizard: skip private key check step: [no], yes
3992
3997
  --key-path=VALUE Wizard: path to private key for JWT
3993
- --ascp-path=VALUE Path to ascp
3994
- --use-product=VALUE Use ascp from specified product
3995
- --sdk-url=VALUE URL to get Aspera Transfer Daemon
3996
- --locations-url=VALUE URL to get locations of Aspera Transfer Daemon
3997
- --sdk-folder=VALUE SDK folder path
3998
+ --ascp-path=VALUE Ascp: Path to ascp
3999
+ --use-product=VALUE Ascp: Use ascp from specified product
4000
+ --sdk-url=VALUE Ascp: URL to get Aspera Transfer Executables
4001
+ --locations-url=VALUE Ascp: URL to get locations of Aspera Transfer Daemon
4002
+ --sdk-folder=VALUE Ascp: SDK folder path
3998
4003
  --progress-bar=ENUM Display progress bar: [no], yes
3999
- --smtp=VALUE SMTP configuration (Hash)
4000
- --notify-to=VALUE Email recipient for notification of transfers
4001
- --notify-template=VALUE Email ERB template for notification of transfers
4002
- --insecure=ENUM Do not validate any HTTPS certificate: [no], yes
4003
- --ignore-certificate=VALUE Do not validate HTTPS certificate for these URLs (Array)
4004
- --silent-insecure=ENUM Issue a warning if certificate is ignored: no, [yes]
4005
- --cert-stores=VALUE List of folder with trusted certificates (Array, String)
4006
- --http-options=VALUE Options for HTTP/S socket (Hash)
4007
- --http-proxy=VALUE URL for HTTP proxy with optional credentials (String)
4004
+ --smtp=VALUE Email: SMTP configuration (Hash)
4005
+ --notify-to=VALUE Email: Recipient for notification of transfers
4006
+ --notify-template=VALUE Email: ERB template for notification of transfers
4007
+ --insecure=ENUM HTTP/S: Do not validate any certificate: [no], yes
4008
+ --ignore-certificate=VALUE HTTP/S: Do not validate certificate for these URLs (Array)
4009
+ --silent-insecure=ENUM HTTP/S: Issue a warning if certificate is ignored: no, [yes]
4010
+ --cert-stores=VALUE HTTP/S: List of folder with trusted certificates (Array, String)
4011
+ --http-options=VALUE HTTP/S: Options for HTTP/S socket (Hash)
4012
+ --http-proxy=VALUE HTTP/S: URL for proxy with optional credentials (String)
4008
4013
  --cache-tokens=ENUM Save and reuse OAuth tokens: no, [yes]
4009
4014
  --fpac=VALUE Proxy auto configuration script
4010
4015
  --proxy-credentials=VALUE HTTP proxy credentials for fpac: user, password (Array)
@@ -4187,6 +4192,7 @@ OPTIONS:
4187
4192
  --workspace=VALUE Name of workspace (String, NilClass)
4188
4193
  --new-user-option=VALUE New user creation option for unknown package recipients (Hash)
4189
4194
  --validate-metadata=ENUM Validate shared inbox metadata: no, [yes]
4195
+ --package-folder=VALUE Field of package to use as folder name, or @none: (String, NilClass)
4190
4196
 
4191
4197
 
4192
4198
  COMMAND: server
@@ -5133,7 +5139,7 @@ In this case:
5133
5139
  - Specify the source folder as first item in the list
5134
5140
  - followed by the list of file names.
5135
5141
 
5136
- ### Packages
5142
+ ### Packages app
5137
5143
 
5138
5144
  The web-mail-like application.
5139
5145
 
@@ -5142,7 +5148,7 @@ The web-mail-like application.
5142
5148
  General syntax:
5143
5149
 
5144
5150
  ```bash
5145
- ascli aoc packages send [package extended value] [other parameters such as file list and transfer parameters]
5151
+ ascli aoc packages send [package extended value] [other parameters such as options and file list]
5146
5152
  ```
5147
5153
 
5148
5154
  Package creation parameter are sent as **Command Parameter**.
@@ -5166,30 +5172,13 @@ If a user recipient (email) is not already registered and the workspace allows e
5166
5172
  - if the option `new_user_option` is `@json:{"package_contact":true}` (default), then a public link is sent and the external user does not need to create an account
5167
5173
  - if the option `new_user_option` is `@json:{}`, then external users are invited to join the workspace
5168
5174
 
5169
- #### List packages
5170
-
5171
- By default, when using `aoc packages list` or `aoc packages receive ALL`, the following `query` is performed:
5172
-
5173
- | Query parameter | Value |
5174
- |----------------------------|---------|
5175
- | `archived` | `false` |
5176
- | `has_content` | `true` |
5177
- | `received` | `true` |
5178
- | `completed` | `true` |
5179
- | `workspace_id` | Set based on current workspace |
5180
- | `dropbox_id` | Set according to `dropbox_name`, if provided |
5181
- | `exclude_dropbox_packages` | `true` unless `dropbox_id` is provided |
5182
-
5183
- Parameters provided using option `query` override this query.
5184
- To remove a parameter, set it to `null`.
5185
-
5186
- #### Example: Send a package with one file to two users, using their email
5175
+ ##### Example: Send a package with one file to two users, using their email
5187
5176
 
5188
5177
  ```bash
5189
5178
  ascli aoc packages send @json:'{"name":"my title","note":"my note","recipients":["someuser@example.com","other@example.com"]}' my_file.dat
5190
5179
  ```
5191
5180
 
5192
- #### Example: Send a package to a shared inbox with metadata
5181
+ ##### Example: Send a package to a shared inbox with metadata
5193
5182
 
5194
5183
  ```bash
5195
5184
  ascli aoc packages send --workspace="my ws" @json:'{"name":"my pack title","recipients":["Shared Inbox With Meta"],"metadata":{"Project Id":"123","Type":"Opt2","CheckThose":["Check1","Check2"],"Optional Date":"2021-01-13T15:02:00.000Z"}}' ~/Documents/Samples/200KB.1
@@ -5201,45 +5190,7 @@ It is also possible to use identifiers and API parameters:
5201
5190
  ascli aoc packages send --workspace="my ws" @json:'{"name":"my pack title","recipients":[{"type":"dropbox","id":"12345"}],"metadata":[{"input_type":"single-text","name":"Project Id","values":["123"]},{"input_type":"single-dropdown","name":"Type","values":["Opt2"]},{"input_type":"multiple-checkbox","name":"CheckThose","values":["Check1","Check2"]},{"input_type":"date","name":"Optional Date","values":["2021-01-13T15:02:00.000Z"]}]}' ~/Documents/Samples/200KB.1
5202
5191
  ```
5203
5192
 
5204
- #### Example: List packages in a given shared inbox
5205
-
5206
- When user packages are listed, the following query is used:
5207
-
5208
- ```json
5209
- {"archived":false,"exclude_dropbox_packages":true,"has_content":true,"received":true}
5210
- ```
5211
-
5212
- To list packages in a shared inbox, the query has to be specified with the shared inbox by name or its identifier.
5213
- Additional parameters can be specified, as supported by the API (to find out available filters, consult the API definition, or use the web interface in developer mode).
5214
- The current workspace is added unless specified in the query.
5215
-
5216
- > **Note:** By default, `exclude_dropbox_packages` is set to `true` for user packages, and to false for shared inbox packages. This can be overridden in the query.
5217
-
5218
- Using shared inbox name:
5219
-
5220
- ```bash
5221
- ascli aoc packages list --query=@json:'{"dropbox_name":"My Shared Inbox","archived":false,"received":true,"has_content":true,"exclude_dropbox_packages":false,"include_draft":false,"sort":"-received_at"}'
5222
- ```
5223
-
5224
- Using shared inbox identifier: first retrieve the ID of the shared inbox, and then list packages with the appropriate filter.
5225
-
5226
- ```bash
5227
- shared_box_id=$(ascli aoc packages shared_inboxes show --name='My Shared Inbox' --format=csv --display=data --fields=id)
5228
- ```
5229
-
5230
- ```bash
5231
- ascli aoc packages list --query=@json:'{"dropbox_id":"'$shared_box_id'","archived":false,"received":true,"has_content":true,"exclude_dropbox_packages":false,"include_draft":false,"sort":"-received_at"}'
5232
- ```
5233
-
5234
- #### Example: Receive all packages from a given shared inbox
5235
-
5236
- ```bash
5237
- ascli aoc packages recv ALL --workspace=_workspace_ --once-only=yes --lock-port=12345 --query=@json:'{"dropbox_name":"_shared_inbox_name_","archived":false,"received":true,"has_content":true,"exclude_dropbox_packages":false,"include_draft":false}' --ts=@json:'{"resume_policy":"sparse_csum","target_rate_kbps":50000}'
5238
- ```
5239
-
5240
- To list packages that would be downloaded, without actually downloading them, replace `recv ALL` with `list` (keep options `once_only` and `query`)
5241
-
5242
- #### Example: Send a package with files from the Files app
5193
+ ##### Example: Send a package with files from the Files app
5243
5194
 
5244
5195
  Find files in Files app:
5245
5196
 
@@ -5264,7 +5215,35 @@ Let's send a package with the file `10M.dat` from subfolder /src_folder in a pac
5264
5215
  ascli aoc files node_info /src_folder --format=json --display=data | ascli aoc packages send @json:'{"name":"test","recipients":["someuser@example.com"]}' 10M.dat --transfer=node --transfer-info=@json:@stdin:
5265
5216
  ```
5266
5217
 
5267
- #### Receive new packages only (Cargo)
5218
+ #### Receive packages
5219
+
5220
+ The command to receive one or multiple packages is:
5221
+
5222
+ ```bash
5223
+ ascli aoc packages recv <package id> [<file> ...]
5224
+ ```
5225
+
5226
+ Where `<package id>` is the identifier of the package to receive or `ALL` to receive all packages matching the query.
5227
+ Option `once_only` is supported, see below.
5228
+
5229
+ To download only some files from the package, just add the path of the files on the command line: `[<file> ...]`, see option `sources`.
5230
+ By default, all files in the package are downloaded, i.e. `.` is used as the file list.
5231
+
5232
+ Option `package_folder` defines the attribute of folder used as destination sub folder in the `to_folder` path (see description earlier).
5233
+ The default value is `@none:` : package files will be downloaded directly inside the folder specified by option `to_folder`.
5234
+ The option `package_folder` can be set to the name of **any** attributes of the package.
5235
+ Notably, `id` or `name` can be used.
5236
+ Using option `--package-folder=id` ensures that every downloaded package is placed in a subfolder named after its unique ID.
5237
+
5238
+ ##### Example: Receive all packages from a given shared inbox
5239
+
5240
+ ```bash
5241
+ ascli aoc packages recv ALL --workspace=_workspace_ --once-only=yes --lock-port=12345 --query=@json:'{"dropbox_name":"_shared_inbox_name_","archived":false,"received":true,"has_content":true,"exclude_dropbox_packages":false,"include_draft":false}' --ts=@json:'{"resume_policy":"sparse_csum","target_rate_kbps":50000}'
5242
+ ```
5243
+
5244
+ To list packages that would be downloaded, without actually downloading them, replace `recv ALL` with `list` (keep options `once_only` and `query`)
5245
+
5246
+ ##### Receive new packages only (Cargo)
5268
5247
 
5269
5248
  It is possible to automatically download new packages, like using Aspera Cargo:
5270
5249
 
@@ -5278,7 +5257,7 @@ ascli aoc packages recv ALL --once-only=yes --lock-port=12345
5278
5257
 
5279
5258
  Typically, one would execute this command on a regular basis, using the method of your choice: see [Scheduler](#scheduler).
5280
5259
 
5281
- ### Example: Content of a received Package
5260
+ ##### Example: Content of a received Package
5282
5261
 
5283
5262
  Some `node` operations are available for a package, such as `browse` and `find`.
5284
5263
 
@@ -5288,9 +5267,7 @@ To list the content of a package, use command `packages browse <package id> <fol
5288
5267
  ascli aoc package browse my5CnbeWng /
5289
5268
  ```
5290
5269
 
5291
- To list recursively, use command `find`.
5292
-
5293
- To download only some files listed in the package, just add the path of the files on the command line.
5270
+ Use command `find` to list recursively.
5294
5271
 
5295
5272
  For advanced users, it's also possible to pipe node information for the package and use node operations:
5296
5273
 
@@ -5298,7 +5275,54 @@ For advanced users, it's also possible to pipe node information for the package
5298
5275
  ascli aoc package node_info <package ID here> / --format=json --show-secrets=yes --display=data | ascli node -N --preset=@json:@stdin: access_key do self browse /
5299
5276
  ```
5300
5277
 
5301
- ### Files
5278
+ #### List packages
5279
+
5280
+ By default, when using `aoc packages list` or `aoc packages receive ALL`, the following `query` is performed:
5281
+
5282
+ | Query parameter | Value |
5283
+ |----------------------------|---------|
5284
+ | `archived` | `false` |
5285
+ | `has_content` | `true` |
5286
+ | `received` | `true` |
5287
+ | `completed` | `true` |
5288
+ | `workspace_id` | Set based on current workspace. |
5289
+ | `dropbox_id` | Set according to `dropbox_name`, if provided. |
5290
+ | `exclude_dropbox_packages` | `true` unless `dropbox_id` is provided. |
5291
+
5292
+ Parameters provided using option `query` override this query.
5293
+ To remove a parameter, set it to `null`.
5294
+
5295
+ ##### Example: List packages in a given shared inbox
5296
+
5297
+ When user packages are listed, the following query is used:
5298
+
5299
+ ```json
5300
+ {"archived":false,"exclude_dropbox_packages":true,"has_content":true,"received":true}
5301
+ ```
5302
+
5303
+ To list packages in a shared inbox, the query has to be specified with the shared inbox by name or its identifier.
5304
+ Additional parameters can be specified, as supported by the API (to find out available filters, consult the API definition, or use the web interface in developer mode).
5305
+ The current workspace is added unless specified in the query.
5306
+
5307
+ > **Note:** By default, `exclude_dropbox_packages` is set to `true` for user packages, and to false for shared inbox packages. This can be overridden in the query.
5308
+
5309
+ Using shared inbox name:
5310
+
5311
+ ```bash
5312
+ ascli aoc packages list --query=@json:'{"dropbox_name":"My Shared Inbox","archived":false,"received":true,"has_content":true,"exclude_dropbox_packages":false,"include_draft":false,"sort":"-received_at"}'
5313
+ ```
5314
+
5315
+ Using shared inbox identifier: first retrieve the ID of the shared inbox, and then list packages with the appropriate filter.
5316
+
5317
+ ```bash
5318
+ shared_box_id=$(ascli aoc packages shared_inboxes show --name='My Shared Inbox' --format=csv --display=data --fields=id)
5319
+ ```
5320
+
5321
+ ```bash
5322
+ ascli aoc packages list --query=@json:'{"dropbox_id":"'$shared_box_id'","archived":false,"received":true,"has_content":true,"exclude_dropbox_packages":false,"include_draft":false,"sort":"-received_at"}'
5323
+ ```
5324
+
5325
+ ### Files app
5302
5326
 
5303
5327
  The Files application presents a **Home** folder to users in a given workspace.
5304
5328
  Files located here are either user's files, or shared folders.
@@ -5348,42 +5372,46 @@ The basic payload (last argument at creation usually specified with `@json:`) is
5348
5372
  ```
5349
5373
 
5350
5374
  `ascli` expects the same payload for creation.
5351
- `ascli` automatically populates this payload like this:
5352
-
5353
- - `file_id` : the ID of the folder to share whose path is specified in the command line
5354
- - `access_levels` : are set by default to full access.
5355
- - `tags` : are set with expected values for AoC: username who creates, and workspace in which the shared folder is created.
5356
- - `access_type` and `access_id` : need to be set by the user, or using special key as follows.
5357
-
5358
- To change `access_levels`, just provide the list of levels in the `@json:` payload.
5375
+ `ascli` automatically populates some payload fields and provides convenient additional fields that generate native fields:
5359
5376
 
5360
- In order to declare/create the shared folder in the workspace, a special value for `access_id` is used: `ASPERA_ACCESS_KEY_ADMIN_WS_[workspace ID]]`. This is conveniently set by `ascli` using an empty string for the pseudo key `with`. In order to share a folder with a different, special tags are set, but this is conveniently done by `ascli` using the `as` key.
5377
+ <!-- markdownlint-disable MD033 -->
5378
+ | Field | Type | Description |
5379
+ |-----------------|----------|-------------|
5380
+ | `file_id` | Native<br/>Auto | ID of the folder to share, as specified in the command line by path. |
5381
+ | `access_levels` | Native<br/>Optional | List of access levels to set for the shared folder. Defaults to full access. |
5382
+ | `tags` | Native<br/>Auto | Set with expected values for AoC: username who creates, and workspace in which the shared folder is created. |
5383
+ | `access_type` | Native<br/>Required | Type of access, such as `user`, `group`, or `workspace`. Can be set with parameter `with`. |
5384
+ | `access_id` | Native<br/>Required | ID of the user, group, or workspace (see `with`) |
5385
+ | `with` | `ascli` | Recipient of shared folder. Can be a username, a group name, or a workspace name. `ascli` will resolve the name to the proper type and ID in fields `access_type` and `access_id`. If the value is the empty string, then it declares the shared folder in the workspace (first action to do, see below). |
5386
+ | `link_name` | `ascli` | Name of the link file created in the user's home folder for private links. |
5387
+ | `as` | `ascli` | Name of the link file created in the user's home folder for admin shared folders. |
5388
+ <!-- markdownlint-enable MD033 -->
5361
5389
 
5362
- The following optional additional helper keys are supported by `ascli`:
5390
+ In order to declare/create the shared folder in the workspace, a special value for `access_id` is used: `ASPERA_ACCESS_KEY_ADMIN_WS_[workspace ID]]`.
5391
+ This is conveniently set by `ascli` using an empty string for the pseudo key `with`.
5392
+ In order to share a folder with a different, special tags are set, but this is conveniently done by `ascli` using the `as` key.
5363
5393
 
5364
- - `with` : Recipient of shared folder. Can be a username, a group name, or a workspace name. `ascli` will resolve the name to the proper type and ID in fields `access_type` and `access_id`. If the value is the empty string, then it declares the shared folder in the workspace (first action to do, see below).
5365
- - `link_name` : The name of the link file created in the user's home folder for private links.
5366
- - `as` : The name of the link file created in the user's home folder for admin shared folders.
5367
-
5368
- - List permissions on a shared folder as user
5394
+ ##### Example: List permissions on a shared folder
5369
5395
 
5370
5396
  ```bash
5371
5397
  ascli aoc files perm /shared_folder_test1 list
5372
5398
  ```
5373
5399
 
5374
- - Share a personal folder with other users
5400
+ ##### Example: Share a personal folder with other users
5375
5401
 
5376
5402
  ```bash
5377
5403
  ascli aoc files perm /shared_folder_test1 create @json:'{"with":"laurent"}'
5378
5404
  ```
5379
5405
 
5380
- - Revoke shared access
5406
+ ##### Example: Revoke shared access
5381
5407
 
5382
5408
  ```bash
5383
5409
  ascli aoc files perm /shared_folder_test1 delete 6161
5384
5410
  ```
5385
5411
 
5386
- Public and Private short links can be managed with command:
5412
+ ##### Example: Public and Private short links
5413
+
5414
+ They can be managed with commands:
5387
5415
 
5388
5416
  ```bash
5389
5417
  ascli aoc files short_link _path_here_ private create
@@ -5392,17 +5420,63 @@ ascli aoc files short_link _path_here_ public list
5392
5420
  ascli aoc files short_link public delete _id_
5393
5421
  ```
5394
5422
 
5395
- - Create an admin shared folder and shared with a user or group or workspace
5423
+ ##### Example: Create a workspace shared folder
5424
+
5425
+ First, identify the node ID where the shared folder will be created.
5426
+
5427
+ To use the default node for workspace `my ws`, use the command:
5428
+
5429
+ ```bash
5430
+ ascli aoc admin workspace show %name:'my ws' --fields=node_id
5431
+ ```
5432
+
5433
+ Alternatively (longer):
5434
+
5435
+ ```bash
5436
+ ascli aoc admin workspace list --select=@json:'{"name":"my ws"}' --fields=node_id
5437
+ ```
5438
+
5439
+ Or select manually from the list of nodes:
5440
+
5441
+ ```bash
5442
+ ascli aoc admin node list --fields=id,name
5443
+ ```
5444
+
5445
+ In the following commands, replace:
5446
+
5447
+ - `1234` with the node ID
5448
+ - `my ws` with the workspace name
5449
+ - `folder_on_node` with the name of the folder on the node
5450
+
5451
+ The node can also be conveniently identified using the **percent selector** instead of numerical ID: `%name:"my node"`.
5452
+
5453
+ If the shared folder does not exist, then create it:
5396
5454
 
5397
5455
  ```bash
5398
5456
  ascli aoc admin node do 1234 mkdir folder_on_node
5457
+ ```
5458
+
5459
+ Create the shared folder in workspace `my ws` (set `with` to empty string, or do not specify it).
5460
+ Optionally use `as` to set the name of the shared folder if different from the folder name on the node.
5461
+ For other options, refer to the previous section on shared folders.
5462
+
5463
+ ```bash
5399
5464
  ascli aoc admin node do 1234 perm folder_on_node create @json:'{"with":"","as":"folder_for_users"}' --workspace="my ws"
5400
- ascli aoc admin node do 1234 perm folder_on_node create @json:'{"with":"john@example.com","as":"folder_for_users"}' --workspace="my ws"
5401
- ascli aoc admin node do 1234 perm folder_on_node create @json:'{"with":"group 1","as":"folder_for_users"}' --workspace="my ws"
5402
- ascli aoc admin node do 1234 perm folder_on_node create @json:'{"with":"my ws","as":"folder_for_users"}' --workspace="my ws"
5403
5465
  ```
5404
5466
 
5405
- > **Note:** The node can be conveniently identified using the **percent selector** instead of numerical ID.
5467
+ To share with a user, group, or workspace, use the `with` parameter:
5468
+
5469
+ ```bash
5470
+ ascli aoc admin node do 1234 perm folder_on_node create @json:'{"with":"john@example.com","as":"folder_for_one_user"}' --workspace="my ws"
5471
+ ```
5472
+
5473
+ ```bash
5474
+ ascli aoc admin node do 1234 perm folder_on_node create @json:'{"with":"group 1","as":"folder_for_a_group"}' --workspace="my ws"
5475
+ ```
5476
+
5477
+ ```bash
5478
+ ascli aoc admin node do 1234 perm folder_on_node create @json:'{"with":"my ws","as":"folder_for_all_workspace"}' --workspace="my ws"
5479
+ ```
5406
5480
 
5407
5481
  #### Cross Organization transfers
5408
5482
 
@@ -5561,7 +5635,7 @@ packages receive ALL --once-only=yes --to-folder=. --lock-port=12345
5561
5635
  packages receive ALL --once-only=yes --to-folder=. --lock-port=12345 --query=@json:'{"dropbox_name":"my_shared_inbox_name","archived":false,"received":true,"has_content":true,"exclude_dropbox_packages":false,"include_draft":false}' --ts=@json:'{"resume_policy":"sparse_csum","target_rate_kbps":50000}'
5562
5636
  packages receive INIT --once-only=yes --query=@json:'{"dropbox_name":"my_shared_inbox_name"}'
5563
5637
  packages receive package_id3 --to-folder=.
5564
- packages receive package_id3 --to-folder=. /
5638
+ packages receive package_id3 --to-folder=. / --package-folder=name
5565
5639
  packages send --workspace=my_workspace_shared_inbox --validate-metadata=yes @json:'{"name":"$(notdir test) PACKAGE_TITLE_BASE","recipients":["my_shared_inbox_meta"],"metadata":[{"input_type":"single-text","name":"Project Id","values":["123"]},{"input_type":"single-dropdown","name":"Type","values":["Opt2"]},{"input_type":"multiple-checkbox","name":"CheckThose","values":["Check1","Check2"]},{"input_type":"date","name":"Optional Date","values":["2021-01-13T15:02:00.000Z"]}]}' test_file.bin
5566
5640
  packages send --workspace=my_workspace_shared_inbox --validate-metadata=yes @json:'{"name":"$(notdir test) PACKAGE_TITLE_BASE","recipients":["my_shared_inbox_meta"],"metadata":{"Project Id":"456","Type":"Opt2","CheckThose":["Check1","Check2"],"Optional Date":"2021-01-13T15:02:00.000Z"}}' test_file.bin
5567
5641
  packages send --workspace=my_workspace_shared_inbox --validate-metadata=yes @json:'{"name":"$(notdir test) PACKAGE_TITLE_BASE","recipients":["my_shared_inbox_meta"],"metadata":{"Type":"Opt2","CheckThose":["Check1","Check2"],"Optional Date":"2021-01-13T15:02:00.000Z"}}' test_file.bin
@@ -5575,6 +5649,7 @@ packages shared_inboxes show %name:my_shared_inbox_name
5575
5649
  remind --username=my_user_email
5576
5650
  servers
5577
5651
  tier_restrictions
5652
+ user contacts list
5578
5653
  user pref modify @json:'{"default_language":"en-us"}'
5579
5654
  user pref show
5580
5655
  user profile modify @json:'{"name":"dummy change"}'
@@ -6267,7 +6342,7 @@ ascli node access_key modify %id:self @ruby:'{token_verification_key: File.read(
6267
6342
  ascli node bearer_token @file:./myorgkey.pem @json:'{"user_id":"'$my_user_id'","_validity":3600}' --output=bearer.txt
6268
6343
  ```
6269
6344
 
6270
- > **Note:** The Bearer token can also be created using command `asnodeadmin` on HSTS. Refer to the [HSTS manual](https://www.ibm.com/docs/en/ahts): `Bearer tokens` section. Code for token generation is provided in [lib/aspera/api/node.rb](lib/aspera/api/node.rb)
6345
+ > **Note:** The Bearer token can also be created using command `asnodeadmin` on HSTS. Refer to the [HSTS manual](https://www.ibm.com/docs/en/ahts): `Bearer tokens` section. Code for token generation is provided in [`lib/aspera/api/node.rb`](lib/aspera/api/node.rb)
6271
6346
 
6272
6347
  #### Bearer token: User side
6273
6348
 
@@ -6369,22 +6444,27 @@ watch_folder list
6369
6444
 
6370
6445
  ### Open Telemetry
6371
6446
 
6372
- The Node plugin supports Open Telemetry (OTel) for monitoring and tracing.
6447
+ The `node` plugin supports Open Telemetry (OTel) for monitoring and tracing.
6448
+
6449
+ > **Note:** This is an experimental feature and currently only available for the `node` plugin and Instana backend.
6373
6450
 
6374
- `ascli` can poll the Node API for transfer events and send them to an OTel collector.
6451
+ `ascli` polls the Node API for transfer events and sends them to an OTel collector.
6375
6452
 
6376
6453
  The command expects the following parameters provided as a `Hash` positional parameter:
6377
6454
 
6378
- | Parameter | Type | Default | Description |
6379
- |-------------|----------|---------|---------------------------------|
6380
- | `url` | `String` | - | URL of the Instana backend. |
6381
- | `apikey` | `String` | - | Token for the OTel collector. |
6382
- | `interval` | `Float` | 10 | Polling interval in seconds. |
6455
+ | Parameter | Type | Default | Description |
6456
+ |-------------|----------|---------|---------------------------------------------------|
6457
+ | `url` | `String` | - | URL of the Instana HTTPS backend for OTel. |
6458
+ | `key` | `String` | - | Agent key for the backend. |
6459
+ | `interval` | `Float` | 10 | Polling interval in seconds. `0` for single shot. |
6383
6460
 
6384
- For convenience, those parameters can be provided in a preset, e.g. `otel_default`.
6461
+ To retrieve OTel backend information: Go to the Instana web interface, **More** &rarr; **Agents** &rarr; **Docker** and identify the agent endpoint and key, e.g. `endpoint=ingress-blue-saas.instana.io`.
6462
+ Identify the region and the endpoint URL will be `https://otlp-[region]-saas.instana.io`, i.e. replace `ingress` with `otlp`.
6463
+
6464
+ For convenience, those parameters can be provided in a preset, e.g. named `otel_default`.
6385
6465
 
6386
6466
  ```bash
6387
- ascli config preset init otel_default @json:'{"url":"https://otlp-orange-saas.instana.io:4318","apikey":"*********","interval":1.1}'
6467
+ ascli config preset init otel_default @json:'{"url":"https://otlp-orange-saas.instana.io:4318","key":"*********","interval":1.1}'
6388
6468
  ```
6389
6469
 
6390
6470
  Then it is invoked like this (assuming a default node is configured):
@@ -6393,6 +6473,12 @@ Then it is invoked like this (assuming a default node is configured):
6393
6473
  ascli node telemetry @preset:otel_default
6394
6474
  ```
6395
6475
 
6476
+ In Instana, create a custom Dashboard to visualize the OTel data:
6477
+
6478
+ - Add Widget: Histogram
6479
+ - Data Source: Infrastructure and Platforms
6480
+ - Metric: search `transfer`
6481
+
6396
6482
  ## Plugin: `faspex5`: IBM Aspera Faspex v5
6397
6483
 
6398
6484
  IBM Aspera's newer self-managed application.
@@ -7496,7 +7582,7 @@ If you use a value different from `16777216`, then specify it using option `max_
7496
7582
 
7497
7583
  `ascli` requires the following external tools available in the `PATH`:
7498
7584
 
7499
- - **ImageMagick** v7+: `magick` `composite`
7585
+ - **ImageMagick** v7+: `magick` (for tools: `convert` and `composite`)
7500
7586
  - **OptiPNG** : `optipng`
7501
7587
  - **FFmpeg** : `ffmpeg` `ffprobe`
7502
7588
  - **LibreOffice** : `unoconv`
@@ -7523,6 +7609,19 @@ Prefer ImageMagick version >=7.
7523
7609
 
7524
7610
  More info on ImageMagick at <https://imagemagick.org/>
7525
7611
 
7612
+ If your OS has only ImageMagick v6, then you can create a script called `magick` and add it to your `PATH`:
7613
+
7614
+ ```bash
7615
+ #!/bin/bash
7616
+ exec "$@"
7617
+ ```
7618
+
7619
+ make it executable:
7620
+
7621
+ ```bash
7622
+ chmod a+x /usr/local/bin/magick
7623
+ ```
7624
+
7526
7625
  #### Video: FFmpeg
7527
7626
 
7528
7627
  The easiest method is to download and install the latest released version of `ffmpeg` with static libraries from [https://johnvansickle.com/ffmpeg/](https://johnvansickle.com/ffmpeg/)
@@ -7745,6 +7844,7 @@ check --skip-types=office
7745
7844
  events --once-only=yes --skip-types=office --log-level=info
7746
7845
  scan --scan-id=1 --skip-types=office --log-level=info --file-access=remote --ts=@json:'{"target_rate_kbps":1000000}'
7747
7846
  scan --skip-types=office --log-level=info
7847
+ show --base=test /etc/hosts
7748
7848
  show --base=test my_docx
7749
7849
  show --base=test my_mpg --video-png-conv=animated
7750
7850
  show --base=test my_mpg --video-png-conv=fixed