diff --git a/source/_static/CC0_button.svg b/source/_static/CC0_button.svg new file mode 100644 index 0000000..195592b --- /dev/null +++ b/source/_static/CC0_button.svg @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/_static/custom.css b/source/_static/custom.css new file mode 100644 index 0000000..710021c --- /dev/null +++ b/source/_static/custom.css @@ -0,0 +1,71 @@ +@font-face { + font-family: andale; + src: url("fonts/ANDALEMO.TTF"); +} + +.yue h1, .yue h2, .yue h3, .yue h4, .yue h5, +.t-sidebar h1, .t-sidebar h2, .t-sidebar h3 { + font-family: andale; + letter-spacing: -2px; +} +.yue h1 { + background: #111111; + color: #efefef; + padding-left: 20px; + margin-left: -20px; + letter-spacing: 0px; +} + +.t-sidebar { + background: #111111; + font-size: 0.8em; +} + +.t-sidebar .inner { + width: auto; +} + +.yue pre { + font-family: andale; +} + +.t-sidebar a, .t-sidebar li > a { + color: #a9e35a; +} +.t-sidebar h1, .t-sidebar h2, .t-sidebar h3, +.t-sidebar h1 > a, .t-sidebar h2 > a, .t-sidebar h3 > a, +.yue h1 a { + color: #efefef; +} + +.t-sidebar a:hover, .t-sidebar li > a:hover { + color: #efefef; +} + +#searchbox .input-group > button { + background-color: #dd4444; +} + +.caption-text { + font-size: 1.5em; + font-weight: bold; + font-family: andale; + color: #000000; +} + +.cc0 { + display:inline-block; + padding: 10px 40px; + background-image: url("CC0_button.svg"); + background-repeat: no-repeat; + background-size: contain; +} + +a.atom { + color: #dd6644; + font-weight: bold; +} +.atom img { + width: 30px; + font-family: andale; +} diff --git a/source/_static/fonts/ANDALEMO.TTF b/source/_static/fonts/ANDALEMO.TTF new file mode 100644 index 0000000..40f4e4d Binary files /dev/null and b/source/_static/fonts/ANDALEMO.TTF differ diff --git a/source/_static/rss-icon.svg b/source/_static/rss-icon.svg new file mode 100644 index 0000000..f4df406 --- /dev/null +++ b/source/_static/rss-icon.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/blog/automaticcrm-iso.rst b/source/blog/automaticcrm-iso.rst new file mode 100644 index 0000000..6cddc35 --- /dev/null +++ b/source/blog/automaticcrm-iso.rst @@ -0,0 +1,155 @@ +.. post:: 2019.08.10 + :tags: howto,ubuntu,gnu/linux,installation + :category: gnu/linux + :author: vladan + :location: Belgrade + +=========================== +AutomaticCRM Ubuntu Desktop +=========================== + +Below are the steps taken to create the Ubuntu 18.04.2 installer for the needs +of AutomaticCRM according to the requirements ... + + Operating system + + * Only one domain is allowed ( dev.automaticcrm.ai ) in network adapter + * No print screen functionality + * No usb memory functionality + * No access to the filesystem + * No apps except browser + + + +Steps to set up the build environment +===================================== + + +.. code-block:: bash + + mkdir disk + sudo mount -o ubuntu-18.04.2-desktop-amd64.iso disk + rsync --exclude=/casper/filesystem.squashfs -av disk/ livecd/ + + +Set up the rootfs +================= + +.. code-block:: bash + + unsquashfs disk/casper/filesystem.squashfs + sudo systemd-nspawn \ + --directory squashfs-root/ \ + --bind ~/dev/automaticcrm/deb:/opt/deb + --bind /etc/resolv.conf /bin/bash + +Once in the shell, run these commands: + +.. code-block:: bash + + apt-get update + apt-get -y purge \ + usb-creator-common \ + usb-creator-gtk \ + thunderbird-gnome-support \ + thunderbird \ + remmina-common \ + remmina \ + remmina-plugin-rdp \ + remmina-plugin-vnc \ + firefox* \ + libreoffice* \ + alsa* \ + cups* \ + gnome-screenshot \ + evince \ + gedit + + dpkg -i /opt/deb/google-chrome-stable_current_amd64.deb + + +Restrict domains +================ + +To redirect all domains to localhost, except dev.automaticcrm.ai, create the +file ``/etc/dnsmasq.d/autocrm.conf`` with these lines: + +.. code-block:: ini + + address=/#/127.0.0.1 + server=/dev.automaticcrm.ai/8.8.8.8 + +Add this line to /etc/dnsmasq.conf + +.. code-block:: ini + + conf-dir=/etc/dnsmasq.d + + +Run Chrome ONLY +=============== + +Override the path for all users. + +Edit the desktop entry in ``/usr/share/xsessions/ubuntu.desktop`` so it starts +Chrome in fullscreen mode: + +.. code-block:: ini + + [Desktop Entry] + Name=Ubuntu + Comment=This session logs you into Ubuntu + Exec=env GNOME_SHELL_SESSION_MODE=ubuntu /usr/bin/google-chrome --kiosk https://dev.automaticcrm.ai + Type=Application + DesktopNames=ubuntu:AutomaticCRM + X-Ubuntu-Gettext-Domain=gnome-session-3.0 + +.. note:: + + If you want to change the domain, edit this file and also enable it in the + dnsmqsq config above. + +Remove USB drivers +================== + +.. code-block:: bash + + printf "\n#AutomaticCRM disabled modules\nblacklist uas\nblacklist usb_storage\n" >> /etc/modprobe.d/blacklist.conf + + +Create the ISO +============== + +Pack the squashfs image and copy it to casper. + +.. code-block:: bash + + sudo mksquashfs squashfs-root/ livecd/casper/filesystem.squashfs + + +Recreate installation files and pack the ISO. + +.. code-block:: bash + + printf $(sudo du -sx --block-size=1 squashfs-root | cut -f1) > livecd/casper/filesystem.size + sudo systemd-nspawn --directory squashfs-root/ dpkg-query -W --showformat='${Package} ${Version}\n' > livecd/casper/filesystem.manifest + sudo cp livecd/casper/filesystem.manifest{,-desktop} + sudo rm livecd/md5sum.txt && sudo find livecd/ -type f -print0 | sudo xargs -0 md5sum | grep -v isolinux/boot.cat | sudo tee livecd/md5sum.txt + + mkisofs -r \ + -V "AutomaticCRM Ubuntu Linux" \ + -cache-inodes \ + -J -l -b isolinux/isolinux.bin \ + -c isolinux/boot.cat -no-emul-boot \ + -boot-load-size 4 \ + -boot-info-table \ + -o automaticcrm-ubuntu-18.04.2.iso livecd/ + +Test the installation in a vm +============================= + +.. code-block:: bash + + rm -f ubuntu.qcow2 + qemu-img create -f qcow2 ubuntu.qcow2 40G + virsh define ./autocrm.xml && virsh start ubuntu18.04 diff --git a/source/conf.py b/source/conf.py index 91db434..fa28ec0 100644 --- a/source/conf.py +++ b/source/conf.py @@ -16,9 +16,8 @@ # -- Project information ----------------------------------------------------- - project = 'dev notes' -copyright = '2019, Vladan Popovic' +copyright = 'No Rights Reserved' author = 'Vladan Popovic' @@ -28,25 +27,51 @@ author = 'Vladan Popovic' # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ + 'ablog', ] +import ablog # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] +templates_path.append(ablog.get_html_templates_path()) # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This pattern also affects html_static_path and html_extra_path. -exclude_patterns = [] - +exclude_patterns = ['cv.rst'] # -- Options for HTML output ------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # -html_theme = 'alabaster' +#html_theme = 'alabaster' +html_theme = 'sphinx_typlog_theme' +import sphinx_typlog_theme +html_theme_path = [sphinx_typlog_theme.get_path()] +pygments_style = 'default' # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] +html_css_files = [ + 'custom.css', +] +html_sidebars = { + '**': [ + 'localtoc.html', + 'relations.html', + 'searchbox.html', + 'atom.html', + ] +} + +# Blog (ablog) config +blog_authors = { + 'vladan': ('Vladan Popovic', 'https://dev.vp.mk'), +} +blog_languages = { + 'en': ('English', None), +} +blog_baseurl = 'localhost' diff --git a/source/copyright.rst b/source/copyright.rst new file mode 100644 index 0000000..1579b0a --- /dev/null +++ b/source/copyright.rst @@ -0,0 +1,12 @@ +No Copyright +============ + +The person who associated a work with this deed has dedicated the work to the +public domain by waiving all of his or her rights to the work worldwide under +copyright law, including all related and neighboring rights, to the extent +allowed by law. + +You can copy, modify, distribute and perform the work, even for commercial +purposes, all without asking permission. See Other Information below. + + diff --git a/source/index.rst b/source/index.rst index a83748b..e399a2b 100644 --- a/source/index.rst +++ b/source/index.rst @@ -1,20 +1,19 @@ -.. dev notes documentation master file, created by - sphinx-quickstart on Thu Aug 1 23:13:11 2019. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. +================ +Random dev notes +================ -Welcome to dev notes's documentation! -===================================== - -.. toctree:: - :maxdepth: 2 - :caption: Contents: +A pile of random notes while I was debugging, writing things on GNU/Linux, +programming in Python, Rust, Emacs, VIM, deploying and experimenting with +containers, virual machines and other randomness on various subjects. +Recent posts +============ -Indices and tables -================== - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` +.. postlist:: 5 + :author: vladan + :date: %A, %B %d, %Y + :format: {title} by {author} on {date} + :list-style: circle + :excerpts: + :sort: diff --git a/tox.ini b/tox.ini index a201ead..c336556 100644 --- a/tox.ini +++ b/tox.ini @@ -1,11 +1,16 @@ [tox] -envlist=py3 +envlist = py3 skipsdist = True [testenv:blog] -deps=sphinx -commands = sphinx-build source/ build/ +deps = + sphinx + sphinx-autobuild + sphinx-typlog-theme + ablog +commands = + sphinx-autobuild -b html source/ build/html/ [testenv:cv] -whitelist_externals=/usr/bin/pandoc +whitelist_externals = /usr/bin/pandoc commands = pandoc --from=rst -o build/cv.pdf source/cv.rst