How do I write an installation file? - Parcks/core GitHub Wiki
Consider the following valid installation file:
{
"name":"Demo installer",
"install":[
{
"package":"parcks",
"alternative-names":["php", "dsjgdosfihgsdhg"],
"post-installation":[
{
"type":"remote",
"name":"composer",
"url":"https://raw.githubusercontent.com/Parcks/plugins/master/testPlugin.ppl"
},
{
"type":"shell",
"name":"demo shell",
"cmds":[
{
"root":true,
"do":[
"whoami",
"ls -al"
]
},
{
"root":false,
"work-dir":"/opt",
"do":[
"pwd"
]
}
]
},
{
"type":"file-create",
"name":"test file create as root",
"destination-path":"/opt/tester",
"root":true,
"contents":"Dummy contents\On a new line!"
},
{
"type":"file-create",
"name":"test file create normal",
"destination-path":"/home/jvalck/test-core",
"contents":"Dummy contents\On a new line!"
},
{
"type":"file-append",
"name":"test file append normal",
"destination-path":"/home/jvalck/test-core",
"contents":"Appended line"
},
{
"type":"file-append",
"name":"test file append as root",
"destination-path":"/opt/tester",
"root":true,
"contents":"Appended line"
}
]
}
]
}
As you may have noticed, this is a JSON-like file.
Root
At the root level you will need to specify a name for your installer. This is required. The name will be displayed to the user. Next you will specify (as an array) what to install.
Package
Example:
{
"package":"parcks",
"alternative-names":["php", "dsjgdosfihgsdhg"],
"post-installation":[]
}
Only the package
-field is required. To allow that your installer is working on other distro's, it's not a bad idea to add alternative names for the package. You can do this by adding an array containing the alternative names.
For example: Debian 8 doesn't has a package called php
, it's called php5
. Therefore following example allows successful installation of PHP:
{
"package":"php",
"alternative-names":["php5]
}
As stated above, the post-installation
-field isn't required either. So you can safely remove it.
Fields
Name | Required | Type |
---|---|---|
package | Yes | string |
alternative-names | No | array |
post-installation | No | array |
Post-installation scripts
Remote
Example:
{
"type":"remote",
"name":"composer",
"url":"https://raw.githubusercontent.com/Parcks/plugins/master/testPlugin.ppl"
}
A Remote
will download a plugin and execute it. A plugin can contain one or more post-installation scripts.
If the url
is an unverified one, Parcks
will display a warning message. You can find verified plugins in the repository.
Fields
Name | Required | Type |
---|---|---|
type | Yes | string |
name | Yes | string |
url | Yes | string |
Shell
Example:
{
"type":"shell",
"name":"demo shell",
"cmds":[
{
"root":true,
"do":[
"whoami",
"ls -al"
]
},
{
"root":false,
"work-dir":"/opt",
"do":[
"pwd"
]
}
]
}
A Shell
is a bit more complex (but more powerful) post-installation type, as it contains so-called Shell Commands
.
The Shell Commands
are specified by the cmds
-field. We will discuss it below.
A Shell
is simply a wrapper for one or more Shell Commands
.
Fields
Name | Required | Type |
---|---|---|
type | Yes | string |
name | Yes | string |
cmds | Yes | array |
Shell Commands
For each Shell Command
you must specify if it should be executed with root privileges.
In the do
-field you specify the commands.
Fields
Name | Required | Type |
---|---|---|
root | Yes | boolean |
work-dir | No | string |
do | Yes | array |
File create
Example:
{
"type":"file-create",
"name":"test file create as root",
"destination-path":"/opt/tester",
"root":true,
"contents":"Dummy contents\n a new line!"
}
As the name suggest this will create a file in the file system.
You can specify the destination of the file with the destination-path
-field. The contents are specified in the contents
-field.
Warning! As the file is JSON
-like, you will need to escape special characters!
If you set the root
-field to true, the file will be created as root.
Fields
Name | Required | Type |
---|---|---|
type | Yes | string |
name | Yes | string |
destination-path | Yes | string |
contents | Yes | string |
root | No | boolean |
File append
{
"type":"file-append",
"name":"test file append normal",
"destination-path":"/home/jvalck/test-core",
"contents":"Appended line"
}
The functionality and fields of a File append
post-installation script are similar to the File create
.
The only difference is that it will append to a file instead of creating one.