From bee6c865c1b899ac27ebc671b9449b9ad4b35978 Mon Sep 17 00:00:00 2001 From: Kai Date: Wed, 6 Dec 2023 22:09:54 -0500 Subject: [PATCH] proper debian build --- DEBIAN/postinst | 22 +++++++++++++++++++--- DEBIAN/postrm | 8 +++----- DEBIAN/preinst | 3 ++- DEBIAN/prerm | 1 + README.md | 17 ++++++++++++++++- buildDebian.bat | 5 ++--- buildDebian.sh | 5 +++++ buildTestDebian.bat | 2 +- index.ts | 24 ++++++++++++++++++------ leek-duck-debian.service | 13 +++++++++++++ package.json | 1 + 11 files changed, 81 insertions(+), 20 deletions(-) create mode 100644 leek-duck-debian.service diff --git a/DEBIAN/postinst b/DEBIAN/postinst index f749448..e056fda 100644 --- a/DEBIAN/postinst +++ b/DEBIAN/postinst @@ -1,6 +1,22 @@ #!/bin/bash -apt-get update -apt-get install -y nodejs npm +sudo apt-get update +ARCHITECTURE=$(dpkg --print-architecture) +if [ "$ARCHITECTURE" == "amd64" ]; then + USEARCH="x64" +else + USEARCH=$ARCHITECTURE +fi +wget "https://nodejs.org/download/release/v18.18.2/node-v18.18.2-linux-$USEARCH.tar.gz" +tar -zxvf node-v18.18.2-linux-$USEARCH.tar.gz +sudo cp -r node-v18.18.2-linux-$USEARCH/{bin,include,lib,share} /usr/ +npm install -g ts-node +chown -R :auto-services /opt/auto/LeekDuck/ +chmod g+rwx /opt/auto/LeekDuck/ -npm install -g ts-node \ No newline at end of file +systemctl daemon-reload +systemctl enable leek-duck +echo "After installation, please navigate to the project directory located at: /opt/auto/LeekDuck and run 'npm install' to install dependencies, then run 'systemctl start leek-duck' to start the service" + +# systemctl start leek-duck +exit 0 \ No newline at end of file diff --git a/DEBIAN/postrm b/DEBIAN/postrm index 9868a52..91c1c61 100644 --- a/DEBIAN/postrm +++ b/DEBIAN/postrm @@ -1,9 +1,7 @@ #!/bin/bash userdel -r leek-duck -if [ "$1" = "0" ]; then - rm -rf /opt/auto/LeekDuck - rm -f /etc/systemd/system/leek-duck.service -fi + systemctl daemon-reload -userdel leek-duck \ No newline at end of file + +exit 0 \ No newline at end of file diff --git a/DEBIAN/preinst b/DEBIAN/preinst index 8dc5e11..a49e17d 100644 --- a/DEBIAN/preinst +++ b/DEBIAN/preinst @@ -1,5 +1,6 @@ #!/bin/bash -useradd --system leek-duck +useradd --system --create-home --home-dir /home/leek-duck leek-duck groupadd auto-services usermod -a -G auto-services leek-duck +exit 0 \ No newline at end of file diff --git a/DEBIAN/prerm b/DEBIAN/prerm index cc92720..ab4383e 100644 --- a/DEBIAN/prerm +++ b/DEBIAN/prerm @@ -1,3 +1,4 @@ #!/bin/bash systemctl stop leek-duck systemctl disable leek-duck +exit 0 \ No newline at end of file diff --git a/README.md b/README.md index 3d612fa..27e8243 100644 --- a/README.md +++ b/README.md @@ -36,4 +36,19 @@ ## Running - To run the aplication in dev mode: - Run `npm run dev` to run in dev mode or, - - Run `ts-node index.ts` \ No newline at end of file + - Run `ts-node index.ts` + +## Rasberry Pi? +- If you want to run this on a rasberyr pi the only way I found that works so far is: + - use Rasberry Pi OS (Latest 64 bit) + - curl -sSL https://get.docker.com | sh + - mkdir mongodb (in /home/user/) + - sudo docker pull mongo:4.4.13 + - sudo docker run --rm -d -p 27017:27017 -v ~/mongodb:/data/db --name mongodb mongo:4.4.13 + - To install .deb on RPi, Since the debian version < 12, zstd is needed to modify the .deb package. + - ar x leek-duck_0.0.1_all.deb + - zstd -d < control.tar.zst | xz > control.tar.xz + - zstd -d < data.tar.zst | xz > data.tar.xz + - ar -m -c -a sdsd /tmp/leek-duck_0.0.1_all.deb debian-binary control.tar.xz data.tar.xz + - rm debian-binary control.tar.xz data.tar.xz control.tar.zst data.tar.zst + - apt-get install /tmp/some-package.deb \ No newline at end of file diff --git a/buildDebian.bat b/buildDebian.bat index 8ce8006..115be4a 100644 --- a/buildDebian.bat +++ b/buildDebian.bat @@ -1,9 +1,8 @@ docker build -f DebianDockerfile --cache-from debianbuilder -t debianbuilder . rmdir shared /s /q -mkdir shared\opt\auto\LeekDuck\node_modules +mkdir shared\opt\auto\LeekDuck mkdir shared\etc\systemd\system -xcopy /s node_modules shared\opt\auto\LeekDuck\node_modules xcopy /s /I DEBIAN shared\DEBIAN copy connectMango.tsx shared\opt\auto\LeekDuck copy dbOps.ts shared\opt\auto\LeekDuck @@ -13,6 +12,6 @@ copy index.ts shared\opt\auto\LeekDuck copy package-lock.json shared\opt\auto\LeekDuck copy package.json shared\opt\auto\LeekDuck copy tsconfig.json shared\opt\auto\LeekDuck -copy leek-duck.service shared\etc\systemd\system\ +copy leek-duck-debian.service shared\etc\systemd\system\ docker run --rm -it -v E:\Projects\Home_auto\checkLeekDuck\shared:/leek-duck_0.0.1_all debianbuilder diff --git a/buildDebian.sh b/buildDebian.sh index caf82a5..896821c 100644 --- a/buildDebian.sh +++ b/buildDebian.sh @@ -1,4 +1,9 @@ +mv leek-duck_0.0.1_all/etc/systemd/system/leek-duck-debian.service leek-duck_0.0.1_all/etc/systemd/system/leek-duck.service chmod -R 755 leek-duck_0.0.1_all/DEBIAN +chmod 644 leek-duck_0.0.1_all/DEBIAN/control leek-duck_0.0.1_all/etc/systemd/system/leek-duck.service + +chmod 755 leek-duck_0.0.1_all +chmod 755 leek-duck_0.0.1_all/DEBIAN leek-duck_0.0.1_all/opt leek-duck_0.0.1_all/etc leek-duck_0.0.1_all/etc/systemd leek-duck_0.0.1_all/etc/systemd/system dpkg-deb --build leek-duck_0.0.1_all diff --git a/buildTestDebian.bat b/buildTestDebian.bat index 1d1cf95..bea6e8f 100644 --- a/buildTestDebian.bat +++ b/buildTestDebian.bat @@ -9,6 +9,6 @@ copy tests\index.ts shared\opt\auto\LeekDuck copy package-lock.json shared\opt\auto\LeekDuck copy package.json shared\opt\auto\LeekDuck copy tsconfig.json shared\opt\auto\LeekDuck -copy leek-duck.service shared\etc\systemd\system\ +copy leek-duck-debian.service shared\etc\systemd\system docker run --rm -it -v E:\Projects\Home_auto\checkLeekDuck\shared:/leek-duck_0.0.1_all debianbuilder diff --git a/index.ts b/index.ts index 12eb057..2cf61a9 100644 --- a/index.ts +++ b/index.ts @@ -1,14 +1,15 @@ -const puppeteer = require('puppeteer') +const puppeteer = require('puppeteer-core') import { Browser } from 'puppeteer' import db from './dbOps' import DuckInt from './duckInferface' const cron = require('node-cron') -const basedDuck = 'https://leekduck.com' -const duck = basedDuck + '/events' +const basedDuck: string = 'https://leekduck.com' +const duck: string = basedDuck + '/events' -const main = async () => { - const browser: Browser = await puppeteer.launch({headless: true}) +const get = async () => { + // When building for or running on Linux, add the field executablePath: '/path/to/chromium-browser' + const browser: Browser = await puppeteer.launch({ headless: true}) const page = await browser.newPage() await page.goto(duck) @@ -33,7 +34,18 @@ const main = async () => { await browser.close() let formatted: Array = duckData; - await db(formatted); + return formatted +} + +const send = async (ducks: Array) => { + await db(ducks); +} + + +const main = async () => { + + let ducks: Array = await get() + await send(ducks) } main() diff --git a/leek-duck-debian.service b/leek-duck-debian.service new file mode 100644 index 0000000..f1d3a28 --- /dev/null +++ b/leek-duck-debian.service @@ -0,0 +1,13 @@ +[Unit] +Description=LeekDuck Service for + +[Service] +Type=simple +User=leek-duck +Group=auto-services +WorkingDirectory=/opt/auto/LeekDuck/ +ExecStart=/usr/bin/ts-node /opt/auto/LeekDuck/index.ts +Restart=on-failure + +[Install] +WantedBy=multi-user.target \ No newline at end of file diff --git a/package.json b/package.json index 27259df..1ab60f9 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "mongoose": "^8.0.1", "node-cron": "^3.0.3", "puppeteer": "^21.5.2", + "puppeteer-core": "^21.5.2", "ts-node": "^10.9.1", "typescript": "^5.2.2" }