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.