Skip to content

Instantly share code, notes, and snippets.

@rajiteh
Last active July 2, 2016 18:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rajiteh/3ae819a60e80327d6a28747f5393b2d6 to your computer and use it in GitHub Desktop.
Save rajiteh/3ae819a60e80327d6a28747f5393b2d6 to your computer and use it in GitHub Desktop.
Run sabnzbd, couchpotato, and sickrage on docker, on windows.
$LogLineContext = "MAIN"
Function LogLine($msg, $context)
{
if($context -ne $null) {
$script:LogLineContext = $context
}
Write-host "[$($LogLineContext)]:" $msg
}
function RunCommand($cmd) {
LogLine "Executing: $($cmd)"
return (Invoke-Expression $cmd | Out-String -stream)
}
function RunContainer($name, $cmd) {
$sanitized = $($cmd -replace '"', '\`"') # Powershell escape + Sh escape
$exc = ('docker exec -it {0} sh -c "{1}"' -f $name, $sanitized)
RunCommand $exc
}
function IsContainerExists($name) {
$cmd = "docker ps -a -f name=`"^/$($name)`$`""
return (RunCommand $cmd | select-string $name).length -gt 0
}
function IsContainerStatus($name, $status) {
$cmd = "docker ps -a -f status=$status -f name=`"^/$($name)`$`""
return (RunCommand $cmd | select-string $name).length -gt 0
}
function StopAndRemoveContainer($name) {
if (IsContainerExists $name) {
if (IsContainerStatus $name "running") {
docker stop $name
}
docker rm $name
}
}
function Sabnzbd($port) {
$sabnzbd_data_container_name = "sabnzbd_data"
$sabnzbd_app_container_name = "sabnzbd"
$sabnzbd_config_dir = "F:\media_station\media\nzb-config"
$sabnzbd_dl_dir = "F:\media_station\media\nzb-dl"
$sabnzbd_watch_dir = "F:\media_station\media\nzb-watch\"
$sabnzbd_temp_dir = "F:\media_station\media\nzb-incomplete"
$sabnzbd_image_name = "linuxserver/sabnzbd"
$sabnzbd_port = $port
LogLine "Starting.." "sabnzbd"
StopAndRemoveContainer $sabnzbd_data_container_name
StopAndRemoveContainer $sabnzbd_app_container_name
docker create --name=$sabnzbd_data_container_name -v $sabnzbd_config_dir`:/config -v $sabnzbd_dl_dir`:/downloads -v $sabnzbd_temp_dir`:/incomplete-downloads -v $sabnzbd_watch_dir`:/watch -v /admin $sabnzbd_image_name
docker create --name=$sabnzbd_app_container_name --volumes-from $sabnzbd_data_container_name -p $sabnzbd_port`:8080 $sabnzbd_image_name
docker start $sabnzbd_app_container_name
RunContainer $sabnzbd_app_container_name '[ -d "/config/admin" ] && cp -r /config/admin /'
RunContainer $sabnzbd_app_container_name 'echo "* * * * * abc cp -r /admin /config" > /etc/cron.d/admin_sync'
RunContainer $sabnzbd_app_container_name 'chown -R abc:abc /admin'
RunContainer $sabnzbd_app_container_name 'chown -R abc:abc /watch'
RunContainer $sabnzbd_app_container_name 'echo "America/Toronto" >/etc/timezone && dpkg-reconfigure -f noninteractive tzdata'
}
function CouchPotato($port) {
$cp_data_container_name = "cp_data"
$cp_app_container_name = "cp"
$cp_config_dir = "F:\media_station\media\cp-config\"
$cp_dl_dir = "F:\media_station\media\nzb-dl"
$cp_movies_dir = "F:\media_station\media\movies\"
$cp_image_name = "linuxserver/couchpotato"
$cp_port = $port
LogLine "Starting.." "couchpotato"
StopAndRemoveContainer $cp_data_container_name
StopAndRemoveContainer $cp_app_container_name
docker create --name=$cp_data_container_name -v $cp_config_dir`:/config -v $cp_dl_dir`:/downloads -v $cp_movies_dir`:/movies $cp_image_name
docker create --name=$cp_app_container_name --volumes-from $cp_data_container_name -p $cp_port`:5050 $cp_image_name
docker start $cp_app_container_name
RunContainer $cp_app_container_name 'echo "America/Toronto" >/etc/timezone && dpkg-reconfigure -f noninteractive tzdata'
}
function Sickrage($port) {
$sickrage_data_container_name = "sickrage_data"
$sickrage_app_container_name = "sickrage"
$sickrage_config_dir = "F:\media_station\media\sr-config\"
$sickrage_dl_dir = "F:\media_station\media\nzb-dl"
$sickrage_tv_dir = "F:\media_station\media\tv"
$sickrage_image_name = "linuxserver/sickrage"
$sickrage_port = $port
LogLine "Starting.." "sickrage"
StopAndRemoveContainer $sickrage_data_container_name
StopAndRemoveContainer $sickrage_app_container_name
docker create --name=$sickrage_data_container_name -v $sickrage_config_dir`:/config-backup -v $sickrage_dl_dir`:/downloads -v $sickrage_tv_dir`:/tv -v /config $sickrage_image_name
docker create --name=$sickrage_app_container_name --volumes-from $sickrage_data_container_name -p $sickrage_port`:8081 $sickrage_image_name
docker start $sickrage_app_container_name
RunContainer $sickrage_app_container_name '[ -e "/config-backup/config.ini" ] && cp -r /config-backup/* /config/'
RunContainer $sickrage_app_container_name 'echo "* * * * * abc cp -r /config/* /config-backup/" > /etc/cron.d/config_sync'
RunContainer $sickrage_app_container_name 'chown -R abc:abc /config'
RunContainer $sickrage_app_container_name 'chown -R abc:abc /config-backup'
RunContainer $sickrage_app_container_name 'echo "America/Toronto" >/etc/timezone && dpkg-reconfigure -f noninteractive tzdata'
}
LogLine "Start."
Sabnzbd 4201
CouchPotato 4202
Sickrage 4203
LogLine "Finished." "MAIN"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment