summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Fankhauser hiddenalpha.ch2024-09-30 18:49:24 +0200
committerAndreas Fankhauser hiddenalpha.ch2024-09-30 18:49:24 +0200
commit8abe4002c04c3e381d54ff57a2b7e2aaf551b7a3 (patch)
tree6f9c9e86f2731af3e5d414a16ae7e5d69aa0ceb8
parent69782e8b126fdcd5b51e40773099c136e139a839 (diff)
parentcaf8fe34a85facf4edad8930015fbe9ae3d5f7b6 (diff)
downloadUnspecifiedGarbage-8abe4002c04c3e381d54ff57a2b7e2aaf551b7a3.zip
UnspecifiedGarbage-8abe4002c04c3e381d54ff57a2b7e2aaf551b7a3.tar.gz
Merge remote-tracking branch 'origin/master'
-rw-r--r--doc/note/docker/Docker-Daemon-Install.txt36
-rw-r--r--doc/note/qemu/compile-qemu-itself.txt (renamed from doc/note/qemu/qemu-compile-itself.txt)0
-rw-r--r--doc/note/qemu/docker-microVM.txt158
-rw-r--r--doc/note/qemu/setup-dockerVM.txt86
-rw-r--r--doc/note/setup/build-cJSON.txt (renamed from doc/note/qemu/build-cJSON.txt)0
-rw-r--r--doc/note/setup/build-gateleen.txt (renamed from doc/note/qemu/build-gateleen.txt)0
-rw-r--r--doc/note/setup/build-libarchive.txt (renamed from doc/note/qemu/build-libarchive.txt)0
-rw-r--r--doc/note/setup/build-libcurl.txt (renamed from doc/note/qemu/build-libcurl.txt)0
-rw-r--r--doc/note/setup/build-libpcap.txt (renamed from doc/note/qemu/build-libpcap.txt)0
-rw-r--r--doc/note/setup/build-libpcre1.txt (renamed from doc/note/qemu/build-libpcre1.txt)0
-rw-r--r--doc/note/setup/build-lua.txt (renamed from doc/note/qemu/build-lua.txt)0
-rw-r--r--doc/note/setup/build-sqlite.txt (renamed from doc/note/qemu/build-sqlite.txt)0
-rw-r--r--doc/note/setup/build-zlib.txt (renamed from doc/note/qemu/build-zlib.txt)0
-rw-r--r--doc/note/setup/php-dev-server.txt (renamed from doc/note/qemu/php-dev-server.txt)0
-rw-r--r--doc/note/setup/setup-android-env.txt (renamed from doc/note/qemu/setup-android-env.txt)0
-rw-r--r--doc/note/setup/setup-debian.txt4
-rw-r--r--doc/note/setup/setup-jni-env.txt (renamed from doc/note/qemu/setup-jni-env.txt)0
-rw-r--r--doc/note/setup/setup-jre8-env.txt (renamed from doc/note/qemu/setup-jre8-env.txt)0
-rw-r--r--doc/note/setup/setup-maven-env.txt (renamed from doc/note/qemu/setup-maven-env.txt)0
-rw-r--r--doc/note/setup/setup-nginx-env.txt (renamed from doc/note/qemu/setup-nginx-env.txt)0
-rw-r--r--doc/note/setup/setup-windoof.txt (renamed from doc/note/qemu/setup-windoof.txt)0
-rw-r--r--doc/note/sqlite/execSqlFileThroughPhp.txt2
-rw-r--r--doc/note/sqlite/sqlite.txt8
23 files changed, 187 insertions, 107 deletions
diff --git a/doc/note/docker/Docker-Daemon-Install.txt b/doc/note/docker/Docker-Daemon-Install.txt
index 1bfa6bb..0bbe7eb 100644
--- a/doc/note/docker/Docker-Daemon-Install.txt
+++ b/doc/note/docker/Docker-Daemon-Install.txt
@@ -1,26 +1,23 @@
-How to install a docker daemon eg in a VM or so
-===============================================
+How to install docker daemon on debian
+======================================
-Setup a VM (eg debian bullseye)
+Set proxy settings in environ if needed.
-Add auth proxy in "/etc/environment"
-Make sure "apt update" works.
+ && SUDO=sudo \
+ && $SUDO apt install -y --no-install-recommends ca-certificates curl gnupg lsb-release \
+ && `# TODO what is this step for? ` \
+ && `# sudo install -m 0755 -d /etc/apt/keyrings ` \
+ && $SUDO curl -fsSL -o /etc/apt/keyrings/docker.asc 'https://download.docker.com/linux/debian/gpg' \
+ && $SUDO chmod a+r /etc/apt/keyrings/docker.asc
+ && printf %s\\n \
+ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc]" \
+ "https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" \
+ | $SUDO tee /etc/apt/sources.list.d/docker.list > /dev/null \
+ && $SUDO apt update \
+ && $SUDO apt install -y --no-install-recommends docker-ce docker-ce-cli containerd.io \
-Install docker as described on "https://docs.docker.com/engine/install/debian/"
-
- sudo apt update
- sudo apt-get install -y --no-install-recommends ca-certificates curl gnupg lsb-release
-
- # I had to download that gpg on my host and then pasting it into the vm
- # to use it there
- curl -sSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
-
- echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
-
- sudo apt update
- sudo apt install -y --no-install-recommends docker-ce docker-ce-cli containerd.io
Edit "/lib/systemd/system/docker.service" and add environ config in "service"
section (HINT: "/etc/environment" does not work)
@@ -50,4 +47,7 @@ HINT: Maybe 'insecure' not needed, ToBeTested.
+## Links
+
+[Install Docker Engine on Debian](https://docs.docker.com/engine/install/debian/)
diff --git a/doc/note/qemu/qemu-compile-itself.txt b/doc/note/qemu/compile-qemu-itself.txt
index aed0522..aed0522 100644
--- a/doc/note/qemu/qemu-compile-itself.txt
+++ b/doc/note/qemu/compile-qemu-itself.txt
diff --git a/doc/note/qemu/docker-microVM.txt b/doc/note/qemu/docker-microVM.txt
new file mode 100644
index 0000000..c3bd0d5
--- /dev/null
+++ b/doc/note/qemu/docker-microVM.txt
@@ -0,0 +1,158 @@
+
+Use qemu to host dockerimages.
+==============================
+
+TODO: Write helpers to pull/convert docker image to qcow2
+TODO: Impl host shared dirs. Should be possible using 9pfs (see link).
+
+For "virt-make-fs" install "guestfs-tools".
+
+WARN: This is work-in-progress. It is NOT really usable yet.
+
+true \
+ && LINUX_URL=https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.7.4.tar.xz \
+ && SUDO=sudo \
+ && CACHEDIR=/var/tmp \
+ && WORKDIR=/home/$USER/work \
+ && LINUX_TXZ=$(basename "${LINUX_URL:?}") \
+ && $SUDO apt install -y --no-install-recommends curl make gcc bc flex bison libc-dev libelf-dev libssl-dev \
+ && cd "${CACHEDIR:?}" \
+ && curl -L "${LINUX_URL:?}" -O \
+ && mkdir -p "${WORKDIR:?}" \
+ && cd "${WORKDIR:?}" \
+ && tar xf "${CACHEDIR:?}/${LINUX_TXZ:?}" \
+ && cd linux* \
+ && base64 -d <<EOF | gunzip > .config &&
+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
+xqZFdHAYI2VciPZ/TosyDcUdAAA=
+EOF
+true \
+ && make olddefconfig \
+ && make -j$(nproc) \
+ && `# Create our own pseudo 'init' system` \
+ && `# TODO fix zombie processes (aka add waitpid() SIGCHILD handling to init)` \
+ && mkdir "${WORKDIR:?}/myinit" \
+ && cd "${WORKDIR:?}/myinit" \
+ && base64 -d <<EOF_jXxQDgrLcOFqcSrh | gunzip > "./myinit.c" &&
+H4sIABBA+GYAA41UTY/TMBC951eMgqiSqGzawwqJbpEQFIG0tBzKCRDKOk5ibWIHj1PRRf3vjJ2PZtsK1Yf4+WXmzfOn90JIVjY
+phzuutVQ3xVvvSKFJxTlViofnXCMF0Sdxe4wr1UhzTqNJ/sN6FggGrEg0RExJNKAavZI7oZX8/hOW8NcDav7Xd9tPy7hBHZeKJW
+X8IOSb0RCH8QBayn0s9KdOaP3t/n7qHRZD6Z0SKTjzv1jB2WPgwpwh5ydCzabjcYpmehqT4XZf8ymUSubQSBS55KQqzccyxzba1
+Wmjid/UBr2wmxwa3TAD1hAImamFY0UWOCqwBWFif4SwXMKrOUwm4DbQDlfrzWq9hbCVsq3WQpos8N9rTjMkQy/xB00fSCdcDFFW
+vnpMhW71Z69vb0O4g9lYyalRJaVHapTCmVF6D1kiSp76I1Hb+B9hgvmIPHjHb+/ti13wi96cL/s3cAvvzPXL2y8odCt4Zrg36+Q
+v+Hvm7eAdPI/sQJUIGYBFic67zY4iwrtee3w+fKkkJ8t+XGvFLOj6GcG+2OWElO9ism0xwRZdl1X9bnjjhgO6LhGLymJT1dl11e
+h62p666xPiDGOWa9XUlhnQOBe5KRQamVQ88CvBtNpZYyieuMqOTNiFx9F282EDnyFvOCKYQiBgwcsSkGlRG9rJmk4hkaridtswi
+r12hzkrqYS9+DR553AE7UsQCynMjSPcazB6cbrq/TFakdjJKdLcNFrCfGEPzz+XOnXTUQUAAA==
+EOF_jXxQDgrLcOFqcSrh
+true \
+ && CFLAGS="-Wall -Werror -pedantic -static" `# TODO maybe add "-Os -s"` \
+ && gcc -o myinit myinit.c ${CFLAGS?}\
+ && echo "[ERROR] TODO Need more steps here" && false \
+ && echo _script_is_DONE_kx1n2kgNWRdpBYTP_ \
+
+
+## Example docker image transformation
+
+ && rm -rf "${WORKDIR:?}/dockerbuild" \
+ && mkdir "${WORKDIR:?}/dockerbuild" \
+ && cd "${WORKDIR:?}/dockerbuild" \
+ && cp "${WORKDIR:?}/myinit/myinit" init \
+ && base64 -d <<EOF_BSgBW2SBUEB7zcJv | gzip -d > "Dockerfile" &&
+H4sIANRD+GYAA21R226CQBR89ytO0sQXgwp4ow9NEMSqWMAbhfTBBVZZxQXZ9Ub68VUTU5v0PE1mziRn5hgTawx0Tej5VaxKYrV
+emsw/gOcHDF8lgHIZUMbhkEWI/2EIZRwlCQgXICwUojjMhDAhmHJYvsDM0i3I8S49YuAxYcuHFYdxCu8NNlDHkV7pe6p6cS3m5N
+q4OzEUuTASp+WjTU2dT+ph3nNbmtY4Y1fSlNF8a0p6Td53T3xtU3kXfB6doSwhJnZ9b4gJ0Uwf9WbG0JWs9YDGA8VFrJ+eOr6xM
+ubGgm3OPV/zx87Q5KmceefCVhqrU0WebgqdheYFL+xINoP+NvBEEWUdBavtjjPjulW3TbMYRHyUHY9Jvu/NptfDVfUe6j7fECCG
+Ww0QoiteFyS7oTeosYDQGqGEV1n86CCMd2kE7WbzfznfgbB6kp5bDxOM6IO4PamkWbYH97VfR+kHD2L339UBAAA=
+EOF_BSgBW2SBUEB7zcJv
+true \
+ && DOCKER_BUILDKIT=1 $SUDO docker build -f ./Dockerfile --output "type=tar,dest=dockerimage.tar" . \
+ && virt-make-fs --format=qcow2 --size=+200M dockerimage.tar dockerimage-large.qcow2 \
+ && qemu-img convert dockerimage-large.qcow2 -O qcow2 dockerimage.qcow2 \
+ && rm dockerimage-large.qcow2 \
+
+
+## Collect created resources
+
+Likely to be run on qemu HOST, to get needed resources out of VM to host
+to start VMs from it later.
+
+ && WORKDIRHOST="path/to/where/you/want/the/files" \
+ && WORKDIRGUEST="/home/user/work" \
+ && SSH=ssh \
+ && cd "${WORKDIRHOST:?}" \
+ && ${SSH:?} -oRemoteCommand='tar --owner=0 --group=0 -ch -C "'"${WORKDIRGUEST:?}"'/myinit" myinit -C "'"${WORKDIRGUEST:?}"'/linux-6.7.4/arch/x86_64/boot" bzImage -C "'"${WORKDIRGUEST:?}"'/dockerbuild" dockerimage.qcow2' \
+ | tar -C "${WORKDIRHOST:?}" -x \
+ && mv myinit init \
+ && mv bzImage kernel \
+ && mv dockerimage.qcow2 hda.qcow2 \
+
+
+## Test launch full VM
+
+KERNEL=kernel
+HOST_SHARE_DIR="/path/to/host/share"
+QEMU_IMAGE="hda.qcow2"
+# mount share from guest: mount -t 9p myMountTag /mnt/share -otrans=virtio,version=9p2000.L,msize=52428800
+qemu-system-x86_64 \
+ -M microvm,x-option-roms=off,isa-serial=off,rtc=off -no-acpi -no-reboot \
+ -accel kvm -cpu host -nodefaults -no-user-config -nographic \
+ -m 1G -smp $(nproc) \
+ -device virtio-serial-device \
+ -chardev stdio,id=virtiocon0 -device virtconsole,chardev=virtiocon0 \
+ -kernel "${KERNEL:?}" \
+ -append "console=hvc0 root=/dev/vda rw acpi=off reboot=t panic=-1 quiet" \
+ -drive id=root,file=${QEMU_IMAGE:?},format=qcow2,if=none \
+ -device virtio-blk-device,drive=root \
+ -netdev user,id=mynet0 \
+ -device virtio-net-device,netdev=mynet0 \
+ -fsdev local,path=${HOST_SHARE_DIR:?},security_model=none,id=www,readonly=on \
+ -device virtio-9p-device,fsdev=www,mount_tag=myMountTag \
+ -device virtio-rng-device \
+ ;
+
+
+## Refs
+
+- [Execute Docker Containers as QEMU MicroVMs](https://mergeboard.com/blog/2-qemu-microvm-docker/)
+
+
+
diff --git a/doc/note/qemu/setup-dockerVM.txt b/doc/note/qemu/setup-dockerVM.txt
deleted file mode 100644
index 9bbcff7..0000000
--- a/doc/note/qemu/setup-dockerVM.txt
+++ /dev/null
@@ -1,86 +0,0 @@
-
-#
-# Use qemu to host dockerimages.
-#
-# [Execute Docker Containers as QEMU MicroVMs](https://mergeboard.com/blog/2-qemu-microvm-docker/)
-#
-
-true \
- && LINUX_URL=https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.7.4.tar.xz \
- && SUDO=sudo \
- && CACHEDIR=/var/tmp \
- && WORKDIR=/home/$USER/work \
- && LINUX_TXZ=$(basename "${LINUX_URL:?}") \
- && $SUDO apt install -y --no-install-recommends curl make gcc bc flex bison libc-dev libelf-dev libssl-dev \
- && cd "${CACHEDIR:?}" \
- && curl -L "${LINUX_URL:?}" -O \
- && mkdir -p "${WORKDIR:?}" \
- && cd "${WORKDIR:?}" \
- && tar xf "${CACHEDIR:?}/${LINUX_TXZ:?}" \
- && cd linux* \
- && base64 -d <<EOF | gunzip > .config &&
-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
-xqZFdHAYI2VciPZ/TosyDcUdAAA=
-EOF
-true \
- && make olddefconfig \
- && make -j$(nproc) \
- && base64 -d <<EOF | gunzip > "${CACHEDIR:?}/gagainit.c" &&
-H4sIACTh02UAA41UTYvbMBC9+1cIlwY7JKtsYSlsNoVSAj1s0x62pzQsijxORCzJq4+wacl/35Ed
-u85HS3ywnp5n5j2NJNP+3Bq+SNbOlfaeUglmBUvNTHbDtaTLQq/oh+ELSD+Ughu9lcNM8w0YmvZp
-9E4oXvgMyAMYo/TN+lOHsi4T51QhlsecVwLpk7idpVJ75c5p69h/2IivmSF9rpV1JIOc+cI9g9oK
-o5UE5eYLMiF/IoJP/OPz09cJ9dbQQnNW0KVQ952pbectqKnqFWA8qArNfj4+DqL9OIq2WmSk8v3M
-18A3SfW9NlMbs9obDoMjzjFsuRucxeaiAFybA+l2JeZ4ZcVKQUYKrVa1TF6wle1mVg76GXMsSg/r
-tM547kjoEBEq1+gz0CInSeCSgzzphY8pmUzI8Jb0eqTa0TCdzr5PZ09NufCURqB2En8xwJxAM+/t
-L+wGqUul4zYwiMhNJkyrMvp4d5eSBzLq1qtqop42nZqYBdxpsyM5w05kcadueOBVuOS2Q+6j+h11
-LX4LbfqXxcpeCEiafWlsnva+020Sunu2hMZ+pXfB8ZHbfYQu0R+RTKgkAJTlg8O+I97OF03x7nGK
-lVaAi4hpaTQP4DCOEDZqlxMy2NLS2YAR1ui6LPniwVfTFl2XaNcyYCfL/Do1bHgYcbg+geaW8pXR
-vgxMi5rc+gaAW2vrFJOQxIe/GMZY8Rt0/pdJm3h4BV5gaLjpuIpKqoXVbb/0azk4bQ7CFIucnAMD
-zhtFbse4/W9r76rneAUAAA==
-EOF
-true \
- && gcc -Wall -static -o "${CACHEDIR:?}/gagainit" "${CACHEDIR:?}/gagainit.c" \
- && echo "[ERROR] TODO Need more steps here" && false \
- && true
-
-
diff --git a/doc/note/qemu/build-cJSON.txt b/doc/note/setup/build-cJSON.txt
index 0e8d0df..0e8d0df 100644
--- a/doc/note/qemu/build-cJSON.txt
+++ b/doc/note/setup/build-cJSON.txt
diff --git a/doc/note/qemu/build-gateleen.txt b/doc/note/setup/build-gateleen.txt
index 2763dae..2763dae 100644
--- a/doc/note/qemu/build-gateleen.txt
+++ b/doc/note/setup/build-gateleen.txt
diff --git a/doc/note/qemu/build-libarchive.txt b/doc/note/setup/build-libarchive.txt
index 96f95d6..96f95d6 100644
--- a/doc/note/qemu/build-libarchive.txt
+++ b/doc/note/setup/build-libarchive.txt
diff --git a/doc/note/qemu/build-libcurl.txt b/doc/note/setup/build-libcurl.txt
index be7b8c2..be7b8c2 100644
--- a/doc/note/qemu/build-libcurl.txt
+++ b/doc/note/setup/build-libcurl.txt
diff --git a/doc/note/qemu/build-libpcap.txt b/doc/note/setup/build-libpcap.txt
index b86dd1c..b86dd1c 100644
--- a/doc/note/qemu/build-libpcap.txt
+++ b/doc/note/setup/build-libpcap.txt
diff --git a/doc/note/qemu/build-libpcre1.txt b/doc/note/setup/build-libpcre1.txt
index 491809b..491809b 100644
--- a/doc/note/qemu/build-libpcre1.txt
+++ b/doc/note/setup/build-libpcre1.txt
diff --git a/doc/note/qemu/build-lua.txt b/doc/note/setup/build-lua.txt
index 5440233..5440233 100644
--- a/doc/note/qemu/build-lua.txt
+++ b/doc/note/setup/build-lua.txt
diff --git a/doc/note/qemu/build-sqlite.txt b/doc/note/setup/build-sqlite.txt
index 81210f9..81210f9 100644
--- a/doc/note/qemu/build-sqlite.txt
+++ b/doc/note/setup/build-sqlite.txt
diff --git a/doc/note/qemu/build-zlib.txt b/doc/note/setup/build-zlib.txt
index a90e616..a90e616 100644
--- a/doc/note/qemu/build-zlib.txt
+++ b/doc/note/setup/build-zlib.txt
diff --git a/doc/note/qemu/php-dev-server.txt b/doc/note/setup/php-dev-server.txt
index c1a8b01..c1a8b01 100644
--- a/doc/note/qemu/php-dev-server.txt
+++ b/doc/note/setup/php-dev-server.txt
diff --git a/doc/note/qemu/setup-android-env.txt b/doc/note/setup/setup-android-env.txt
index 0008c16..0008c16 100644
--- a/doc/note/qemu/setup-android-env.txt
+++ b/doc/note/setup/setup-android-env.txt
diff --git a/doc/note/setup/setup-debian.txt b/doc/note/setup/setup-debian.txt
index 582764e..202fec7 100644
--- a/doc/note/setup/setup-debian.txt
+++ b/doc/note/setup/setup-debian.txt
@@ -94,7 +94,7 @@ Populate "/etc/environment" as described by "./etc-environment".
&& $SUDO apt install -y --no-install-recommends \
`# basic CLI` \
vim htop pv openssh-client iptables iptables-persistent xxd zip unzip xz-utils p7zip-full \
- file trash-cli ncat curl \
+ file trash-cli ncat curl ntp \
`# basic UI (vim-gtk required for system clipboard)` \
vim-gtk3 firefox-esr pcmanfm file-roller thunderbird chromium okular \
`# software devel` \
@@ -124,7 +124,7 @@ Populate "/etc/environment" as described by "./etc-environment".
`# Low level ` \
lm-sensors fancontrol exfat-fuse exfatprogs \
`# Others` \
- systemd-sysv bc rsync qrencode libxml2-utils \
+ systemd-sysv bc rsync qrencode libxml2-utils adb \
`# Nvidia graphics (open)` \
mesa-utils clinfo mesa-opencl-icd \
`# Nvidia graphics (non-free, DoesNotWorkYet)` \
diff --git a/doc/note/qemu/setup-jni-env.txt b/doc/note/setup/setup-jni-env.txt
index 62d204a..62d204a 100644
--- a/doc/note/qemu/setup-jni-env.txt
+++ b/doc/note/setup/setup-jni-env.txt
diff --git a/doc/note/qemu/setup-jre8-env.txt b/doc/note/setup/setup-jre8-env.txt
index f39cf98..f39cf98 100644
--- a/doc/note/qemu/setup-jre8-env.txt
+++ b/doc/note/setup/setup-jre8-env.txt
diff --git a/doc/note/qemu/setup-maven-env.txt b/doc/note/setup/setup-maven-env.txt
index e4ce16d..e4ce16d 100644
--- a/doc/note/qemu/setup-maven-env.txt
+++ b/doc/note/setup/setup-maven-env.txt
diff --git a/doc/note/qemu/setup-nginx-env.txt b/doc/note/setup/setup-nginx-env.txt
index 9a5aeb2..9a5aeb2 100644
--- a/doc/note/qemu/setup-nginx-env.txt
+++ b/doc/note/setup/setup-nginx-env.txt
diff --git a/doc/note/qemu/setup-windoof.txt b/doc/note/setup/setup-windoof.txt
index 5df2cac..5df2cac 100644
--- a/doc/note/qemu/setup-windoof.txt
+++ b/doc/note/setup/setup-windoof.txt
diff --git a/doc/note/sqlite/execSqlFileThroughPhp.txt b/doc/note/sqlite/execSqlFileThroughPhp.txt
index 3bb4126..da080b1 100644
--- a/doc/note/sqlite/execSqlFileThroughPhp.txt
+++ b/doc/note/sqlite/execSqlFileThroughPhp.txt
@@ -1,7 +1,7 @@
<?php
$srcSqlFile = "path/to/query.sql";
$dstDbFile = "path/to/sqlite.db";
-$stmts = file_get_contents($srcSqlFile);
+$stmts = file_get_contents($srcSqlFile) or exit(1);
$stmts = explode(';', $stmts);
$db = new SQLite3($dstDbFile);
$db->enableExceptions(true);
diff --git a/doc/note/sqlite/sqlite.txt b/doc/note/sqlite/sqlite.txt
index 3805e07..ddcc0ae 100644
--- a/doc/note/sqlite/sqlite.txt
+++ b/doc/note/sqlite/sqlite.txt
@@ -26,6 +26,13 @@ csv Example (no headrow):
sqlite3 foo.db -bail -cmd '.mode csv' -cmd '.separator ;' -cmd '.import foo.csv FooTable'
+## Insert conditional
+
+INSERT INTO table(id, text)
+SELECT 5, 'text to insert'
+WHERE NOT EXISTS (SELECT 1 FROM table WHERE id = 5)
+
+
## Drop Column
ALTER TABLE table DROP COLUMN column;
@@ -39,4 +46,5 @@ csv Example (no headrow):
## Refs
[drop column TODO vote](https://stackoverflow.com/a/66399224/4415884)
+[insert if not exists](https://stackoverflow.com/a/19337206/4415884)