Distribute Packages Using Folder-Based Repositories
A MATLAB® package repository is a place where packages are stored and distributed.
Packages that are ready for distribution can be added to a repository, and end users can
install the package from the repository. MATLAB keeps a list of known repositories. When you search for a package using
mpmsearch
or
install a package using mpminstall
, the
MATLAB Package Manager finds packages on the MATLAB search path and in known repositories.
Share Packages Using Repositories
You can make a package available to others by adding it to a repository. Add a package to a folder-based repository by creating a copy of the package root folder and its contents and placing them in the repository folder.
For example, create a package named MyPkg
from the folder
PkgRootDir
and then add it to the repository located at
C:\MyCode\MyRepository
.
pkg = mpmcreate("MyPkg","PkgRootDir") copyfile("PkgRootDir","C:\MyCode\MyRepository")
Then, end users can install the package from the repository.
mpminstall("MyPkg")
For more information about searching for and installing packages, see Find and Install Packages.
Designate Folder As Repository
You can make a folder into a repository by using the mpmAddRepository
function. For example, add the
C:\MyCode\MyRepository
folder to the MATLAB repository list and name it
"MyRepo"
.
repo = mpmAddRepository("MyRepo","C:\MyCode\MyRepository")
repo = Repository with properties: Name: "MyRepo" Location: "C:\MyCode\MyRepository"
By default, the function adds repositories to the end of the MATLAB repository list. You
can add a repository to the top or the bottom of the list using the optional
Position
argument. For example, add the repository to the beginning of
the list.
repo = mpmAddRepository("MyRepo","C:\MyCode\MyRepository",Position="begin")
When the MATLAB Package Manager searches for or installs packages, it checks repositories in order from the beginning of the list to the end. If the MATLAB Package Manager finds a package that meets the requirements in a repository, then no further repositories are checked. For additional information, see Package Resolution During Installation.
Display List of Known Repositories
You can display the list of known repositories by using the mpmListRepositories
function.
mpmListRepositories
Name Location _____________ _______________________________ "MyRepo" "C:\MyCode\MyRepository" "SharedRepo" "M:\SharedCode\SharedRepository" "DepartmentRepo" "Z:\Astro\PackageRepo"
Remove Repository from List
You can remove a repository from the repository list by using the mpmRemoveRepository
function. For example, remove the repository located at
C:\MyCode\MyRepository
from the repository list.
mpmRemoveRepository("C:\MyCode\MyRepository"
)
Now display the repository list.
mpmListRepositories
Name Location _____________ _______________________________ "SharedRepo" "M:\SharedCode\SharedRepository" "DepartmentRepo" "Z:\Astro\PackageRepo"
Security Considerations for Shared Repositories
When a repository is accessible by many people, it is recommended that only a limited set of authorized users or administrators be allowed to modify the contents of the repository folder. This precaution helps to mitigate the risk of malicious tampering with its packages. This restriction can be managed through file system permissions.
Additionally, you can provide package checksums to end users of the repository to help
detect package tampering. Use digest
to
compute the SHA-256 digests of the packages in the repository, and distribute those digests
to end users alongside the packages or through some other secure distribution channel, such
as a secure website.
pkg = mpmlist("MyPackage");
SHA = digest(pkg)
SHA = "ab0863fa6a1eeb0fade092abd583323bee73d1dd5ce4a74aa031e4995ae2bb79"
When installing a package, use mpminstall
with
the option Verbosity="detailed"
. mpminstall
recomputes
and displays the current digest value for each installed package.
mpminstall("MyPackage",Verbosity="detailed")
The following packages will be installed: MyPackage@1.0.0 (digest: ab0863fa6a1eeb0fade092abd583323bee73d1dd5ce4a74aa031e4995ae2bb79) Do you want to continue? [YES/no]:
If this value does not match the originally computed digest value, the package has been altered. Cancel the installation by responding “no” at the “Do you want to continue?” prompt. Report any discrepancies to the administrator of the shared repository.
Finally, it is recommended that a secure backup be maintained of the files in the repository, to facilitate restoration of the original files in the event that tampering is detected.