OpenPrograms软件包管理器(The OpenPrograms Package Manager),简称OPPM,是OpenComputers模组的一个可从地牢奖励箱软盘中获取的软件。此软件提供了种类繁多的程序(下文称为“软件包”)供您方便地下载与安装。此软件致力于帮助用户降低分发自己程序的难度,在此软件上安装、升级与卸载软件就像创建与登记软件那么容易。
为了能够使用OPPM,你需要拥有至少二级的机箱,并插入因特网卡。
在你获得了装有OPPM的软盘之后,把它插到电脑里,然后你首先应该运行oppm install oppm
来将最新版本的软件包管理器安装到你的主硬盘上。安装完成后,你可以随意关闭电脑、取出磁盘或重启电脑。
OPPM支持若干参数,参数将会在下文讲解:
oppm list [filter] [-i]
filter
可以让列表只显示名称匹配指定过滤条件的软件包。-i
选项可以让命令仅列出已经被安装的软件包。
oppm info <package>
oppm install [-f] <package> [path]
path
参数,则会安装到在oppm.cfg中指定的默认路径(默认为/usr,如果你没有特别理由,就不要改动安装位置)。-f
选项可以强制安装,即已存在的任何文件都将被下载的文件覆盖/替换。并且如果path
指向不存在的目录,则会创建此目录。
oppm update <package>
package
参数为“all”,则会更新已安装的所有软件包。
oppm uninstall <package>
oppm register <userorgroup>/<repository>
将位于https://github.com/<userorgroup>/<repository>
的Github仓库作为额外软件源添加。仓库中必须有名为master
的分支,且此分支的根目录下必须有名为programs.cfg
的文件结构配置文件。
oppm unregister <userorgroup>/<repository>
从额外软件源列表中移除位于https://github.com/<userorgroup>/<repository>
的Github仓库。注: 如果你只是想使用他人提供的软件包,而并不想自己制作软件包,那么可以停止阅读了。
如果你想创建自己的软件包,不论是因为你想更方便地在多台电脑上安装软件还是因为你想与他人分享软件,你需要创建一个Github仓库和一份软件包列表。软件包列表的位置取决你登记仓库的方式,但无论何种方式,其格式均相同。
这是软件包列表中可存在内容的参考(参见example.cfg):
{--这是programs.cfg文件的一份样例。请勿在实际的programs.lua文件中添加任何注释 ["example-package"] = { files = { ["master/somefolder/bar.lua"] = "/",--"/"斜线代表文件将会被置于用户指定文件夹中,默认为/usr ["master/somefolder/barinfo.txt"] = "//etc", --双斜线代表使用绝对路径 [":master/otherfolder"] = "/share/something", --冒号代表一个文件夹,将包含此文件夹中的所有内容 [":master/otherfolder"] = "//etc/something", --此写法也可用于绝对路径 ["master/somefolder/barlib.lua"] = "/subfolder",--将文件置于用于指定文件夹的一个子文件夹中 ["?master/somefolder/something.cfg"] = "/" --此文件只会在并不存在时才会安装或更新,除非指定-f选项 }, dependencies = { ["GML"] = "/lib"--此软件包将会被安装到指定子文件夹中 }, name = "Package name",--此属性用于"oppm info" description = "This is an example description",--此属性用于"oppm info" authors = "Someone, someone else",--此属性用于"oppm info" note = "额外安装教程、通用教程以及额外信息/注释写在此处,此行内容为可选。", hidden = true, --添加此行可选内容,可以让你的软件包不显示在"oppm list"中,适用于自定义依赖库 repo="tree/master/somefolder" --供网站使用。这代表软件包应当链接到网站何处 }, ["yet-another-package"] = { ... } }
以下为三个真实存在软件的软件包列表样例:
{ ["song"] = { files = { ["master/song/song.lua"] = "/lib", ["master/song/song-example1.lua"] = "/bin", ["master/song/song-example2.lua"] = "/bin" }, name = "Song API", description = "An API to play whole songs using computer.beep", authors = "Vexatos", repo = "tree/master/song" }, ["oppm"] = { files = { ["master/oppm/oppm.lua"] = "/bin", ["master/oppm/etc/oppm.cfg"] = "//etc", ["master/oppm/lib/oppm.lua"] = "/lib" }, name = "OpenPrograms Package Manager", description = "A program to browse, download, install and update various useful programs and libraries", authors = "Vexatos", note = "If you are running this program on a floppy disk, run 'oppm install oppm' to install this program locally on your main Hard Drive.\n Consider running 'oppm update oppm' to get the latest version of this program.", repo = "tree/master/oppm" }, ["drama"] = { files = { ["master/drama/drama.lua"] = "/bin", }, name = "Drama Generator", description = "asie's Drama Generator inside OC", authors = "Vexatos", note = "Run and have fun!", repo = "tree/master/drama/drama.lua", } }
OPPM需要知道如何找到你的软件包列表以及其中描述的组成软件包所需的文件。根据你的目标不同,你有三种选择。
如果你开发的是只有自己使用的软件包(例如,用于更方便地将你编写的软件安装在多台电脑上,或者你想用外部编辑器来编写代码并将其安装到OC模组的电脑上),那么、oppm register
命令可能是最简单的选择。
master
的分支;OPPM只会在此分支内查找programs.cfg
文件。master
分支中,在仓库的顶级目录中创建一个名为programs.cfg
的文件,其中包含你的软件包列表。oppm register
命令。例如,你的Github用户名为MyUser
并且你将仓库命名为MyOCPackages
,你需要运行oppm register MyUser/MyOCPackages
。
Your packages will now appear in oppm list
and can be installed with oppm install
just like any other packages. Any changes you make to programs.cfg
or to the files making up your packages will become available to OPPM, though due to caching in GitHub’s systems you may need to wait a short time after pushing, and due to caching in OPPM you may need to reboot the OpenComputers computer before you will see the changes.
Of course, you can share the name of your repository with other people who can also register it and use your programs if you wish.
Note that you do not need to develop all your software on the master
branch. programs.cfg
needs to live at the top level of the master
branch, but since the first path component of each element in the files
table is a branch name, you can refer to programs in other branches.
If you want to make your packages globally available (so that everyone that wants to is able to easily install your programs), you need to ask Vexatos on the OpenComputers forums or on IRC to register your GitHub repository. Your GitHub repository needs to look exactly the same as described in the previous section.
You can also add an additional repository by editing /etc/oppm.cfg
. The difference with this method is that you need to place the entire packages table in /etc/oppm.cfg
rather than in the repository (the repository can contain a packages table, but it will be ignored if you use this method).
In most cases oppm register is preferable because it allows you to write the packages table only once (rather than having to copy it to every computer and keep it up to date) and to keep it together in the same place as your code and data files. However, this method may be useful if you wish to install Lua programs from some repository that is not your own, and that repository does not provide a programs.cfg
file.
Open /etc/oppm.cfg; it should look like this:
{ --default installation path path="/usr", --Additional repositories and packages go here, for correct package syntax, check https://github.com/OpenPrograms/Vexatos-Programs/blob/master/oppm/etc/oppm.cfg repos={ } }
You might notice the table called repos
. That’s where you can register your own packages. Each entry in the table has a repository name (GitHub UserOrGroup/RepoName
) as its key and the corresponding packages table as its value. This is an example oppm.cfg
file, having added two different packages to OPPM (The first one as a reference, the second one as an actual example):
{ --default installation path path="/usr", --Additional repositories and packages go here, for correct package syntax, check https://github.com/OpenPrograms/Vexatos-Programs/blob/master/oppm/etc/example-config.cfg repos={ ["YourUsername/YourRepo"] = { ["example-package"] = { files = { ["master/somefolder/bar.lua"] = "/",--"/" means the file will be placed inside the folder the user specified, defaults to /usr ["master/somefolder/barinfo.txt"] = "//etc", -- double slash for using an absolute path [":master/otherfolder"] = "/share/something", -- A colon marks a folder, will include everything in that folder [":master/otherfolder"] = "//etc/something", -- This also works with absolute paths ["master/somefolder/barlib.lua"] = "/subfolder",--Places the file in a subfolder in the user-specified folder ["master/somefolder/libfolder/"] = "/" }, dependencies = { ["GML"] = "/lib"--This package is installed into the specified subfolder }, name = "Package name",--This is for "oppm info" description = "This is an example description",--This is for "oppm info" authors = "Someone, someone else",--This is for "oppm info" note = "Additional installation instructions, general instructions and additional information/notes go here, this is an optional line.", hidden = true, -- Add this optional line to make your package not visible in "oppm list", useful for custom dependency libraries repo="tree/master/somefolder" --Used by the website. This is where the package will link to on the website }, ["yet-another-package"] = { ... } }, ["OpenPrograms/samis-Programs"]={ ["nidus"] = { ["files"] = { ["master/nidus/nidus.lua"] = "/bin", --executable programs should always be installed to /bin ["master/nidus/core.lua"] = "/lib/nidus", --libraries should always be installed to /lib ["master/nidus/hosts.db"] = "//var/lib/nidus" }, ["repo"] = "tree/master/nidus", ["dependencies"] = { ["oop-system"] = "/" }, ["name"] = "NiDuS DNS Server", ["description"] = "A DNS server that is light and easy to use. Uses its own protocol.", ["authors"] = "samis" }, } } }
I hope this tutorial helped explaining what OPPM does and how to use it. If you have any further questions, contact me (Vexatos) on the OC forums or on IRC.
Thanks for reading!
教程 | 模组特有内容 | 基础电脑 - 编写代码 - 硬盘 - Autorun与Startup自启动脚本 | |
---|---|---|---|
模组制作 | 自定义架构 - IMC 信息 - OC 1.3 中的API改动 - OC 1.4 中的API改动 - 从源码构建并运行 master-MC1.7.10 版本的 OC | ||
程序 | OPPM - install | ||
其它 | 自定义操作系统 - 中文翻译守则 |