From 9ad7f44dc8be11f8665d7d79e267e9e9b0ddc827 Mon Sep 17 00:00:00 2001 From: xf0r3m Date: Sat, 25 Apr 2026 08:55:24 +0200 Subject: [PATCH] Dostosowanie do wersji 3.0, cz. 2 --- files/config | 322 ++++++++++++++++++ files/default.theme | 295 ++++++++++++++++ files/whiskermenu-1.rc | 81 ----- immudex-build | 2 +- launchers/16844254192.desktop | 19 -- launchers/firefox-esr-immudex.desktop | 104 ------ .../org.keepassxc.KeePassXC-immudex.desktop | 51 --- tools/bin/immudex-branch | 47 +++ tools/bin/immudex-cdrip | 148 ++++++++ tools/bin/immudex-import-gpgkeys | 46 +++ tools/bin/immudex-import-sshkeys | 63 ++++ tools/bin/immudex-meteo | 47 +++ tools/bin/immudex-motd | 107 ++++++ tools/bin/immudex-padlock | 120 +++++++ tools/bin/immudex-pl | 140 ++++++++ tools/bin/immudex-run | 51 +++ tools/bin/immudex-secured-firefox | 43 +++ tools/bin/immudex-secured-librewolf | 44 +++ tools/bin/immudex-shoutcasts | 162 +++++++++ tools/bin/immudex-version | 39 +++ tools/bin/immudex-ytplay | 131 +++++++ tools/bin/library.sh | 100 ++++++ tools/man/immudex-branch.1.gz | Bin 0 -> 785 bytes tools/man/immudex-cdrip.1.gz | Bin 0 -> 1008 bytes tools/man/immudex-create-media.1.gz | Bin 0 -> 1053 bytes tools/man/immudex-crypt.1.gz | Bin 0 -> 1051 bytes tools/man/immudex-hostname.1.gz | Bin 0 -> 831 bytes tools/man/immudex-import-gpgkeys.1.gz | Bin 0 -> 843 bytes tools/man/immudex-import-sshkeys.1.gz | Bin 0 -> 901 bytes tools/man/immudex-install.1.gz | Bin 0 -> 992 bytes tools/man/immudex-meteo.1.gz | Bin 0 -> 957 bytes tools/man/immudex-motd.1.gz | Bin 0 -> 789 bytes tools/man/immudex-padlock.1.gz | Bin 0 -> 1208 bytes tools/man/immudex-pl.1.gz | Bin 0 -> 1086 bytes tools/man/immudex-run.1.gz | Bin 0 -> 909 bytes tools/man/immudex-secured-firefox.1.gz | Bin 0 -> 748 bytes tools/man/immudex-secured-librewolf.1.gz | Bin 0 -> 739 bytes tools/man/immudex-shoutcasts.1.gz | Bin 0 -> 1070 bytes tools/man/immudex-upgrade.1.gz | Bin 0 -> 888 bytes tools/man/immudex-version.1.gz | Bin 0 -> 705 bytes tools/man/immudex-ytplay.1.gz | Bin 0 -> 1158 bytes tools/man/library.sh.1.gz | Bin 0 -> 930 bytes tools/misc/immudex-hostname.service | 9 + tools/misc/motd.conf | 18 + tools/sbin/immudex-create-media | 137 ++++++++ tools/sbin/immudex-crypt | 202 +++++++++++ tools/sbin/immudex-hostname | 58 ++++ tools/sbin/immudex-install | 196 +++++++++++ tools/sbin/immudex-upgrade | 146 ++++++++ versions/base.sh | 40 ++- versions/template.sh | 4 +- 51 files changed, 2692 insertions(+), 280 deletions(-) create mode 100644 files/config create mode 100644 files/default.theme delete mode 100644 files/whiskermenu-1.rc delete mode 100644 launchers/16844254192.desktop delete mode 100644 launchers/firefox-esr-immudex.desktop delete mode 100644 launchers/org.keepassxc.KeePassXC-immudex.desktop create mode 100755 tools/bin/immudex-branch create mode 100755 tools/bin/immudex-cdrip create mode 100755 tools/bin/immudex-import-gpgkeys create mode 100755 tools/bin/immudex-import-sshkeys create mode 100755 tools/bin/immudex-meteo create mode 100755 tools/bin/immudex-motd create mode 100755 tools/bin/immudex-padlock create mode 100755 tools/bin/immudex-pl create mode 100755 tools/bin/immudex-run create mode 100755 tools/bin/immudex-secured-firefox create mode 100755 tools/bin/immudex-secured-librewolf create mode 100755 tools/bin/immudex-shoutcasts create mode 100755 tools/bin/immudex-version create mode 100755 tools/bin/immudex-ytplay create mode 100755 tools/bin/library.sh create mode 100644 tools/man/immudex-branch.1.gz create mode 100644 tools/man/immudex-cdrip.1.gz create mode 100644 tools/man/immudex-create-media.1.gz create mode 100644 tools/man/immudex-crypt.1.gz create mode 100644 tools/man/immudex-hostname.1.gz create mode 100644 tools/man/immudex-import-gpgkeys.1.gz create mode 100644 tools/man/immudex-import-sshkeys.1.gz create mode 100644 tools/man/immudex-install.1.gz create mode 100644 tools/man/immudex-meteo.1.gz create mode 100644 tools/man/immudex-motd.1.gz create mode 100644 tools/man/immudex-padlock.1.gz create mode 100644 tools/man/immudex-pl.1.gz create mode 100644 tools/man/immudex-run.1.gz create mode 100644 tools/man/immudex-secured-firefox.1.gz create mode 100644 tools/man/immudex-secured-librewolf.1.gz create mode 100644 tools/man/immudex-shoutcasts.1.gz create mode 100644 tools/man/immudex-upgrade.1.gz create mode 100644 tools/man/immudex-version.1.gz create mode 100644 tools/man/immudex-ytplay.1.gz create mode 100644 tools/man/library.sh.1.gz create mode 100644 tools/misc/immudex-hostname.service create mode 100644 tools/misc/motd.conf create mode 100755 tools/sbin/immudex-create-media create mode 100755 tools/sbin/immudex-crypt create mode 100755 tools/sbin/immudex-hostname create mode 100755 tools/sbin/immudex-install create mode 100755 tools/sbin/immudex-upgrade diff --git a/files/config b/files/config new file mode 100644 index 0000000..a6a5b59 --- /dev/null +++ b/files/config @@ -0,0 +1,322 @@ +servers = ( + { address = "irc.dal.net"; chatnet = "DALnet"; port = "6667"; }, + { + address = "ssl.efnet.org"; + chatnet = "EFNet"; + port = "9999"; + use_tls = "yes"; + }, + { + address = "irc.esper.net"; + chatnet = "EsperNet"; + port = "6697"; + use_tls = "yes"; + tls_verify = "yes"; + }, + { + address = "chat.freenode.net"; + chatnet = "Freenode"; + port = "6697"; + use_tls = "yes"; + tls_verify = "yes"; + }, + { + address = "irc.gamesurge.net"; + chatnet = "GameSurge"; + port = "6667"; + }, + { + address = "eu.irc6.net"; + chatnet = "IRCnet"; + port = "6667"; + use_tls = "yes"; + }, + { address = "open.ircnet.net"; chatnet = "IRCnet"; port = "6667"; }, + { + address = "irc.ircsource.net"; + chatnet = "IRCSource"; + port = "6667"; + }, + { address = "irc.netfuze.net"; chatnet = "NetFuze"; port = "6667"; }, + { + address = "irc.oftc.net"; + chatnet = "OFTC"; + port = "6697"; + use_tls = "yes"; + tls_verify = "yes"; + }, + { + address = "irc.quakenet.org"; + chatnet = "QuakeNet"; + port = "6667"; + }, + { + address = "irc.rizon.net"; + chatnet = "Rizon"; + port = "6697"; + use_tls = "yes"; + tls_verify = "yes"; + }, + { address = "silc.silcnet.org"; chatnet = "SILC"; port = "706"; }, + { + address = "irc.undernet.org"; + chatnet = "Undernet"; + port = "6667"; + }, + { + address = "irc.morketsmerke.org"; + chatnet = "morketsmerke.org"; + port = "6697"; + use_tls = "yes"; + tls_verify = "yes"; + tls_capath = "/etc/ssl/certs"; + autoconnect = "yes"; + } +); + +chatnets = { + DALnet = { + type = "IRC"; + max_kicks = "4"; + max_msgs = "20"; + max_whois = "30"; + }; + EFNet = { + type = "IRC"; + max_kicks = "1"; + max_msgs = "4"; + max_whois = "1"; + }; + EsperNet = { + type = "IRC"; + max_kicks = "1"; + max_msgs = "4"; + max_whois = "1"; + }; + Freenode = { + type = "IRC"; + max_kicks = "1"; + max_msgs = "4"; + max_whois = "1"; + }; + GameSurge = { + type = "IRC"; + max_kicks = "1"; + max_msgs = "1"; + max_whois = "1"; + }; + IRCnet = { + type = "IRC"; + max_kicks = "1"; + max_msgs = "1"; + max_whois = "1"; + }; + IRCSource = { + type = "IRC"; + max_kicks = "1"; + max_msgs = "4"; + max_whois = "1"; + }; + NetFuze = { + type = "IRC"; + max_kicks = "1"; + max_msgs = "1"; + max_whois = "1"; + }; + OFTC = { type = "IRC"; max_kicks = "1"; max_msgs = "1"; max_whois = "1"; }; + QuakeNet = { + type = "IRC"; + max_kicks = "1"; + max_msgs = "1"; + max_whois = "1"; + }; + Rizon = { + type = "IRC"; + max_kicks = "1"; + max_msgs = "1"; + max_whois = "1"; + }; + SILC = { type = "SILC"; }; + Undernet = { + type = "IRC"; + max_kicks = "1"; + max_msgs = "1"; + max_whois = "1"; + }; + "morketsmerke.net" = { type = "IRC"; }; + "morketsmerke.org" = { type = "IRC"; }; +}; + +channels = ( + { name = "#lobby"; chatnet = "EsperNet"; autojoin = "No"; }, + { name = "#freenode"; chatnet = "Freenode"; autojoin = "No"; }, + { name = "#irssi"; chatnet = "Freenode"; autojoin = "No"; }, + { name = "#gamesurge"; chatnet = "GameSurge"; autojoin = "No"; }, + { name = "#irssi"; chatnet = "IRCNet"; autojoin = "No"; }, + { name = "#ircsource"; chatnet = "IRCSource"; autojoin = "No"; }, + { name = "#netfuze"; chatnet = "NetFuze"; autojoin = "No"; }, + { name = "#oftc"; chatnet = "OFTC"; autojoin = "No"; }, + { name = "silc"; chatnet = "SILC"; autojoin = "No"; }, + { + name = "#general"; + chatnet = "morketsmerke.net"; + autojoin = "yes"; + } +); + +aliases = { + ATAG = "WINDOW SERVER"; + ADDALLCHANS = "SCRIPT EXEC foreach my \\$channel (Irssi::channels()) { Irssi::command(\"CHANNEL ADD -auto \\$channel->{visible_name} \\$channel->{server}->{tag} \\$channel->{key}\")\\;}"; + B = "BAN"; + BACK = "AWAY"; + BANS = "BAN"; + BYE = "QUIT"; + C = "CLEAR"; + CALC = "EXEC - if command -v bc >/dev/null 2>&1\\; then printf '%s=' '$*'\\; echo '$*' | bc -l\\; else echo bc was not found\\; fi"; + CHAT = "DCC CHAT"; + DATE = "TIME"; + DEHIGHLIGHT = "DEHILIGHT"; + DESCRIBE = "ACTION"; + DHL = "DEHILIGHT"; + EXEMPTLIST = "MODE $C +e"; + EXIT = "QUIT"; + GOTO = "SCROLLBACK GOTO"; + HIGHLIGHT = "HILIGHT"; + HL = "HILIGHT"; + HOST = "USERHOST"; + INVITELIST = "MODE $C +I"; + J = "JOIN"; + K = "KICK"; + KB = "KICKBAN"; + KN = "KNOCKOUT"; + LAST = "LASTLOG"; + LEAVE = "PART"; + M = "MSG"; + MUB = "UNBAN *"; + N = "NAMES"; + NMSG = "^MSG"; + P = "PART"; + Q = "QUERY"; + RESET = "SET -default"; + RUN = "SCRIPT LOAD"; + SAY = "MSG *"; + SB = "SCROLLBACK"; + SBAR = "STATUSBAR"; + SIGNOFF = "QUIT"; + SV = "MSG * Irssi $J ($V) - https://irssi.org"; + T = "TOPIC"; + UB = "UNBAN"; + UMODE = "MODE $N"; + UNSET = "SET -clear"; + W = "WHO"; + WC = "WINDOW CLOSE"; + WG = "WINDOW GOTO"; + WJOIN = "JOIN -window"; + WI = "WHOIS"; + WII = "WHOIS $0 $0"; + WL = "WINDOW LIST"; + WN = "WINDOW NEW HIDDEN"; + WQUERY = "QUERY -window"; + WW = "WHOWAS"; +}; + +statusbar = { + + items = { + + barstart = "{sbstart}"; + barend = "{sbend}"; + + topicbarstart = "{topicsbstart}"; + topicbarend = "{topicsbend}"; + + time = "{sb $Z}"; + user = "{sb {sbnickmode $cumode}$N{sbmode $usermode}{sbaway $A}}"; + + window = "{sb $winref:$tag/$itemname{sbmode $M}}"; + window_empty = "{sb $winref{sbservertag $tag}}"; + + prompt = "{prompt $[.15]itemname}"; + prompt_empty = "{prompt $winname}"; + + topic = " $topic"; + topic_empty = " Irssi v$J - https://irssi.org"; + + lag = "{sb Lag: $0-}"; + act = "{sb Act: $0-}"; + more = "-- more --"; + }; + + default = { + + window = { + + disabled = "no"; + type = "window"; + placement = "bottom"; + position = "1"; + visible = "active"; + + items = { + barstart = { priority = "100"; }; + time = { }; + user = { }; + window = { }; + window_empty = { }; + lag = { priority = "-1"; }; + act = { priority = "10"; }; + more = { priority = "-1"; alignment = "right"; }; + barend = { priority = "100"; alignment = "right"; }; + }; + }; + + window_inact = { + + type = "window"; + placement = "bottom"; + position = "1"; + visible = "inactive"; + + items = { + barstart = { priority = "100"; }; + window = { }; + window_empty = { }; + more = { priority = "-1"; alignment = "right"; }; + barend = { priority = "100"; alignment = "right"; }; + }; + }; + + prompt = { + + type = "root"; + placement = "bottom"; + position = "100"; + visible = "always"; + + items = { + prompt = { priority = "-1"; }; + prompt_empty = { priority = "-1"; }; + input = { priority = "10"; }; + }; + }; + + topic = { + + type = "root"; + placement = "top"; + position = "1"; + visible = "always"; + + items = { + topicbarstart = { priority = "100"; }; + topic = { }; + topic_empty = { }; + topicbarend = { priority = "100"; alignment = "right"; }; + }; + }; + }; +}; +settings = { + core = { real_name = "Unknown"; user_name = "xf0r3m"; nick = "xf0r3m"; }; + "fe-text" = { actlist_sort = "refnum"; }; +}; diff --git a/files/default.theme b/files/default.theme new file mode 100644 index 0000000..79b1af5 --- /dev/null +++ b/files/default.theme @@ -0,0 +1,295 @@ +# When testing changes, the easiest way to reload the theme is with /RELOAD. +# This reloads the configuration file too, so if you did any changes remember +# to /SAVE it first. Remember also that /SAVE overwrites the theme file with +# old data so keep backups :) + +# TEMPLATES: + +# The real text formats that irssi uses are the ones you can find with +# /FORMAT command. Back in the old days all the colors and texts were mixed +# up in those formats, and it was really hard to change the colors since you +# might have had to change them in tens of different places. So, then came +# this templating system. + +# Now the /FORMATs don't have any colors in them, and they also have very +# little other styling. Most of the stuff you need to change is in this +# theme file. If you can't change something here, you can always go back +# to change the /FORMATs directly, they're also saved in these .theme files. + +# So .. the templates. They're those {blahblah} parts you see all over the +# /FORMATs and here. Their usage is simply {name parameter1 parameter2}. +# When irssi sees this kind of text, it goes to find "name" from abstracts +# block below and sets "parameter1" into $0 and "parameter2" into $1 (you +# can have more parameters of course). Templates can have subtemplates. +# Here's a small example: +# /FORMAT format hello {colorify {underline world}} +# abstracts = { colorify = "%G$0-%n"; underline = "%U$0-%U"; } +# When irssi expands the templates in "format", the final string would be: +# hello %G%Uworld%U%n +# ie. underlined bright green "world" text. +# and why "$0-", why not "$0"? $0 would only mean the first parameter, +# $0- means all the parameters. With {underline hello world} you'd really +# want to underline both of the words, not just the hello (and world would +# actually be removed entirely). + +# COLORS: + +# You can find definitions for the color format codes in docs/formats.txt. + +# There's one difference here though. %n format. Normally it means the +# default color of the terminal (white mostly), but here it means the +# "reset color back to the one it was in higher template". For example +# if there was /FORMAT test %g{foo}bar, and foo = "%Y$0%n", irssi would +# print yellow "foo" (as set with %Y) but "bar" would be green, which was +# set at the beginning before the {foo} template. If there wasn't the %g +# at start, the normal behaviour of %n would occur. If you _really_ want +# to use the terminal's default color, use %N. + +############################################################################# + +# default foreground color (%N) - -1 is the "default terminal color" +default_color = "-1"; + +# print timestamp/servertag at the end of line, not at beginning +info_eol = "false"; + +# these characters are automatically replaced with specified color +# (dark grey by default) +replaces = { "[]=" = "%K$*%n"; }; + +abstracts = { + ## + ## generic + ## + + # text to insert at the beginning of each non-message line + line_start = "%B-%n!%B-%n "; + + # timestamp styling, nothing by default + timestamp = "$*"; + + # any kind of text that needs hilighting, default is to bold + hilight = "%_$*%_"; + + # any kind of error message, default is bright red + error = "%R$*%n"; + + # channel name is printed + channel = "%_$*%_"; + + # nick is printed + nick = "%_$*%_"; + + # nick host is printed + nickhost = "[$*]"; + + # server name is printed + server = "%_$*%_"; + + # some kind of comment is printed + comment = "[$*]"; + + # reason for something is printed (part, quit, kick, ..) + reason = "{comment $*}"; + + # mode change is printed ([+o nick]) + mode = "{comment $*}"; + + ## + ## channel specific messages + ## + + # highlighted nick/host is printed (joins) + channick_hilight = "%C$*%n"; + chanhost_hilight = "{nickhost %c$*%n}"; + + # nick/host is printed (parts, quits, etc.) + channick = "%c$*%n"; + chanhost = "{nickhost $*}"; + + # highlighted channel name is printed + channelhilight = "%c$*%n"; + + # ban/ban exception/invite list mask is printed + ban = "%c$*%n"; + + ## + ## messages + ## + + # the basic styling of how to print message, $0 = nick mode, $1 = nick + msgnick = "%K<%n$0$1-%K>%n %|"; + + # message from you is printed. "ownnick" specifies the styling of the + # nick ($0 part in msgnick) and "ownmsgnick" specifies the styling of the + # whole line. + + # Example1: You want the message text to be green: + # ownmsgnick = "{msgnick $0 $1-}%g"; + # Example2.1: You want < and > chars to be yellow: + # ownmsgnick = "%Y{msgnick $0 $1-%Y}%n"; + # (you'll also have to remove <> from replaces list above) + # Example2.2: But you still want to keep <> grey for other messages: + # pubmsgnick = "%K{msgnick $0 $1-%K}%n"; + # pubmsgmenick = "%K{msgnick $0 $1-%K}%n"; + # pubmsghinick = "%K{msgnick $1 $0$2-%n%K}%n"; + # ownprivmsgnick = "%K{msgnick $*%K}%n"; + # privmsgnick = "%K{msgnick %R$*%K}%n"; + + # $0 = nick mode, $1 = nick + ownmsgnick = "{msgnick $0 $1-}"; + ownnick = "%_$*%n"; + + # public message in channel, $0 = nick mode, $1 = nick + pubmsgnick = "{msgnick $0 $1-}"; + pubnick = "%N$*%n"; + + # public message in channel meant for me, $0 = nick mode, $1 = nick + pubmsgmenick = "{msgnick $0 $1-}"; + menick = "%Y$*%n"; + + # public highlighted message in channel + # $0 = highlight color, $1 = nick mode, $2 = nick + pubmsghinick = "{msgnick $1 $0$2-%n}"; + + # channel name is printed with message + msgchannel = "%K:%c$*%n"; + + # private message, $0 = nick, $1 = host + privmsg = "[%R$0%K(%r$1-%K)%n] "; + + # private message from you, $0 = "msg", $1 = target nick + ownprivmsg = "[%r$0%K(%R$1-%K)%n] "; + + # own private message in query + ownprivmsgnick = "{msgnick $*}"; + ownprivnick = "%_$*%n"; + + # private message in query + privmsgnick = "{msgnick %R$*%n}"; + + ## + ## Actions (/ME stuff) + ## + + # used internally by this theme + action_core = "%_ * $*%n"; + + # generic one that's used by most actions + action = "{action_core $*} "; + + # own action, both private/public + ownaction = "{action $*}"; + + # own action with target, both private/public + ownaction_target = "{action_core $0}%K:%c$1%n "; + + # private action sent by others + pvtaction = "%_ (*) $*%n "; + pvtaction_query = "{action $*}"; + + # public action sent by others + pubaction = "{action $*}"; + + + ## + ## other IRC events + ## + + # whois + whois = "%# $[8]0 : $1-"; + + # notices + ownnotice = "[%r$0%K(%R$1-%K)]%n "; + notice = "%K-%M$*%K-%n "; + pubnotice_channel = "%K:%m$*"; + pvtnotice_host = "%K(%m$*%K)"; + servernotice = "%g!$*%n "; + + # CTCPs + ownctcp = "[%r$0%K(%R$1-%K)] "; + ctcp = "%g$*%n"; + + # wallops + wallop = "%_$*%n: "; + wallop_nick = "%n$*"; + wallop_action = "%_ * $*%n "; + + # netsplits + netsplit = "%R$*%n"; + netjoin = "%C$*%n"; + + # /names list + names_prefix = ""; + names_nick = "[%_$0%_$1-] "; + names_nick_op = "{names_nick $*}"; + names_nick_halfop = "{names_nick $*}"; + names_nick_voice = "{names_nick $*}"; + names_users = "[%g$*%n]"; + names_channel = "%G$*%n"; + + # DCC + dcc = "%g$*%n"; + dccfile = "%_$*%_"; + + # DCC chat, own msg/action + dccownmsg = "[%r$0%K($1-%K)%n] "; + dccownnick = "%R$*%n"; + dccownquerynick = "%_$*%n"; + dccownaction = "{action $*}"; + dccownaction_target = "{action_core $0}%K:%c$1%n "; + + # DCC chat, others + dccmsg = "[%G$1-%K(%g$0%K)%n] "; + dccquerynick = "%G$*%n"; + dccaction = "%_ (*dcc*) $*%n %|"; + + ## + ## statusbar + ## + + # default background for all statusbars. You can also give + # the default foreground color for statusbar items. + sb_background = "%4%w"; + window_border = "%4%w"; + + # default backround for "default" statusbar group + #sb_default_bg = "%4"; + # background for prompt / input line + sb_prompt_bg = "%n"; + # background for info statusbar + sb_info_bg = "%8"; + # background for topicbar (same default) + #sb_topic_bg = "%4"; + + # text at the beginning of statusbars. "sb" already puts a space there, + # so we don't use anything by default. + sbstart = ""; + # text at the end of statusbars. Use space so that it's never + # used for anything. + sbend = " "; + + topicsbstart = "{sbstart $*}"; + topicsbend = "{sbend $*}"; + + prompt = "[$*] "; + + sb = " %c[%n$*%c]%n"; + sbmode = "(%c+%n$*)"; + sbaway = " (%GzZzZ%n)"; + sbservertag = ":$0 (change with ^X)"; + sbnickmode = "$0"; + + # activity in statusbar + + # ',' separator + sb_act_sep = "%c$*"; + # normal text + sb_act_text = "%c$*"; + # public message + sb_act_msg = "%W$*"; + # hilight + sb_act_hilight = "%M$*"; + # hilight with specified color, $0 = color, $1 = text + sb_act_hilight_color = "$0$1-%n"; +}; diff --git a/files/whiskermenu-1.rc b/files/whiskermenu-1.rc deleted file mode 100644 index 8d7be11..0000000 --- a/files/whiskermenu-1.rc +++ /dev/null @@ -1,81 +0,0 @@ -favorites=gvim.desktop,firefox-esr-immudex.desktop,thunderbird-immudex.desktop,org.keepassxc.KeePassXC-immudex.desktop,com.nextcloud.desktopclient.nextcloud-immudex.desktop -recent= -button-title=Start -button-icon=debian-logo -button-single-row=false -show-button-title=true -show-button-icon=true -launcher-show-name=true -launcher-show-description=true -launcher-show-tooltip=true -item-icon-size=3 -hover-switch-category=false -category-show-name=true -category-icon-size=1 -load-hierarchy=false -view-as-icons=false -default-category=0 -recent-items-max=10 -favorites-in-recent=true -position-search-alternate=true -position-commands-alternate=false -position-categories-alternate=true -stay-on-focus-out=false -confirm-session-command=true -menu-width=450 -menu-height=500 -menu-opacity=100 -command-settings=xfce4-settings-manager -show-command-settings=true -command-lockscreen=xflock4 -show-command-lockscreen=true -command-switchuser=dm-tool switch-to-greeter -show-command-switchuser=false -command-logoutuser=xfce4-session-logout --logout --fast -show-command-logoutuser=true -command-restart=xfce4-session-logout --reboot --fast -show-command-restart=true -command-shutdown=xfce4-session-logout --halt --fast -show-command-shutdown=true -command-suspend=xfce4-session-logout --suspend -show-command-suspend=true -command-hibernate=xfce4-session-logout --hibernate -show-command-hibernate=false -command-logout=xfce4-session-logout -show-command-logout=false -command-menueditor=menulibre -show-command-menueditor=true -command-profile=mugshot -show-command-profile=true -search-actions=5 - -[action0] -name=Strony podręcznika -pattern=# -command=exo-open --launch TerminalEmulator man %s -regex=false - -[action1] -name=Wyszukiwarka internetowa -pattern=? -command=exo-open --launch WebBrowser https://duckduckgo.com/?q=%u -regex=false - -[action2] -name=Wikipedia -pattern=!w -command=exo-open --launch WebBrowser https://en.wikipedia.org/wiki/%u -regex=false - -[action3] -name=Uruchom w terminalu -pattern=! -command=exo-open --launch TerminalEmulator %s -regex=false - -[action4] -name=Otwórz adres URI -pattern=^(file|http|https):\\/\\/(.*)$ -command=exo-open \\0 -regex=true - diff --git a/immudex-build b/immudex-build index fa08174..f109e0c 100755 --- a/immudex-build +++ b/immudex-build @@ -107,7 +107,7 @@ sudo chroot ${HOME}/build/immudex-${debver}/${arch}/chroot /bin/bash /base.sh $d #Try to umount system interfaces it may fail. for i in /dev/pts /proc /run /sys /dev; do - sudo umount ${HOME}/build/immudex-${debver}/${arch}/chroot$i; + sudo umount -f ${HOME}/build/immudex-${debver}/${arch}/chroot$i; done #Removing chroot script. diff --git a/launchers/16844254192.desktop b/launchers/16844254192.desktop deleted file mode 100644 index 98982cf..0000000 --- a/launchers/16844254192.desktop +++ /dev/null @@ -1,19 +0,0 @@ -[Desktop Entry] -Name=Librewolf (Firejailed) -Name[pl]=Librewolf (Firejailed) -Comment=Browse the World Wide Web -Comment[pl]=Bezpieczne przeglądanie stron WWW -GenericName=Web Browser -GenericName[pl]=Przeglądarka WWW -X-GNOME-FullName=Firefox ESR Web Browser -X-GNOME-FullName[pl]=Przeglądarka WWW Firefox ESR -Exec=/usr/local/bin/immudex-secured-librewolf -Terminal=false -X-MultipleArgs=false -Type=Application -Icon=librewolf -Categories=Network;WebBrowser; -MimeType=text/html;text/xml;application/xhtml+xml;application/xml;application/vnd.mozilla.xul+xml;application/rss+xml;application/rdf+xml;x-scheme-handler/http;x-scheme-handler/https; -StartupWMClass=Firefox-esr -StartupNotify=true -X-XFCE-Source=file:///usr/share/applications/firefox-esr.desktop diff --git a/launchers/firefox-esr-immudex.desktop b/launchers/firefox-esr-immudex.desktop deleted file mode 100644 index 0bd1442..0000000 --- a/launchers/firefox-esr-immudex.desktop +++ /dev/null @@ -1,104 +0,0 @@ -[Desktop Entry] -Name=Firefox ESR (immudex) -Name[bg]=Firefox ESR -Name[ca]=Firefox ESR -Name[cs]=Firefox ESR -Name[el]=Firefox ESR -Name[es]=Firefox ESR -Name[fa]=Firefox ESR -Name[fi]=Firefox ESR -Name[fr]=Firefox ESR -Name[hu]=Firefox ESR -Name[it]=Firefox ESR -Name[ja]=Firefox ESR -Name[ko]=Firefox ESR -Name[nb]=Firefox ESR -Name[nl]=Firefox ESR -Name[nn]=Firefox ESR -Name[no]=Firefox ESR -Name[pl]=Firefox ESR (immudex) -Name[pt]=Firefox ESR -Name[pt_BR]=Firefox ESR -Name[ru]=Firefox ESR -Name[sk]=Firefox ESR -Name[sv]=Firefox ESR -Comment=Browse the World Wide Web -Comment[bg]=Сърфиране в Мрежата -Comment[ca]=Navegueu per el web -Comment[cs]=Prohlížení stránek World Wide Webu -Comment[de]=Im Internet surfen -Comment[el]=Περιηγηθείτε στον παγκόσμιο ιστό -Comment[es]=Navegue por la web -Comment[fa]=صفحات شبکه جهانی اینترنت را مرور نمایید -Comment[fi]=Selaa Internetin WWW-sivuja -Comment[fr]=Navigue sur Internet -Comment[hu]=A világháló böngészése -Comment[it]=Esplora il web -Comment[ja]=ウェブを閲覧します -Comment[ko]=웹을 돌아 다닙니다 -Comment[nb]=Surf på nettet -Comment[nl]=Verken het internet -Comment[nn]=Surf på nettet -Comment[no]=Surf på nettet -Comment[pl]=Przeglądanie stron WWW -Comment[pt]=Navegue na Internet -Comment[pt_BR]=Navegue na Internet -Comment[ru]=Обозреватель Всемирной Паутины -Comment[sk]=Prehliadanie internetu -Comment[sv]=Surfa på webben -GenericName=Web Browser -GenericName[bg]=Интернет браузър -GenericName[ca]=Navegador web -GenericName[cs]=Webový prohlížeč -GenericName[de]=Webbrowser -GenericName[el]=Περιηγητής ιστού -GenericName[es]=Navegador web -GenericName[fa]=مرورگر اینترنتی -GenericName[fi]=WWW-selain -GenericName[fr]=Navigateur Web -GenericName[hu]=Webböngésző -GenericName[it]=Browser Web -GenericName[ja]=ウェブ・ブラウザ -GenericName[ko]=웹 브라우저 -GenericName[nb]=Nettleser -GenericName[nl]=Webbrowser -GenericName[nn]=Nettlesar -GenericName[no]=Nettleser -GenericName[pl]=Przeglądarka WWW -GenericName[pt]=Navegador Web -GenericName[pt_BR]=Navegador Web -GenericName[ru]=Интернет-браузер -GenericName[sk]=Internetový prehliadač -GenericName[sv]=Webbläsare -X-GNOME-FullName=Firefox ESR Web Browser -X-GNOME-FullName[bg]=Интернет браузър (Firefox ESR) -X-GNOME-FullName[ca]=Navegador web Firefox ESR -X-GNOME-FullName[cs]=Firefox ESR Webový prohlížeč -X-GNOME-FullName[el]=Περιηγήτης Ιστού Firefox ESR -X-GNOME-FullName[es]=Navegador web Firefox ESR -X-GNOME-FullName[fa]=مرورگر اینترنتی Firefox ESR -X-GNOME-FullName[fi]=Firefox ESR-selain -X-GNOME-FullName[fr]=Navigateur Web Firefox ESR -X-GNOME-FullName[hu]=Firefox ESR webböngésző -X-GNOME-FullName[it]=Firefox ESR Browser Web -X-GNOME-FullName[ja]=Firefox ESR ウェブ・ブラウザ -X-GNOME-FullName[ko]=Firefox ESR 웹 브라우저 -X-GNOME-FullName[nb]=Firefox ESR Nettleser -X-GNOME-FullName[nl]=Firefox ESR webbrowser -X-GNOME-FullName[nn]=Firefox ESR Nettlesar -X-GNOME-FullName[no]=Firefox ESR Nettleser -X-GNOME-FullName[pl]=Przeglądarka WWW Firefox ESR -X-GNOME-FullName[pt]=Firefox ESR Navegador Web -X-GNOME-FullName[pt_BR]=Navegador Web Firefox ESR -X-GNOME-FullName[ru]=Интернет-браузер Firefox ESR -X-GNOME-FullName[sk]=Internetový prehliadač Firefox ESR -X-GNOME-FullName[sv]=Webbläsaren Firefox ESR -Exec=/usr/local/bin/immudex-run firefox-esr -Terminal=false -X-MultipleArgs=false -Type=Application -Icon=firefox-esr -Categories=Network;WebBrowser; -MimeType=text/html;text/xml;application/xhtml+xml;application/xml;application/vnd.mozilla.xul+xml;application/rss+xml;application/rdf+xml;image/gif;image/jpeg;image/png;x-scheme-handler/http;x-scheme-handler/https; -StartupWMClass=firefox-esr -StartupNotify=true diff --git a/launchers/org.keepassxc.KeePassXC-immudex.desktop b/launchers/org.keepassxc.KeePassXC-immudex.desktop deleted file mode 100644 index b5e9887..0000000 --- a/launchers/org.keepassxc.KeePassXC-immudex.desktop +++ /dev/null @@ -1,51 +0,0 @@ -[Desktop Entry] -Name=KeePassXC (immudex) -GenericName=Password Manager -GenericName[ar]=مدير كلمات المرور -GenericName[bg]=Мениджър на пароли -GenericName[ca]=Gestor de contrasenyes -GenericName[cs]=Aplikace pro správu hesel -GenericName[da]=Adgangskodehåndtering -GenericName[de]=Passwortverwaltung -GenericName[es]=Gestor de contraseñas -GenericName[et]=Paroolihaldur -GenericName[fi]=Salasanamanageri -GenericName[fr]=Gestionnaire de mot de passe -GenericName[hu]=Jelszókezelő -GenericName[id]=Pengelola Sandi -GenericName[it]=Gestione password -GenericName[ja]=パスワードマネージャー -GenericName[ko]=암호 관리자 -GenericName[lt]=Slaptažodžių tvarkytuvė -GenericName[nb]=Passordhåndterer -GenericName[nl]=Wachtwoordbeheer -GenericName[pl]=Menedżer haseł -GenericName[pt_BR]=Gerenciador de Senhas -GenericName[pt]=Gestor de palavras-passe -GenericName[ro]=Manager de parole -GenericName[ru]=Менеджер паролей -GenericName[sk]=Správca hesiel -GenericName[sv]=Lösenordshanterare -GenericName[th]=แอพจัดการรหัสผ่าน -GenericName[tr]=Parola yöneticisi -GenericName[uk]=Розпорядник паролів -GenericName[zh_CN]=密码管理器 -GenericName[zh_TW]=密碼管理員 -Comment=Community-driven port of the Windows application “KeePass Password Safe” -Comment[da]=Fællesskabsdrevet port af Windows-programmet “KeePass Password Safe” -Comment[et]=Kogukonna arendatav port Windowsi programmist KeePass Password Safe -Comment[ru]=Разработанный сообществом порт Windows-приложения KeePass Password Safe -Exec=/usr/local/bin/immudex-run keepassxc -TryExec=/usr/local/bin/immudex-run keepassxc -Icon=keepassxc -StartupWMClass=keepassxc -StartupNotify=true -Terminal=false -Type=Application -Version=1.5 -Categories=Utility;Security;Qt; -MimeType=application/x-keepass2; -SingleMainWindow=true -X-GNOME-SingleWindow=true -Keywords=security;privacy;password-manager;yubikey;password;keepass; -Keywords[de]=sicherheit;privatsphäre;passwort-manager;yubikey;passwort;keepass; diff --git a/tools/bin/immudex-branch b/tools/bin/immudex-branch new file mode 100755 index 0000000..0c0c876 --- /dev/null +++ b/tools/bin/immudex-branch @@ -0,0 +1,47 @@ +#!/bin/bash + +function help() { + echo "immudex-branch it's a conky helper script, which returns Debian version"; + echo "used for build immudex. This information is used in 'Info:' section"; + echo "in conky widget as complement in name of immudex version."; + echo; + echo "Usage: immudex-branch [--help] [--version]"; + echo; + echo "Options:"; + echo " --help Print this message."; + echo " --version Print information about version, author and copyrights."; + echo; + echo "Examples:"; + echo " immudex-branch Prints version of Debian used for immudex build with hyphen on start of." + echo " immudex-branch --help Prints this message."; + echo " immudex-branch --version Print information about version, author and copyrights."; + echo; + echo "Report bugs to "; +} + +function version() { + echo "immudex-branch 1.0"; + echo; + echo "Copyright (C) 2026 morketsmerke.org"; + echo "This is free software; see the source for copying conditions. There is NO"; + echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."; + echo; + echo "Written by xf0r3m."; + +} + +if [ "$1" ]; then + if [ "$1" = "--help" ]; then + help; + elif [ "$1" = "--version" ]; then + version; + fi +else + if grep -q 'forky' /etc/os-release; then + echo -n '-testing'; + elif grep -q 'trixie' /etc/os-release; then + echo -n '-stable'; + else + echo -n '-oldstable'; + fi +fi diff --git a/tools/bin/immudex-cdrip b/tools/bin/immudex-cdrip new file mode 100755 index 0000000..8ef6186 --- /dev/null +++ b/tools/bin/immudex-cdrip @@ -0,0 +1,148 @@ +#!/bin/bash + +function XMLScrap() { + echo -n $(grep -o "<${1}>.*" $2 \ + | sed "s,<${1}>,," \ + | sed "s,,," \ + | sed 's,&,and,g'); +} + +function help() { + echo "immudex-cdrip it's a bash script for collect audio tracks from Audio CD's."; + echo "Script apart form ripping Audio CD's, reads metadata, check it on music"; + echo "databases and creates properly named directories and audio files."; + echo; + echo "Usage: immudex-cdrip [--rip-only] [--get-disc-info] [--rip-n-rename] [--help] [--version]"; + echo; + echo "Options:"; + echo " --rip-only Rips audio tracks from Audio CD, without quering CDIndex (MusicBrainz) database."; + echo " --get-disc-info Getting info from CDIndex (MusicBrainz) database about Audio CD without ripping."; + echo " --rip-n-rename Rips audio tracks from Audio CD, create Artist/Album folders and rename tracks according to data get CDIndex (MusicBrainz) database (normal usage)."; + echo " --help Print this message."; + echo " --version Print information about version, author and copyrights."; + echo; + echo "Examples:"; + echo " immudex-cdrip Print this message"; + echo " immudex-cdrip --get-disc-info Check is in MusicBrainz DB, are there any data about puted CD in drive."; + echo " Could be useful with less popular artists."; + echo " immudex-cdrip --rip-n-rename Rips Audio CD and names dirs and files with MusicBrainz data."; + echo; + echo "Report bugs to "; +} + +function version() { + echo "immudex-cdrip 1.0"; + echo; + echo "Copyright (C) 2026 morketsmerke.org"; + echo "This is free software; see the source for copying conditions. There is NO"; + echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."; + echo; + echo "Written by xf0r3m."; +} + +function multipleArtistDisc() { + + FILE="$1"; + ARTIST="VA"; + ALBUM=$(XMLScrap "Title" $FILE); + NUMTRACKS=$(XMLScrap "NumTracks" $FILE); + TRACKPATH="${ARTIST} - ${ALBUM}"; + + mkdir -vp "${TRACKPATH}"; + + i=1; + while [ $i -le $NUMTRACKS ]; do + artist=$(grep -o ".*" $FILE \ + | sed -n "${i}p" \ + | sed 's,,,' \ + | sed 's,,,'); + + trackName=$(grep -o ".*" $FILE \ + | sed -n "${i}p" \ + | sed 's,,,' \ + | sed 's,,,'); + + if [ $i -lt 10 ]; then + trackNumber="0${i}"; + else + trackNumber=${i}; + fi + + audioFilename="audio_${trackNumber}.wav"; + infFilename=$(echo $audioFilename | sed 's/wav/inf/'); + + mv -v $audioFilename "${TRACKPATH}/${trackNumber}. ${artist} - ${trackName}.wav"; + rm -v ${infFilename}; + i=$(expr $i + 1); + done + + rm -v audio.cddb; + rm -v ${FILE}; +} + +#if [ ! -x /usr/bin/cdda2wav ]; then +# exit 1; +#fi + +if [ "$1" ] && [ "$1" = "--rip-only" ]; then + cdda2wav -vall cddb=-1 speed=4 -paranoia paraopts=no-verify -B -D /dev/sr0; + exit 0; +fi + +if [ "$1" ] && [ "$1" = "--get-disc-info" ]; then + cdda2wav -J -D /dev/sr0; + exit 0; +fi + +if [ "$1" ] && [ "$1" = "--rip-n-rename" ]; then + cdda2wav -vall cddb=1 speed=4 -paranoia paraopts=no-verify -B -D /dev/sr0; + + FILE="audio.cdindex"; + + if $(grep -q '' $FILE); then + multipleArtistDisc $FILE; + else + ARTIST=$(XMLScrap "Artist" $FILE); + ALBUM=$(XMLScrap "Title" $FILE); + NUMTRACKS=$(XMLScrap "NumTracks" $FILE); + TRACKPATH="${ARTIST}/${ALBUM}"; + + mkdir -vp "${TRACKPATH}"; + + i=1; + while [ $i -le $NUMTRACKS ]; do + trackName=$(grep -o ".*" $FILE \ + | sed -n "${i}p" \ + | sed 's,,,' \ + | sed 's,,,'); + + if [ $i -lt 10 ]; then + audioFilename="audio_0${i}.wav"; + trackNumber="0${i}"; + else + audioFilename="audio_${i}.wav"; + trackNumber="${i}"; + fi + infFilename=$(echo "$audioFilename" | sed 's/wav/inf/'); + mv -v $audioFilename "${TRACKPATH}/${trackNumber}. ${ARTIST} - ${trackName}.wav"; + rm -v $infFilename; + i=$(expr $i + 1); + done + + rm -v audio.cddb; + rm -v audio.cdindex; + fi + exit 0; +fi + +if [ "$1" ] && [ "$1" = "--help" ]; then + help; + exit 0; +fi + +if [ "$1" ] && [ "$1" = "--version" ]; then + version; + exit 0; +fi + +help; diff --git a/tools/bin/immudex-import-gpgkeys b/tools/bin/immudex-import-gpgkeys new file mode 100755 index 0000000..89b6773 --- /dev/null +++ b/tools/bin/immudex-import-gpgkeys @@ -0,0 +1,46 @@ +#!/bin/bash + +function help() { + echo "it's a script for import GPG keys and owner trust. GPG keys can be used"; + echo "by 'pass' - POSIX compatibile password manager or signing. It's very"; + echo "helpful, when your keys are in files in encrypted datastore."; + echo "Script requires to store GPG keys in home dir or change home dir before"; + echo "execute a script."; + echo; + echo "Usage: immudex-import-gpgkeys [--help] [--version]"; + echo; + echo "Options:"; + echo " --help Print this message."; + echo " --version Print information about version, author and copyrights"; + echo; + echo "Examples:"; + echo " immudex-import-gpgkeys Import GPG keys and owner trust."; + echo " immudex-import-gpgkeys --help Print this message."; + echo " immudex-import-gpgkeys --version Print information about version, author and copyrights."; + echo; + echo "Report bugs to "; +} + +function version() { + echo "immudex-import-gpgkeys 1.0"; + echo; + echo "Copyright (C) 2026 morketsmerke.org"; + echo "This is free software; see the source for copying conditions. There is NO"; + echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."; + echo; + echo "Written by xf0r3m."; +} + +if [ "$1" ]; then + if [ "$1" = "--help" ]; then + help; + elif [ "$1" = "--version" ]; then + version; + fi +else + if [ -f ~/public.gpg ] && [ -f ~/private.gpg ] && [ -f ~/otrust.txt ]; then + gpg --import ~/public.gpg + gpg --import ~/private.gpg + gpg --import-ownertrust ~/otrust.txt + fi +fi diff --git a/tools/bin/immudex-import-sshkeys b/tools/bin/immudex-import-sshkeys new file mode 100755 index 0000000..91e1c2b --- /dev/null +++ b/tools/bin/immudex-import-sshkeys @@ -0,0 +1,63 @@ +#!/bin/bash + +function help() { + echo "it's a script for copying OpenSSH client files such as keys and config file into user native home directory."; + echo "This command should be run in other home directory, where ssh keys are stored."; + echo; + echo "Usage: immudex-import-sshkeys [--import-hosts] [--help] [--version]"; + echo; + echo "Options:"; + echo " --import-hosts Import hostnames and adresses to /etc/host file (sudo required) from SSH config file if exist."; + echo " --help Print this message."; + echo " --version Print information about version, author and copyrights."; + echo; + echo "Examples:"; + echo " immudex-import-sshkeys Import OpenSSH client files into user native home dir."; + echo " immudex-import-sshkeys --import-hosts Import OpenSSH client files and create DNS resolve database in /etc/hosts by taking data from OpenSSH client config file, if exist."; + echo " immudex-import-sshkeys --help Print this message."; + echo " immudex-import-sshkeys --version Print information about version, author and copyrights." + echo; + echo "Report bugs to "; +} + +function version() { + echo "immudex-import-sshkeys 1.0"; + echo; + echo "Copyright (C) 2026 morketsmerke.org"; + echo "This is free software; see the source for copying conditions. There is NO"; + echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."; + echo; + echo "Written by xf0r3m."; +} + +if [ "$1" ]; then + if [ "$1" = "--help" ]; then + help; + elif [ "$1" = "--version" ]; then + version; + fi +else +if $(ls $HOME | grep -q '.*_rsa.*'); then + if [ -d /home/$USER/.ssh ]; then + cp -v ~/*_rsa* /home/$USER/.ssh; + else + mkdir /home/$USER/.ssh; + chmod 700 /home/$USER/.ssh; + cp -v ~/*_rsa* /home/$USER/.ssh; + fi +fi +if $(ls -w1 $HOME | grep -q '^config$'); then + cp -v ~/config /home/$USER/.ssh; + if [ "$1" ] && [ "$1" = "--import-hosts" ]; then + i=1; + hostsCount=$(grep -o "Host .*" ~/config | wc -l); + while [ $i -le $hostsCount ]; do + host=$(grep -o "Host .*" ~/config | sed -n "${i}p" | awk '{printf $2}'); + hostName=$(grep -o "HostName .*" ~/config | sed -n "${i}p" | awk '{printf $2}'); + echo -e "${host}\t${hostName}" | sudo tee -a /etc/hosts; + i=$(expr $i + 1); + done + fi + chmod 600 /home/$USER/.ssh/config; +fi +fi diff --git a/tools/bin/immudex-meteo b/tools/bin/immudex-meteo new file mode 100755 index 0000000..9a0c6c0 --- /dev/null +++ b/tools/bin/immudex-meteo @@ -0,0 +1,47 @@ +#!/bin/bash + +function help() { + echo "immudex-meteo script fetching weather status from wttr.in webpage." + echo "The weather status is availabel to get in 3 formats described below"; + echo "in options."; + echo; + echo "Usage: immudex-meteo [--short | --long | --micro location] [--help] [--version]"; + echo; + echo "Options:"; + echo " --short location Short human readable format with one small ascii art."; + echo " --long location Long format, more readable, weather for every stage of the day and 2-day forecast"; + echo " --micro location Micro format, one line with details (current weather)"; + echo " --help Prints this message"; + echo " --version Prints information about version, author and copyrights"; + echo; + echo "Exmaples:"; + echo " immudex-meteo --short London Current weather in London in short format."; + echo " immudex-meteo --long Berlin Weather for whole day in Berlin and 2-day forecast."; + echo " immudex-meteo --micro Warszawa One line with weather information from Warsaw, good for motd's or resources monitors."; + echo; + echo "Report bugs to "; +} + +function version() { + echo "immudex-meteo 1.0"; + echo; + echo "Copyright (C) 2026 morketsmerke.org"; + echo "This is free software; see the source for copying conditions. There is NO"; + echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."; + echo; + echo "Written by xf0r3m."; +} + +if [ "$1" ]; then + case $1 in + "--short") curl wttr.in/${2}?format=2\&lang=pl;; + "--long") curl wttr.in/${2}?lang=pl;; + "--micro") curl wttr.in/${2}?format=4;; + "--help") help; exit 0;; + "--version") version; exit 0;; + *) help; exit 1;; + esac +else + help; + exit 1; +fi diff --git a/tools/bin/immudex-motd b/tools/bin/immudex-motd new file mode 100755 index 0000000..dcf1793 --- /dev/null +++ b/tools/bin/immudex-motd @@ -0,0 +1,107 @@ +#!/bin/bash + + +if [ "$1" ]; then + if [ "$1" = "--help" ]; then + echo "immudex-motd prints configurable message of the day."; + echo "Information and its quantity can be changed via the configuration file."; + echo "Script using figlet basic font and lolcat for print header of message."; + echo; + echo "Usage: immudex-motd [--help] [--version]"; + echo; + echo "Options:"; + echo " --help Print this message."; + echo " --version Print information about version, author and copyright"; + echo; + echo "Files:"; + echo " /etc/motd.conf Script configuration file."; + echo " /usr/share/doc/immudex-motd/motd.conf.sample Example configuration file."; + echo; + echo "Examples:"; + echo " immudex-motd Run a script."; + echo; + echo "Report bugs to "; + exit 0; + fi + if [ "$1" = "--version" ]; then + echo "immudex-motd 1.0"; + echo; + echo "Copyright (C) 2026 morketsmerke.org"; + echo "This is free software; see the source for copying conditions. There is NO"; + echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."; + echo; + echo "Written by xf0r3m."; + exit 0; + fi +fi + +if [ -f /etc/motd.conf ]; then + source /etc/motd.conf; +else + source /usr/share/doc/immudex-motd/motd.conf.sample; +fi + +echo -en "\e[1m"; echo "$(hostname)" | /usr/bin/figlet | lolcat; echo -en "\e[0m"; +echo; +echo "Today is: $(date)"; +echo; +echo "System summary: "; +cpuIdle=$(vmstat | tail -1 | awk '{printf $15}'); +cpuUsage=$((100 - $cpuIdle)); +echo -e " \tCPU: ${cpuUsage}%"; +echo -e " \tMEM: $(free -h | sed -n '2p' | awk '{printf $7}' | sed 's/i//') Free"; +if [ "$MOUNT_POINTS" ]; then + echo -e " \tMount points:\tFree/Total\t(Usage%)"; + for mountPoint in $MOUNT_POINTS; do + if $(df -h 2>/dev/null | grep -q "${mountPoint}"); then + diskSize=$(df -h 2> /dev/null | grep "${mountPoint}" | awk '{printf $2}'); + diskFree=$(df -h 2> /dev/null | grep "${mountPoint}" | awk '{printf $4}'); + diskUsage_perc=$(df -h 2> /dev/null | grep "${mountPoint}" | sed 's/%//' | awk '{printf $5}'); + echo -e "\t$(echo $mountPoint | sed 's,\$,,'):\t\t${diskFree}/${diskSize}\t(${diskUsage_perc}%)"; + fi + done +fi +if $(echo $OPTIONS | grep -q 'cryptparts'); then + if $(df -h 2> /dev/null | grep -q '/dev/mapper'); then + i=1; + echo -e " \tCRYPT_PARTi: Free/Total (Usage%)"; + amountOfDisks=$(df -h 2> /dev/null | grep '/dev/mapper' | wc -l | awk '{printf $1}'); + while [ $i -le $amountOfDisks ]; do + diskSize=$(df -h 2> /dev/null | grep '/dev/mapper' | sed -n "${i}p" | awk '{printf $2}'); + diskFree=$(df -h 2> /dev/null | grep '/dev/mapper' | sed -n "${i}p" | awk '{printf $4}'); + diskUsage_perc=$(df -h 2> /dev/null | grep '/dev/mapper' | sed -n "${i}p" | sed 's/%//' | awk '{printf $5}'); + #FCP = First Crypt Partition + echo -e " \tCRYPT_PART${i}: ${diskFree}/${diskSize} (${diskUsage_perc}%)"; + i=$((i + 1)); + done + else + echo -e " \tCRYPT_PART: N/A"; + fi +fi +echo -e " \tIP: $(ip addr show $(sed -n '2p' /proc/net/route | awk '{printf $1}') | grep 'inet\ ' | awk '{printf $2"\n"}')"; +echo -e " \tPROCESSES: $(ps -aux | wc -l | awk '{printf $1}')"; +if $(uptime | grep -q 'day'); then + utime=$(uptime | awk '{printf $3" "$4" "$5}' | sed -e 's/\,$//' -e 's,:,h ,'); + echo -e "\tUPTIME: ${utime}m"; +else + utime=$(uptime | awk '{printf $3}' | sed -e 's/,//' -e 's,:,h ,'); + if $(echo $utime | grep -q "h"); then + echo -e " \tUPTIME: ${utime}m"; + else + echo -e " \tUPTIME: 0h ${utime}m"; + fi +fi +echo -e " \t$(uptime | grep -o "load.*$" | tr [a-z] [A-Z])"; +echo; +if [ -x /usr/bin/immudex-meteo ]; then +echo "Weather:"; + if [ "$LOCATION" ]; then + /usr/bin/immudex-meteo --micro $LOCATION; + fi +fi +echo; +if [ "$FOOTER" ]; then + echo -e "$FOOTER"; +fi +echo; +echo "===================================================================="; diff --git a/tools/bin/immudex-padlock b/tools/bin/immudex-padlock new file mode 100755 index 0000000..92e6446 --- /dev/null +++ b/tools/bin/immudex-padlock @@ -0,0 +1,120 @@ +#!/bin/bash + +function help(){ + echo "it's a switch script. This script, if there is more than one cryptdisk"; + echo "gives a change to choose a cryptdisk and starts opening him. After"; + echo "sucessful opening, it spawns a terminal window with CWD sets up on"; + echo "choosed cryptdisk mountpoint and change the launcher icon in the bottom"; + echo "panel, which informs user, there are a opened cryptdisks. When user,"; + echo "execute script once again, he close all opened cryptdisk either that"; + echo "not open with this script. At least he tries. In some cases it will be"; + echo "impossible, because there are processes which using this cryptdisk or"; + echo "inside this mount point there is other mount point. This is signaled,"; + echo "by apropriate notification."; + echo "This script needs superuser (root) privileges, but using sudo command"; + echo "is implemented inside the script, you don't needed to launch this"; + echo "via sudo."; + echo; + echo "Usage: immudex-padlock [--help] [--version]"; + echo; + echo "Example:"; + echo " immudex-padlock Standard script execution, explained above."; + echo " immudex-padlock --help Print this message."; + echo " immudex-padlock --version Print information about version, author and copyrights."; + echo; + echo "Files:"; + echo " /usr/share/icons/padlock-icon.png Symlink, original launcher icon."; + echo " /usr/share/icons/changes-prevent.png Original, closed padlock icon."; + echo " /usr/share/icons/changes-allow.png Original, open padlock icon."; + echo " /etc/skel/.config/xfce4/panel/launcher-14/16844255236.desktop XFCE4 bottom panel script activator."; + echo; + echo "Report bugs to "; +} + +function version(){ + echo "immudex-padlock 1.0"; + echo; + echo "Copyright (C) 2026 morketsmerke.org"; + echo "This is free software; see the source for copying conditions. There is NO"; + echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."; + echo; + echo "Written by xf0r3m."; +} + +launcher="/home/${USER}/.config/xfce4/panel/launcher-14/16844255236.desktop"; + +function main_unlock() { + sudo /usr/local/sbin/immudex-crypt --open=$1; + index=$(basename $(sudo /usr/local/sbin/immudex-crypt --list | grep "$1" | head -1 | awk '{printf $2}' | grep -o '[0-9]')); + #sudo mkdir -p /media/${USER}/$devName; + #sudo mount /dev/mapper/$devName /media/${USER}/$devName; + + xfce4-terminal --default-working-directory=/ic${index}; + sed -i 's/padlock-icon/changes-allow/' ${launcher}; + #sudo rm /usr/share/icons/padlock-icon.png; + #sudo ln -s /usr/share/icons/changes-allow.png /usr/share/icons/padlock-icon.png; + +} + +function unlock() { + + cryptParts=$(sudo blkid | grep 'LUKS' | sed 's/://g' | awk '{printf $1" "}'); + if [ "$cryptParts" ]; then + if [ $(echo $cryptParts | wc -w) -gt 1 ]; then + select cryptPart in $cryptParts; do + main_unlock $cryptPart; + break; + done + else + main_unlock $cryptParts; + fi + else + echo -e "\e[31mThere is no LUKS partition to open.\e[0m"; + sleep 3; + fi +} + +function lock() { + + mapperDeviceList=$(ls /dev/mapper | grep 'immudex-*' | awk '{printf $1" "}'); + + if [ "$mapperDeviceList" ]; then + for dmDevice in $mapperDeviceList; do + if sudo cryptsetup status /dev/mapper/${dmDevice} > /dev/null 2>&1; then + mountPoint=$(df --output=source,target /dev/mapper/${dmDevice} | tail -n 1 | awk '{printf $2}'); + if [ "$mountPoint" ]; then + if $(sudo lsof $mountPoint > /dev/null 2>&1); then + notify-send "Padlock" "The /dev/mapper/${dmDevice} cannot be unmount, because there are opened file or running proceses." --icon=dialog-error; + else + sudo umount $mountPoint; + if [ $? -ne 0 ]; then + notify-send "Padlock" "The /dev/mapper/${dmDevice} cannot be unmount, because there are other filesystem is mounted in." --icon=dialog-error; + fi + sudo cryptsetup close /dev/mapper/${dmDevice}; + fi + else + sudo cryptsetup close /dev/mapper/${dmDevice}; + fi + fi + done + fi + if ! $(df -h | grep -q '/dev/mapper'); then + sed -i 's/changes-allow/padlock-icon/' ${launcher}; + #sudo rm /usr/share/icons/padlock-icon.png; + #sudo ln -s /usr/share/icons/changes-prevent.png /usr/share/icons/padlock-icon.png; + fi +} + +if [ "$1" ]; then + if [ "$1" = "--help" ]; then + help; + elif [ "$1" = "--version" ]; then + version; + fi +else + mapperDeviceList=$(ls /dev/mapper | grep 'immudex-*' | awk '{printf $1" "}'); + + if [ "$mapperDeviceList" ]; then lock; + else unlock; + fi +fi diff --git a/tools/bin/immudex-pl b/tools/bin/immudex-pl new file mode 100755 index 0000000..fa9e196 --- /dev/null +++ b/tools/bin/immudex-pl @@ -0,0 +1,140 @@ +#!/bin/bash + +GREEN="\e[32m"; +RED="\e[31m"; +ENDCOLOR="\e[0m"; +SYSTEM_CC=$(echo $LANG | cut -c 1-2); + +function help() { + echo "immudex-pl opening (play) links. Script creates menu from link list, which"; + echo "can be open via mpv (with yt-dlp hook). Normally links are open as"; + echo "audio stream. Script work in loop, which means you can change playback"; + echo "while the current one is still playing. When you need to exit type any letter instead of number."; + echo "Script is not only for YouTube Links, it can also open"; + echo "internet radios or shoutcasts. The link list can be downloaded and does"; + echo "not need to be stored on the target device. Script will delete the"; + echo "file at the end of its execution. "; + echo; + echo "Usage: immudex-pl [--video --format=240p...1080p] [--help] [--version] link-list"; + echo; + echo "Options:"; + echo " --video --format=240p...1080p Open link as video."; + echo " --help Print this message."; + echo " --version Print information about version, author and copyrights."; + echo; + echo "Files:"; + echo " /usr/share/doc/immudex-pl/links.list.example Example link list file."; + echo; + echo "Examples:" + echo " immudex-pl ~/radio-links.txt Open given link list as audio stream."; + echo " immudex-pl --video --format=360p ./yt-links Open given link list as video in 360p format."; + echo; + echo "Report bugs to "; +} + +function version() { + echo "immudex-pl 1.0"; + echo; + echo "Copyright (C) 2026 morketsmerke.org"; + echo "This is free software; see the source for copying conditions. There is NO"; + echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."; + echo; + echo "Written by xf0r3m."; +} + +if [ "$1" ] && [ $1 = "--video" ]; then + video=1; + shift; + if $(echo $1 | grep -q '\-\-format'); then + format=$(echo $1 | grep -o '[0-9]' | awk '{printf $1}') + fi + shift; + file=$1; +elif [ "$1" ] && [ $1 = "--help" ]; then + help; + exit 0; +elif [ "$1" ] && [ $1 = "--version" ]; then + version; + exit 0; +else + file=$1; +fi + + +if echo $file | grep -q 'http'; then + echo -n "Getting link list..."; + wget -q $file -O /tmp/playlist.txt; + if [ $? -eq 0 ]; then + echo -e "[ ${GREEN}OK${ENDCOLOR} ]"; + file="/tmp/playlist.txt"; + else + echo -e "[ ${RED}FAIL${ENDCOLOR} ]"; + help; + exit 1; + fi +fi + +if [ "$file" ]; then + PS3="Link: "; + linkNames=$(cut -d ":" -f 1 $file | sed 's/\ /_/g' | awk '{printf $1" "}') + select name in $linkNames; do + if [ "$MPVPID" ]; then kill $MPVPID; fi + if [ ! "$name" ]; then break; fi + link=$(grep "$name" $file | cut -d ":" -f 2-3); + if [ ! "$link" ]; then + linkName=$(echo $name | sed 's/_/\ /g'); + link=$(grep "$linkName" $file | cut -d ":" -f 2-3); + fi + if echo $link | grep -q "youtube"; then + link=$(echo $link | sed 's/\ //g'); + if [ "$video" ]; then + #ytplay -v $link -f $format + #format="--ytdl-format=$(grep "$link" $file | cut -d ":" -f 4-)"; + echo "Getting requested video format ID..."; + video=$(yt-dlp --list-formats $link 2>/dev/null | grep "$format" | sed -n '1p' | awk '{printf $1}') + if [ ! "$video" ]; then + echo -e "Getting requested video format ID...[ ${RED}FAILED${ENDCOLOR} ]"; + exit 1; + else + echo -e "Getting requested video format ID...[ ${GREEN}OK${ENDCOLOR} ]"; + fi + + echo "Getting appropiate audio format ID for video..."; + audio=$(yt-dlp --list-formats $link 2>/dev/null | grep 'audio only' | grep "$SYSTEM_CC" | sed -n '1p' | awk '{printf $1}'); + if [ ! "$audio" ]; then + echo -e "Getting audio format based on your locales...[ ${RED}FAILED${ENDCOLOR} ]"; + echo "Getting high quality audio stream format..."; + audio=$(yt-dlp --list-formats $link 2>/dev/null | grep 'audio only' | grep "high" | sed -n '1p' | awk '{printf $1}'); + if [ ! "$audio" ]; then + echo "No audio stream found...[ ${RED}DEAD${ENDCOLOR} ]"; + exit 1; + else + echo -e "Getting high quality audio stream format...[ ${GREEN}OK${ENDCOLOR} ]"; + fi + else + echo -e "Getting audio format based on your locales...[ ${GREEN}OK${ENDCOLOR} ]"; + fi + fmat="--ytdl-format=${video}+${audio}"; + echo "MPV is starting up..."; + mpv $fmat $link > /dev/null 2>&1 & MPVPID=$! + + else + #ytplay -a $link -f best[height=360] + format="--no-video"; + echo "MPV is starting up..."; + mpv $format $link > /dev/null 2>&1 & MPVPID=$! + fi + else + mpv --no-video $link > /tmp/pl.log 2>&1 & MPVPID=$!; + tail -f /tmp/pl.log | grep "icy-title" & + fi + #echo "MPV: $MPVPID"; + done +else + help; + exit 1; +fi + +if [ -f /tmp/playlist.txt ]; then + rm /tmp/playlist.txt; +fi diff --git a/tools/bin/immudex-run b/tools/bin/immudex-run new file mode 100755 index 0000000..c0fa3e4 --- /dev/null +++ b/tools/bin/immudex-run @@ -0,0 +1,51 @@ +#!/bin/bash + +function help() { + echo "This script allows to run a program with pointed home dir on first"; + echo "opened LUKS partition via immudex-crypt tool. The most programs in"; + echo "Linux write some data in users home dirs. Doing this persistentaly"; + echo "in immudex is imposible, because all default users home dirs came back"; + echo "to state from image and wroted date are gone. Running programs via this"; + echo "scripts makes possible to save this date on first 'crypt'."; + echo "This script can be use to make your own activators easlly."; + echo; + echo "Usage: immudex-run [--help] [--version] program_name [program_args]"; + echo; + echo "Examples:"; + echo " immudex-run firefox-esr Run given program"; + echo " immudex-run --help Print this message"; + echo " immudex-run --version Print information about version, author and copyrights"; + echo; + echo "Report bugs to "; +} + +function version(){ + echo "immudex-run 1.0"; + echo; + echo "Copyright (C) 2026 morketsmerke.org"; + echo "This is free software; see the source for copying conditions. There is NO"; + echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."; + echo; + echo "Written by xf0r3m."; +} + +if [ "$1" ]; then + if [ "$1" = "--help" ]; then + help; + exit 0; + elif [ "$1" = "--version" ]; then + version; + exit 0; + fi +fi + +export HOME=/ic0; +export XDG_CONFIG_HOME=/ic0; +export XDG_CACHE_HOME=/ic0/.cache; +export XDG_CONFIG_DIRS=/ic0/.config; + +program=$1; +shift; +args="$@"; + +$(which $program) ${args}; diff --git a/tools/bin/immudex-secured-firefox b/tools/bin/immudex-secured-firefox new file mode 100755 index 0000000..32720aa --- /dev/null +++ b/tools/bin/immudex-secured-firefox @@ -0,0 +1,43 @@ +#!/bin/bash + +function help() { + echo "This tool running up a Firefox browser via firejail with sandboxing "; + echo "and forcing network interface to that we use to internet connection."; + echo; + echo "Usage: immudex-secured-firefox [--help] [--version]"; + echo; + echo "Exaples:"; + echo " immudex-secured-firefox Run secured browser."; + echo " immudex-secured-firefox --help Print this message."; + echo " immudex-secured-firefox --version Print information about version, author and copyrights"; + echo; + echo "Report bugs to "; +} + +function version(){ + echo "immudex-secured-firefox 1.0"; + echo; + echo "Copyright (C) 2026 morketsmerke.org"; + echo "This is free software; see the source for copying conditions. There is NO"; + echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."; + echo; + echo "Written by xf0r3m."; +} + +if [ "$1" ]; then + if [ "$1" = "--help" ]; then + help; + exit 0; + elif [ "$1" = "--version" ]; then + version; + exit 0; + fi +fi + +if [ ! -d /tmp/${USER} ]; then + mkdir /tmp/${USER} + cp -prvv /home/${USER}/.mozilla /tmp/${USER} +fi + +eth0=$(ip route show | grep 'default' | awk '{printf $5}'); +firejail --private=/tmp/${USER} --net=$eth0 /usr/lib/firefox-esr/firefox-esr diff --git a/tools/bin/immudex-secured-librewolf b/tools/bin/immudex-secured-librewolf new file mode 100755 index 0000000..30d65ee --- /dev/null +++ b/tools/bin/immudex-secured-librewolf @@ -0,0 +1,44 @@ +#!/bin/bash + +function help() { + echo "immudex-secured-librewolf, support for LibreWolf version. LibreWolf isn't"; + echo "part of immudex, but this tool officialy existed as a part of project."; + echo; + echo "Usage: immudex-secured-librewolf [--help] [--version]"; + echo; + echo "Examples:"; + echo " immudex-secured-librewolf Run sandboxed LibreWolf browser." + echo " immudex-secured-librewolf --help Print this messages." + echo " immudex-secured-librewolf --version Print information about version, author and copyrights."; + echo; + echo "Report bugs to "; +} + +function version(){ + echo "immudex-secured-librewolf 1.0"; + echo; + echo "Copyright (C) 2026 morketsmerke.org"; + echo "This is free software; see the source for copying conditions. There is NO"; + echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."; + echo; + echo "Written by xf0r3m."; +} + +if [ "$1" ]; then + if [ "$1" = "--help" ]; then + help; + exit; + elif [ "$1" = "--version" ]; then + version; + exit; + fi +fi + + +if [ ! -d /tmp/${USER} ]; then + mkdir /tmp/${USER} + cp -prvv /home/${USER}/.librewolf /tmp/${USER} +fi + +eth0=$(ip route show | grep 'default' | awk '{printf $5}'); +firejail --private=/tmp/${USER} --net=$eth0 /usr/bin/librewolf diff --git a/tools/bin/immudex-shoutcasts b/tools/bin/immudex-shoutcasts new file mode 100755 index 0000000..3c33211 --- /dev/null +++ b/tools/bin/immudex-shoutcasts @@ -0,0 +1,162 @@ +#!/bin/bash + +GREEN="\e[32m"; +RED="\e[31m"; +ENDCOLOR="\e[0m"; +BOLD="\e[1m"; +BOLD_GREEN="\e[1;32m"; +BOLD_YELLOW="\e[1;33m"; +BOLD_BLUE="\e[1;34m"; + +function help() { + echo "immudex-shoutcasts script that search internet radios or shoutcasts in two sources xiph.org icecast"; + echo "directory and download .m3u file from radio-browser.info based on a space-separated keywords."; + echo "Data from radio-browser.info are limited to 30 results."; + echo; + echo "Usage: immudex-shoutcasts [--source=icecast | radio] [--help] [--version] --keywords=keyword1...keywordN"; + echo; + echo "Options:"; + echo " --source=icecast/radio This parameter specifies source, if we want define a source. It can be omitted, then both sources will be searched."; + echo " --keywords=keyword1...keywordsN This parameter is required, it pass keywords to search. Keywords are space-separated."; + echo " --help Print this message."; + echo " --version Print information about version, author and copyrights."; + echo; + echo "Examples:"; + echo " immudex-shoutcasts --keywords=Classic Rock Script will be search internet radios and shoutcast for 'Classic Rock' keywords"; + echo " immudex-shoutcasts --source=radio --keywords=lofi Script will be search internet radios (because source is given) for 'lofi' keyword"; + echo; + echo "Files:" + echo " /tmp/icecast.idx Temporary file, store search results from icecast directory for parsing."; + echo " /tmp/radio.idx Temporary file, downloaded .m3u file from radio-browser.info store search results for parsing."; + echo; + echo "Report bugs to "; +} + +function version() { + echo "immudex-shoutcasts 1.0"; + echo; + echo "Copyright (C) 2026 morketsmerke.org"; + echo "This is free software; see the source for copying conditions. There is NO"; + echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."; + echo; + echo "Written by xf0r3m."; +} + + +function getDataBetweenHtmlMarks() { + grep "$1" $2 | sed -n "${3}p" | cut -d ">" -f 2 | cut -d "<" -f 1; +} + +function listOfStations() { + query=$1; + src=$2; + + case $src in + "icecast") wget http://dir.xiph.org/search?q=$query -O /tmp/icecast.idx >> /dev/null 2>&1; + file="/tmp/icecast.idx";; + "radio") wget "https://de1.api.radio-browser.info/m3u/stations/search?limit=30&name=${query}&hidebroken=true&order=clickcount&reverse=true" -O /tmp/radio.idx >> /dev/null 2>&1; + file="/tmp/radio.idx"; + dos2unix $file; + esac + + if [ ! -f $file ]; then + echo -e "${RED}There is no internet connection or sources are currently"; + echo -e "unavailable.${ENDCOLOR}"; + exit 1; + fi + + case $src in + "icecast") amountOfStations=$(grep 'card-title' $file | wc -l);; + "radio") amountOfStations=$(grep '#EXTINF' $file | wc -l);; + esac + + case $src in + "icecast") echo -e "${BOLD}Icecast directory:${ENDCOLOR}";; + "radio") echo -e "${BOLD}radio-browser.info:${ENDCOLOR}";; + esac + + i=1; + while [ $i -le $amountOfStations ]; do + case $src in + "icecast") stationName=$(getDataBetweenHtmlMarks 'card-title' $file $i);; + "radio") stationName=$(grep '#EXTINF' $file | sed -n "${i}p" | cut -d "," -f 2-);; + esac + if [ "$src" = "icecast" ]; then + whatIsPlayingNow=$(getDataBetweenHtmlMarks 'card-subtitle' $file $i); + fi + case $src in + "icecast") link=$(grep 'Play' $file | sed -n "${i}p" | cut -d '"' -f 2);; + "radio") link=$(grep '://' $file | sed -n "${i}p");; + esac + echo -e "${BOLD}${i}.${ENDCOLOR} ${BOLD_YELLOW}${stationName}${ENDCOLOR}"; + if [ "$whatIsPlayingNow" ]; then + echo -e "\t${BOLD}Now playing:${ENDCOLOR} ${BOLD_BLUE}${whatIsPlayingNow}${ENDCOLOR}"; + unset whatIsPlayingNow; + fi + echo -e "\t${BOLD}Link:${ENDCOLOR} ${BOLD_GREEN}${link}${ENDCOLOR}"; + i=$(expr $i + 1); + done + unset i; + echo; +} + +if [ "$1" ]; then + + if [ "$1" ] && [ "$1" = "--help" ]; then + help; + exit 0; + elif [ "$1" ] && [ "$1" = "--version" ]; then + version; + exit 0; + fi + + option=$(echo $1 | cut -d '=' -f 1); + if [ "$option" = "--source" ]; then + src=$(echo $1 | cut -d '=' -f 2); + search=$(echo $* | cut -d '=' -f 3-); + elif [ "$option" = "--keywords" ]; then + search=$(echo $* | cut -d "=" -f 2-); + fi +else + help; + exit 1; +fi + +if [ "$src" ]; then + listOfStations "$search" $src; + if [ "$src" = "icecast" ]; then + file="/tmp/icecast.idx"; + else + file="/tmp/radio.idx"; + fi +else + listOfStations "$search" 'icecast'; + listOfStations "$search" 'radio'; + + PS3="source? "; + select src in 'icecast' 'radio'; do + case $src in + 'icecast') file="/tmp/icecast.idx";; + 'radio') file="/tmp/radio.idx";; + *) exit 0; + esac + break + done +fi + +echo -n "Station? "; +read station; +if $(echo $station | grep -q '[0-9]') && [ $station -le 30 ]; then + case $file in + '/tmp/icecast.idx') link=$(grep 'Play' $file | sed -n "${station}p" | cut -d '"' -f 2);; + '/tmp/radio.idx') link=$(grep '://' $file | sed -n "${station}p");; + esac + case $src in + "icecast") stationName=$(getDataBetweenHtmlMarks 'card-title' $file $station);; + "radio") stationName=$(grep '#EXTINF' $file | sed -n "${station}p" | cut -d "," -f 2-);; + esac + echo -e "${BOLD}Station:${ENDCOLOR} ${BOLD_YELLOW}${stationName}${ENDCOLOR}"; + mpv --no-video $link; +else + exit 0; +fi diff --git a/tools/bin/immudex-version b/tools/bin/immudex-version new file mode 100755 index 0000000..9c663f7 --- /dev/null +++ b/tools/bin/immudex-version @@ -0,0 +1,39 @@ +#!/bin/bash + +function help() { + echo "Script returns first 7 signs of immudex commit ID."; + echo; + echo "Usage: immudex-version [--help] [--version]"; + echo; + echo "Options:"; + echo " --help Print this message."; + echo " --version Print information about version, author and copyrights."; + echo; + echo "Files:"; + echo " /run/live/medium/live/changelog Stores information about currently running immudex image."; + echo; + echo "Report bugs to "; +} + +function version(){ + echo "immudex-version 1.0"; + echo; + echo "Copyright (C) 2026 morketsmerke.org"; + echo "This is free software; see the source for copying conditions. There is NO"; + echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."; + echo; + echo "Written by xf0r3m."; +} + +if [ "$1" ]; then + if [ "$1" = "--help" ]; then + help; + exit 0; + elif [ "$1" = "--version" ]; then + version; + exit 0; + fi +fi + +eval $(grep '^COMMIT' /run/live/medium/live/changelog) +echo $COMMIT | awk '{printf $1}' | cut -c 1-7 diff --git a/tools/bin/immudex-ytplay b/tools/bin/immudex-ytplay new file mode 100755 index 0000000..4634065 --- /dev/null +++ b/tools/bin/immudex-ytplay @@ -0,0 +1,131 @@ +#!/usr/bin/env python3 + +import sys +import subprocess +import re +from youtube_search import YoutubeSearch + +def usage(): + + print('''immudex-ytplay script for playing a video or audio track from YouTube. Script +can search based on given keywords and return list of results. User choose +one of result or repeats searching with 'r' || 'R' answer to number from +list result. Then script quering YouTube for available formats and table +with possible format are printed. User have to put video and audio quality +from table in requested format: videoQualityID+audioQualityID. There are +a hint. Script is half-interactive. + +Usage: immudex-ytplay [--search='keyword1...keywordN' --video | --audio] [--video youtube_link] [--audio youtube_link] [--help] [--version] + +Options: + --search='keyword1...keywordN' --video/--audio Search given keywords on YouTube and play video or audiotrack. + --video YouTube_Link Play YouTube video. + --audio YouTube_Link Play only YouTube video audiotrack. + --help Print this message. + --version Print information about version, author and copyrights. + +Examples: + immudex-ytplay --search='lofi' --audio Script will be search a lofi keyword in YouTube and play only audio tracks from choosen video. + immudex-ytplay --video https://youtube.com/watch?v=... Script will be play a video from given link, of course is publicly available. + immudex-ytplay --audio https://youtube.com/watch?v=... Script will be play a audio track from given video link. The principle of video playback also applies here. + +Report bugs to ''') + +def version(): + print('''immudex-ytplay 1.0 + +Copyright (C) 2026 morketsmerke.org +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +Written by xf0r3m.''') + +def ytSearch(keywords, maxResults=15): + + i = "r" + while isinstance(i, str) and (i == "r" or i == "R"): + subprocess.run('clear') + results = YoutubeSearch(keywords, max_results=maxResults).to_dict() + + index = 1 + for video in results: + print(f"\033[1m\033[91m{index}\033[0m. Title: \033[92m{video['title']}\033[0m") + print(f" Channel: \033[93m{video['channel']}\033[0m, Duration: \033[94m{video['duration']}\033[0m, PubDate: \033[95m{video['publish_time']}\033[0m") + index += 1 + + i = input("Put number of video you wanna watch or put 'r' | 'R' to reload search result or send any other key to quit: ") + if isinstance(i, str) and i != 'r' and i != 'R' and not re.search("[0-9]+", i): + sys.exit(0) + + i = int(i) - 1 + return(results[i]['id'], results[i]['title'], results[i]['channel'], results[i]['duration'], results[i]['publish_time']) + +def getFormat(videoID): + subprocess.run(['yt-dlp', '--list-formats', 'https://youtube.com/watch?v=' + videoID]) + f = input("Please choose youtube video format, you need put video+audio ID of quality in this format or type anything else to quit:") + if not re.search("[0-9]{3}\+[0-9]{3}|[0-9]{2}", f): + sys.exit(0) + else: + return f + +if len(sys.argv) == 2: + if sys.argv[1] == '--help': + usage() + sys.exit(0) + elif sys.argv[1] == '--version': + version() + sys.exit(0) + +if len(sys.argv) < 2: + usage() + sys.exit(2) + +option=sys.argv[1].split("=", 1)[0] + +if option == '--search': + if len(sys.argv) > 2: + if sys.argv[2] == '--video': + mode = "video" + elif sys.argv[2] == '--audio': + mode = "audio" + else: + usage() + sys.exit(2) + keywords = sys.argv[1].split("=", 1)[1] + + video = ytSearch(keywords) + subprocess.run('clear') + + if mode == 'audio': + ytFormat = "--no-video" + else: + ytFormat = "--ytdl-format=" + getFormat(video[0]) + + subprocess.run('clear') + print(f"\033[91m1\033[0m. Title: \033[92m{video[1]}\033[0m") + print(f" Channel: \033[93m{video[2]}\033[0m, Duration: \033[94m{video[3]}\033[0m, PubDate: \033[95m{video[4]}\033[0m") + print("===================================================================") + + subprocess.run(['mpv', ytFormat, 'https://youtube.com/watch?v=' + video[0]]) + else: + usage() + sys.exit(2) + +elif sys.argv[1] == '--audio': + if len(sys.argv) > 2: + link=sys.argv[2] + ytFormat="--no-video" + subprocess.run(['mpv', ytFormat, link]) + else: + usage() + sys.exit(2) + +elif sys.argv[1] == '--video': + if len(sys.argv) > 2: + link=sys.argv[2] + videoID=link[-11:] + ytFormat="--ytdl-format=" + getFormat(videoID) + subprocess.run(['mpv', ytFormat, link]) + else: + usage() + sys.exit(2) diff --git a/tools/bin/library.sh b/tools/bin/library.sh new file mode 100755 index 0000000..1ba9ed8 --- /dev/null +++ b/tools/bin/library.sh @@ -0,0 +1,100 @@ +#!/bin/bash + + +#function help() { +# echo "This script does noting. It's a collection of functions uses by"; +# echo "other tools, by import this file into it self. Man page for this script"; +# echo "can be usefull for describe above mentioned functions."; +# echo; +# echo "Notes:"; +# echo -e " get_debian_branch() Can be used for convert Debian codename for Debian branch name\n"; +# echo -e " get_machine_arch() Used for getting information is this 32 or 64-bit architecture.\n"; +# echo -e " check_distro_commit() Is used for decide that you use a latest version immudex if there are commit ahead your image, this script returns 0, otherwise 1.\n"; +# echo -e " ascii_colors() Prints immudex name in ASCII manuali.\n"; +# echo; +# echo "Usage: source /usr/local/bin/library.sh"; +# echo; +# echo "Options:"; +# echo " There is no options... Function help and version are used only for generate man page file and will be comment out after this."; +# echo; +# echo "Report bugs to "; +#} + +#function version(){ +# echo "library.sh 1.0"; +# echo; +# echo "Copyright (C) 2026 morketsmerke.org"; +# echo "This is free software; see the source for copying conditions. There is NO"; +# echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."; +# echo; +# echo "Written by xf0r3m."; +#} + + +function get_debian_branch() { + if grep -q 'trixie' /etc/os-release; then + echo "testing"; + elif grep -q 'bookworm' /etc/os-release; then + echo "stable"; + else + echo "oldstable"; + fi +} + +function get_machine_arch() { + arch=$(uname -m); + if [ "$arch" = "i686" ]; then + echo "32"; + else + echo "64"; + fi +} + +function check_distro_commit() { + versionFile="/run/live/medium/live/version"; + if [ -f $versionFile ]; then + localVersion=$(cat $versionFile); + if [ -d /tmp/immudex ]; then + $(cd /tmp/immudex && git pull -q); + else + git clone -q https://github.com/xf0r3m/immudex /tmp/immudex; + fi + latestVersion=$(cd /tmp/immudex && git log --pretty=oneline | head -1 | cut -d " " -f 1); + if [ "$1" ] && [ "$1" == "--print" ]; then + echo "$(cd /tmp/immudex && git log ${localVersion}..${latestVersion})"; + fi + if [ "$localVersion" = "$latestVersion" ]; then + return 0; + else + return 1; + fi + else + return 255; + fi +} + +function ascii_colors() { + + BLUE="\e[1;94m"; + RED="\e[1;91m"; + CYAN="\e[1;96m"; + ENDCOLOR="\e[0m"; + + echo -e "${BLUE} _ ${RED} _ ${CYAN} ${ENDCOLOR}"; + echo -e "${BLUE}(_)_ __ ___ _ __ ___ _ _ ${RED} __| | ___${CYAN}__ __${ENDCOLOR}"; + echo -e "${BLUE}| | '_ \` _ \| '_ \` _ \| | | |${RED}/ _\` |/ _ \\\\${CYAN} \/ /${ENDCOLOR}"; + echo -e "${BLUE}| | | | | | | | | | | | |_| |${RED} (_| | __/${CYAN}> < ${ENDCOLOR}"; + echo -e "${BLUE}|_|_| |_| |_|_| |_| |_|\__,_|${RED}\__,_|\___/${CYAN}_/\_\\"; + echo -e "${ENDCOLOR}"; + +} + +#if [ "$1" ]; then +# if [ "$1" = "--help" ]; then +# help; +# exit 0; +# elif [ "$1" = "--version" ]; then +# version; +# exit 0; +# fi +#fi diff --git a/tools/man/immudex-branch.1.gz b/tools/man/immudex-branch.1.gz new file mode 100644 index 0000000000000000000000000000000000000000..57ac8d4e848524d199f83e958047327b410df651 GIT binary patch literal 785 zcmV+s1Md7EiwFqRmgH#w18Hq-b!26DEn;$EZewUJF#x4hO^=%}5WV|XOmo>D61pE% zrFN^TBw;s}5p=$TpkJzwa2rs*QFp?IDUho_X`$n=wv0f_VUbkiaUK z)4L5M3mU^6U3%{TsDT61Q1FH;X7~=aM<{u)T)|A%h_=%s;=~K^-IYhqlG6zY zbD@DjCY#5e0T${^iM<)ap%j>;xM@|RVa~S#$vttUg>0bJ$U2t_wymgka6)#vUh&2c z!kEUynZn;K$3A}+t|>gK{5X20yNL;6~R#7_#k!#H-MweWWBF=%^PD28dh_V`G7t&@9haX zMd(fvk~E*DleD)Zk4UHl0vJoB=329YW69zrZLlbhpwIl1FWbu244uZnT2rD*+yLaZ zKPpj_M)w4~2X_@Ny`I6Du{{O-GG`QVGVsN?K~!(xL6{QChSC$>0w+gxP1A@Mk+Fj5jT-kT=b(ysjAI1Sj+g&|b+xu^ItTBOdTg zS4S+sovJDeZQzLhfEI?2JG-*}8%G=(4%p|QP8bqh$`)6(5Kr790LwDmIXl=B2tHlI P2e#xlk#wKRyafONHC=h@ literal 0 HcmV?d00001 diff --git a/tools/man/immudex-cdrip.1.gz b/tools/man/immudex-cdrip.1.gz new file mode 100644 index 0000000000000000000000000000000000000000..cd271c6e5edbcd0e6714a1d017770c6162a9f9e4 GIT binary patch literal 1008 zcmV)18Hq-b!26DEn{SIX>cwv0F_luZ{s!)z3W#@ec3EvX|vg) zz+#J{vaQ4_Y)g=2bc3n~TB2+s5~-3@68G2dkd%WsNw@969~^Op@4a~(1?2=532c%A z*2yBizJ+2L=Wrdbq8|Wa4G%=Yo^mRQrZw!2aG-5})e#OKgC9Q!p8_u^mJqMk+eP%% zpD(gFg~`VWOnxJLAo2)TmsdaGl6Bos(?`FmCF?Qw5@TCMCCo*K)oL~If_w>^a2P|r;MF*jc%op#JEtlVJk~EKVFPOnuRqv0o ziOZ?)<9}c9_E>%>o9s_Gh4)nZHB*((cq3jsGb!Acl#`CWcx1$R5xS>RF~MEbf?7oR z9AzrvWOJfgj$E03r+~nYsKfu|8+f@(AU%;btpi;5jPIZAnu4UHR?tyRYNE*$sspX= z@L&)exo6O5tuf9WQ3J**l#Gv7?fl5PSzKA(W1s7|BawZAmf4_$l*x>m=*uB!W zuXO#x<8G+drixj+lfGXM$j%&og7buClr(t7i~7`Bot)cqRZW zW(Y>2bO(yxgdd$?4sJh~DTeLDB&>XoeCJ|laj;R;i8e!P8x81UbiC+?mLMnFBo+J< zvh()4-aq-q2x7v@+!)tedr90m&w(45POxxWER)RpT{5jHH$(Taxs;ze_jHm)X_6K3 z<_2cln|$JBv=?~ecf(#8fBft=|GMu8YlBL3zu2^SlHO+V&9XqoV}GE$sDvHR&Rg0*YF7F*3-CjsvPc8hciP*UZ>M1ptNZ0OoHJ z4>Kj<`uGL7&_M5zmdRU3*?bvpif|UM;^G!CbR8F)D92Y&l0gV*h)n0(RhU7#&C(=~ zMiKHTf^d~56GVv^hPH)TR6|F(cK*cjucyAT8H%m(gFYZ;))w^9&VR6+1DUOX1tM?7@_jh-`2LJ$x literal 0 HcmV?d00001 diff --git a/tools/man/immudex-create-media.1.gz b/tools/man/immudex-create-media.1.gz new file mode 100644 index 0000000000000000000000000000000000000000..6f2a0eb03bbe65024181ada65c79019bbb3eb5f3 GIT binary patch literal 1053 zcmV+&1mgQ2iwFq!zi?>)18Hq-b!26DEn{+JVRU6JZDnL>VJeL6Wf>R7F8cv`j=2wIt=lf8QY`C*Hs=+=pC9&78TNGj!4c zOafR03Cx3uKYfH`=EpGgAH1Icd>*N$Qq}9o$^qe8eNGsy3%Db|xqS+7-1Dc({)YY4mI}#u{qC0C{`%3TYX-KRGx>Cf0sqne z;29HHvy$HRfgC))bFSMb`rffO=`BuS>R+#brnHF{k0U=!{9v)~TH4o^_I+dOXZb&y z7I)UhNP>5J5Y1tVWvfw>PQ1 zLPu}vgWO3)D~VCthKg2G;zA(S2lQoI3|n9h8bZ+TEfX~Fh8mcnai&RVrRz~@r(N5y zGnYBtUdsHN<<~jOh_1mj60cdNIq~MwcNU%QOz+J>cUKpE;JO_ZVfR|qjSaaDW*^Z(2e&niV+M_F%+!UG++{Oq|`|tn(amO zYRPJ3K}8HIS@BjuZ!!eZstqy(Hv(k5*$Gx`l++`SVc@+~q$#QVJTU0T34bz~6Z$wc zxU(4YwUfwEg$z+2xzWd~G|tH5EK;4wZIAq#o*^7PO}9?Thm1NW#k07DLT3VbH6L~O zNVOpDO59eR-UpEv22tWK?qRgNj|Wyn8!oW7ZDBb4 zTW9=7Q4v-;8LxgfZsQ<)jQsmqVvYA~g7hNe=5>OKizljNMe&crMPWHBVd?dS6NR;) z6tKhU8Mn_Dka)sHhc~Urs99s0pt_oj&SA@)3QAL3wuSz-=t zSwhaUwxYG_)P(RSpE)fEg4)0zdw=twp@YH@n2_{k1OAK;XTFGCT>_2wn(M zb;}tKxV_6Ax=BUKQU_45!(M?zHVjScvhJz396#JgI1cTEp(QuGEpsUJLPQ)OS%zxX Xqwb+_6Ck(y%&mU`;Wm=u*9ZUr0jB~L literal 0 HcmV?d00001 diff --git a/tools/man/immudex-crypt.1.gz b/tools/man/immudex-crypt.1.gz new file mode 100644 index 0000000000000000000000000000000000000000..74e1112414e33f0a3f971e6b2199ce32f79bf33b GIT binary patch literal 1051 zcmV+$1myc4iwFoMz;I~*18Hq-b!26DEn{+daC9y)0IgN;Z>u&G{qDcwE??S83H|Y= zNz+@Wk(Af4B>@4^8jb16Attc~nAs+6{`*}UXq)79`!cB&!Pw`Xd(OSrPC9^x02V<4 z^Wee%vVvsl$MD6UdEWu}8lI_wEvuNMnr&cxfE_F9yOLIL>wN#C^T{DjG6jD=Up{zG zqe-+16ByhMVDKxg8Y&NPcXRgxzVfncHtc1T$wRI2>7*MMP!riN#(cX-&Odf^b?JPk=9H|TuTlxuv5+;T&b@5!{vDcEy*9zEGH z$hlOSn3I@kyBot51?=dafei`l?}ip|GX%vlfsF3qc4(7V0z_qhi3*c#Y9<>~jF(af zeFe4TdtR_D#;1~jL>w;JrY)YpN{_XZge1+!=_qZhC67objUHC>J}o3?!q7eC1zi{H z8#y}fp}HzVwBtfUY=$pJr7l_H?i<(X^2vD~xz=%l56d$+EHteYm#%I${1p3fm2Ds_Gq9PRW#_TXwXsZ;^g0nvdF) z)W`;OEgB8o7Bs)nJJiim5%odx?M`{+pQ?9GNmu2c=o* zd<6D>n5fMYnVfZF@3IsnZ26v5Z~gfps`dR9)7ab{{f57`HDA5SvD`b(LsPn$Xry9S zAM>{}?1oINpSBl2boERU6x&@U(;y!QXa25HF(}YZVZy~+RguR0>SNRvys$}?ZgxnHm zElFaE3jcD+kf6x*GdBEZoENO6j574ChLCnf;UMXzB$z>j^8wE<0)i(ct@Pn@+apGH zb8hZMlc~E%+_69NlNHWByj_!p7vn7(MBqZ`Vy2Vj%#9#iMqv@k%a`wx65q>{(nV*bV16wG>-P z%XR|d3y#R*fcurEMPZON98eulT(hASD{F6Z;`m_?eS+zPAyGTg6dPNY1^{S=U1MGC VFzSMtxzlnb{{Tq)dM%*{002+q1Hu3R literal 0 HcmV?d00001 diff --git a/tools/man/immudex-hostname.1.gz b/tools/man/immudex-hostname.1.gz new file mode 100644 index 0000000000000000000000000000000000000000..e723605ca40832db8af02f65bd8f67511de45ab7 GIT binary patch literal 831 zcmV-F1Hk+riwFqRmgH#w18Hq-b!26DEog6ZbZ%j7WiBxQrBq#S(=Zf$_piA01s>LP z8wiAk5Luh8mewXpQo%%ca8oBSBz9ywWBvDB=Yt7#NJulB@=kYtdRLl!lWrgntk@_j=^yej7#!O^A1W(n-E%1+Ji7)7339@ zrCY}WYg?^aEzl9@k8^mo5{5V|*fWDpDG9l1+Rmc9IBN{Tpv3SFYKBc%(gq5x8rUmk zfvyIH!hR(bD2+%~Txaua(4&Y+q=mHoInZ!pSm{K4YMV6r-6GZ1jen~q2A7oE|ITI?6*Xe@6I<8yH$pEt_qJc>v%bVDZv$}MVs z<}}ouJk@=YnmNb*NK5d=-$WCeQ@@hlir-F5^)u*9$LjhxIzN0hBYp3AESPlutH{rf zjDr4`;QlUMhcWrAg|%Edu8+mJe%%ajXK@gPaZ0zhaJ{=tW+djV(ipO?>|^<1X#P}U z)@u(F_pu*ahS7aYZ`UbVPRBv^Dp&nw0FBZ=xHS#Oho^K&yuBu=+gZ3wa`Z$M_9xT) z3LW7nhpTitAENFy5VFLlJP5a~@xXmFn!EXJNN`d!X^&SRG1~kA*K%{4AYQKhZR%gs zJDT1DmTqXe4HCTX!WevreB5-oyYpj+c5xIY!6-r!1mNE#;f%O%v*_v?4l3^&F6|&U z!asYbI2-X2u=v9q^bt$>qcaNY5@UkQY2g;^$FWY(qi3NoX{BZjLg1b*c3fk|gftez z=D;l+Q6n(Iy0jzDe7IGKN23Y-6xNF(Vk*_u2Pnk@cNoC(9JA-_9bwvh9q+4@x7Th z^s*V;hp-J(*o61|VGrqwC-A`6!4Cl3!ciEgutO~@7H~L0jZJ^siVi+{KmFo;@|c&d zfNwUt``~fTH&Ga;^JTRBJ=iBO`#6KyM(DhT+nd{;=|i^dP~h`iw!PAJUiH;iJQ>2e zq0OB^4GYy0dSPbFOIEP;HvxMiDVu||R|W)_T+7}zScP%c26~-!!9!n+-8vh=orZ}r$+<7HTnYC&W z3ON$UYtdEsx^zI&j|`tNA1uC9Wokk=){A%R?h{4vx%+)+s{YlHJwq`s(c=R{XI+zHYU67q^kiGbT z|F56k$%c!lHx<2`c^2`VBBv_*yL1)C><=xiB?pkJp358kshxIbao`4)ZQ+9O%;GZ^}^wObi|CSc7=3mjR%m{=p1Y4rec(-MQ2Z+p;H#{ ziDbFFO%N|u{x+?b31`HT zI1Eh#h02E(J3Ez|;NQ6_Tu%jci2gJ`!cBjQ&#ql=I0w-Xe_lG7BM7ZC>eM@cy;hYL z?KGwI(W7oolxVDI8h3=9CfP`f*JJte>C$8#k1l7t1@1)=GqoC;0xJ204hck_lPO)p V&tQFnG_Pm&>>sIk1Rx~_005Upm5TrX literal 0 HcmV?d00001 diff --git a/tools/man/immudex-import-sshkeys.1.gz b/tools/man/immudex-import-sshkeys.1.gz new file mode 100644 index 0000000000000000000000000000000000000000..f0f4f58cbc315bda725991a81878cab65a16cd47 GIT binary patch literal 901 zcmV;01A6=)iwFqRmgH#w18Hq-b!26DEop6VZ*p`kb8~2GWqEThF#x?)QE%Hg41V{o z;PSE!Xxy$l958Gc&Q07#SYjKtgIjRkgJR3JP}}lJa@+j-QL?kOy)`cf3`h`&63LI> zM>1|UgJlRon8GGplItC$E0Vx9S^KX5h=zNrpkf`9RI>v12dG)oU$(S^ckUk_-1n~I zrYj(u&35U3os&%z#_2psR$u&G0<(8Bm~E)cYq-3){1XqnZHIzA%z4`jspm@7x9p%W z)&*W}6_cW2-Ictux4=6sU@#Cms`(v*TC@xbE?KUHJh&E5vJ1i}A&KK&!LMOC z|70b}&gMsREtFQ-c~-{X;CN*?d}g|1QgP9ZR-0<+CySUwDG3ATx7L}~T%m`R0aPu9 z28CxJhYo!~=o($0`kcW%8W|u3Q%-Zh8&-_8g|-Z2EsdP4yvpX;L{B#HQ^pRl1~BK2 zwrm7W3(1ti17fyJoim-En>U83Xsqas8VUiD{W~C_;w_X?v|vejTy_cUfh+Ak24RK3 z+>u09K%2rbv!WGy^6V(ikC(hd4O*m6bU^oF&@eqY13Ks$^%+_350Y24RwE1kS8o%o z{gH;Ldwvpe?4OB;Ukdx8cJ9fT@E^iYX0g~M!-qu||SKFIp=ETf0x*sart)Irne^o8zjf>;-*}5&lXcv>4Rq8B`=^%TP3%ekp74nv8 z)iV5Xg{&NRFUNVrPbnErl_>Q+j@L&}c*0pk%OG?1WGNuu1vk|y7a+BxiT*+8pr@pr zK752uXkd3(mhs#8@nYo#sdq)zB;5g;u1OmB3H}p=F?bMpSm|QB_F{;(aTF&0L_*^G z;H{HzhA0uk&@@npd}vYik!}osVpkeXDJq0t{CA;d$EDaDC>Pqhfi{Srl%`A@1nmwg zbs}IdMI~uFZXi7LOg0B}RGK!8Nul9@e1YN`ThY)rEjq^~(J{wM!QCiwrhQnM;loHk b^BkMf2tEbt8-{Z;p?AImo7JRyUHW0n@S4@5B7O>T9 zQWPk*DC!Tz7GPU~B%>QtJ<#$zdGabb8RJU@04lchVE)B^%h! zcRqXjI-7wo-)rEYb0s^_%FB~ol$AZH=MdaD?eGrL6ipJp8YQ*nIj2l zB{XzOmWnr^`c_jcdct!f&h-VTVqhvHG}5PNOSs4$TBI%+2`9-2omWz7BtlA*m2u*~ zB4rbCN4u`4aO@3;!iDNJ1!Z}!jci7$Q+Ltu%aA9pcv~WLTp8i?Y4HyZ2}Yp~=CQ!W zcl9S~_Dr-mg-X5*UG1dS;#i}-%@vZV-Hpeb14b_?{JR&59_hYA)!VuG zprkZEkVV8<)JWwTj2${FlCRT>#G|;7d+V$q<+11-$UW%5KG=q2f zQIa>tCsW|Psi@J`g}Ll5&R`<}|MPqoZT*44=!ERcY$b*;)(ZHFd2d{>n*zO^k#9}# zJE7q!^_x21MU0aEljQj!-GnjwLkVNBwQKUVxKj_!a65_pD2&r!zlOzOolM9Bog`lz z`%+ua|2jPWy==IsJ(ByIgDu18DGt_~lr696Ap4L@w^E^z>KTo0kUl)AO6DEa;28QV z6q1Q#VP3exPoNQ`i9B%BaS;?Pt1 zPcrXm7R*p?JDl$18Hq-b!26DEp26VWp6Gq0G(A)Z>u&Ge)q39<7IbJ!g||j z(srk5NlF{8l7N7ytHvH2FklUEWSi1V`|&$A&?dRleb_@&I6nS-&i8%CxTyp80qlYV zw!yvs@C?b?kKw`Jc;5i{8hWarWG$0avm6d5s91fxZD}!?v|KsFjn}YSY&~+B zo6cdmz$KMQe$-GfomIRop=VTA2%t38oq|G&270Zf%UfJK9BIj1iy1%ff-v@D;x6F= zn*5O#ema}aRVAcOzfX$@{(&)8i?+N9H9V67YLQXRMQa!TgbBm&aus@EQoSYGQtrKY z75QP}2fL}ubZql~wU<=vI*}`&FO=8xz-rI}#nXUW?w}B|p;|%C%uxrUCaXnHa8Vph zLu#Nau;n3JNl4OSna2^7rwxhV#f`jchE*r>!XQfg z-6JgbkFi4{b~Fqfx>A`*`ejJ|t!&U7ZYG*v?Y31AK1crJIw7k`GDtsU!rpww$$v4e z8ixN|Axq*OB#te&gIY+2Qz8o8Q^`Jo!Z+jRp?KSqae=uFGE|KZLkfUXkK=*+cLBkj zlD7Kv30k4eaI|*c){9o_#V%Pa{f(bI8&V$pWapui9)buK5H7IO)qb;xAlye`5PKsD zvFE{J69#5qb)O4{Il>=0j$=qY0^ocFpm$Qn+_4k)hiUNB^3!}o)@emFs2VY*>R(Cb~D fL&;y50RWnzJFKcB29B0yQ?2A*?19m(7Y6_UAKl%t literal 0 HcmV?d00001 diff --git a/tools/man/immudex-motd.1.gz b/tools/man/immudex-motd.1.gz new file mode 100644 index 0000000000000000000000000000000000000000..d10fa8b160e7f8906d9ee868b6999ac1a1f1cf42 GIT binary patch literal 789 zcmV+w1M2)AiwFoi$8c!?18Hq-b!26DEp2afWG*oPjZ{rwg=c@y+3b63uoSkPu_*cymSeCwc0F#+vzGy7ce=S zz~sAVJE0G7etQ0qj^#D=)KYHkeVytaq3+Nb?Nxlr|dlm?@uEw^f~mW6BAL&hAKw6PBy}LCb1q`_H?H z8b409&(P*GXQ}7PcHT#0v2XeCgzJo+nVrx$D^xyv(VZtg&xmGU<3Jlc^oO^3Nm+2~ zucA@h3qlrmR3MmM*O2UQ(q$O4A6iE|m!`n$5L}8rr^)*~>u9FFiaj!JB ztg8%I1z(2bZ&f2?O-h@uJ!~FEcQLu^~(c|(!bG~2IU56%P`Ea@>7nuq=}I>qK)OSX4!;f=AvI0r;WM<#0^Um#=|vGUJJr<%RPr7j9z>qgqPUhG TDQLhfj!M}-!md=lRs{e6VlRiiHJlBB<087_mYyGbP}`$+C?CXBF}xDa~Llfz-<7l zAckdd>)$;=yznEq^B?Bl0r&>?R71f8Q`E2wwnr#g)m+t7z@<0&(fi~PFJ6GZTyAdX zUq|8e_92-427}8143<=-C0t!xUE>R{>o#MDQA4vzrq6i#0#`ShDVWI`@iILiUbKMK zbU7#A?oLL)%?Aw>^qw0;)v4l*@gOd_?q7z$b1)@S3~;TM_%tQvDFuU69UGHz{R{=) zF^iMprvi6K{3WGkcImtcvjJ_WG8$yV1Q!LAy!Kpv(bFmjBR?YE4SbU(`8~<~WH=hx z9wp->U;hE8r5#h6OVO=5pxb#gTl-<`2P^Xb6i5C`aWKsdQ$)8Z(>iaf(?^VKKsR(R zEHZAXxu6y7xya-mAEt!a<1J{0cx{6TkuGNTDr7BNVH(MWanVodl?*D{iWJKNo=O2+ zxW%nBM%JXEf>lGuzlR&0o`Da8z5RnjPFTaQP&id$_*NY3Jm3`V6YJ7wNY9t#@c&!)nWV+6XDJLbI$07-t6jFL{g`I>~P>#A)t z&V?5LaPFk=^U;p7uBSFGcB$Vo1lpQXs!j~DIVxV1MtA;Vtv7OkoO6s@t;V`Uf{d+1 z^tg|jjO?q|h{9S*NTOq1aq&DvhVa5E^e@u#{sys=qsD?1+u^WYK!YA@*a;tHvI#<-8al@{~=+&I`t;l9JKoWPEx3!(?*x`SaDMYcFH^ z*~o@`y_?M^y?=l^b7BKc4c}2CRoCU|CSC+<@~F5mm`KNhrO;?l*1hCc0l|}s3UmBo z#SC_k?%Z;|o-L-UczWYM`0*3c0~r>t<|wGUU=33Ur&#E0^DtdQxLJomH1B&5&F3(E zh=KuTi8-|BVVO)@E9Z{W2>;$CX!U|(Gri#Ktr4?>6$7q|mR6X!?=CZU8rO-ni+7OF zp9)3M^m}_m52}vVNDR`-VjF8A3SG@GcPE^^$MeGz_#0F&42dpfTV?K_0p~(AwbpA# W+oPb*pe^?Kl0N~CIPVlD2><{$N=|A3 literal 0 HcmV?d00001 diff --git a/tools/man/immudex-pl.1.gz b/tools/man/immudex-pl.1.gz new file mode 100644 index 0000000000000000000000000000000000000000..80506dfccfe7e10485ca22f5ab6e9c6224b34e17 GIT binary patch literal 1086 zcmV-E1i||siwFqT$8c!?18Hq-b!26DEpTiuF#vT{O>g5i5WVwPOnu4%vFs#^MT>2U zI*t;nur0xou^Uu9&=MsPkw}50{Bh}T?~sxcZ`vM`m=n(9%$xVdUOIxu5Y}M=tMD;+ zdVypS#PAd>{ht5=0|%<1WP&MbSPr`rRIF}q8!F(&`}~V{=MgViK(JbEAN}v+XbGd6 z5sdzzqNC~rx6|7%c;rpfFBp-{4MAMuwqp39A2)?pL}G4USY9fJIs7D0MF9`AY1B#g&}R1G!vx1XnN zI!TL-=XvhN&GhFX@)w+QY?~iKd!{s(Vu-q+tz&HKa6wngqaV*VL6ijH`rJ-x`;q_A zj0bV1cxxb24Efd2FwuSJ@EQ&k&nl83Khp{m3ua<=CgdneI0o-=I85km^g z5H&7?3D+Dq8VO)oXHZ1FZbK&%lx-4`w0KCzX|Gk(5)9{FvlzH{g1gkNlP$3(>Dxl5 zx@_+f&*>PY87X83%i&gJTGNvKaP6$^x0_t_FJlns4oQUJ$~Dl=R7kC*E0gU>@v=gC zT|;(noZG=_C!JOkU7-Xgxy&XPc9`_~cNS(x+O##ZZAHZI4;O>7RQBlp_t`2sKXB=- zzb9_u>9|KVN7K_%^8J|{2Zap%V1a)Dy-fh#xxc^rGHt<|SerTg|HbYz(Mm3(&+aRq zZIeZ~A>R~7$qTzikHu8oHT{1_8$Sv+Nw9u~hwXDbA{*99WnkBp+G_CE{_^i-LwW6G zviZ%W&BN$r6Fe^xGCz+2(yL6mtqTp>ni<_N{NqVg5^twSV&~885@o1sS(pRP<|}B{ z+gZy_Wz2caPS&ogOp2Ua6`+BvgOoG+IwY8>s4%Cm&ZEqdVe?l0X1>+_39@>-Aq;#0#P`?j@iXMa1r%I(H&*8<1uhy3P)B0BGH+7^)=y0GP&aaEAu~ E06K;ZhyVZp literal 0 HcmV?d00001 diff --git a/tools/man/immudex-run.1.gz b/tools/man/immudex-run.1.gz new file mode 100644 index 0000000000000000000000000000000000000000..3cab8058f261dc265cf75d7396b40ea4ba63e804 GIT binary patch literal 909 zcmV;819JQyiwFqRmgH#w18Hq-b!26DEpl~kE-?UYRMBqZHV}O0S8V-qeTdaut|(Ak zaj0S|u~6F*BpG+XsVHcPl8H#9KvH)6_uZxJ;F1=I5oozPoSmIzP|jePz&0shlPu$h zCn#2N4iE7<`UxO*aN-tPp@iX1)UZFpL3G1i&lP+Oe*Hc86tJLJLA=@QmeIF)w%fw& z;|yluU}Oh(w|BqchwS^Y7B6!%Qq?U+c2*cz=pJ!uJ7Yn-(R|n@MVxF|agY}5M4oq@K3Q=3T?;4a z4lrn`NY^WW&owC#z}|t;3)aEqjFxEGvYg~y8w!VfL>d7g|{dX zTT3;*z{yA_!1^1w;&}t`B6*_c(ALE@WHF}A$T*B3hlcW#Ft7549l z8u<%uyY4)BD*6^~(shKMDpK}30vajaBN~k#!WxFup_NCWuH^rlU(QSKK$aRD{=~T# z)}ki=pM3G=C0{CBhn{;o@Vy=#T+VNRkM4l0Lc&&hI2+j>ob~L(U9n0s_7$ywlchC& zX>QG@e(G(OMQM^1@%9n!caQmuWn$3A!G3JLasQZ-|7?3MyP(qj7hkqW(x)tbTor6_ zy$#BrEA7`F-DsYLv%SE7fi^7*_GTIa{xwFBB^!6bsecA5Xm%7CO(p!kQv>9IN~_v? zA6-f=N0VUvHepz4xN_&uptJ))l2hF#$`-3|TZH%VIxe07Ll1GWjdFa{k_yDUxe=psTMMG&s@WX5QjnvsmHtFfm|@Mh4U+)!`665|Y~^B(2Z=d=R&fh*XZF&kH=>j>9P_O!UjH(sb}dOBGUr&r)Nh(Ve% jd(dN7dpA-!8oNT5(L65*Lnm-kE#YxQJ~@mcd$J}h0XrHdJbTngeFbki-y>r3!_o{B-{`US8E$X)Ic6b_T%sYjFHXd zf{AR2f2Uo?OXjfhmx1#dDjPxE3AmKuQucaavRQ>u!VvRqz~%98AS20EABW%l;W{gj@=NxuNc?(gfV# z#P<#AFXUJnUCqj_YO@!)|9W+4(R&*LSuxH=*n3amf5+@DolRz~*``0I2Y#?B8_8-v1*2Elsf!e|q-r+Mm3uBSovK9~K-LQAor z(Jj)CCspZqTQ$T_pF$ymmW4TTg^%Pd1y$Kfrzk=a*bA@$Q)au`iq#%KTA@OVUxf}K z6&L3G2tpdb1IevybsU9Ba4{hX z0`M0}=u(%|L)SF0lX=&oFoWAf|JI$b(Q-;dWMe4-1Vr1Y^k9e~ZUH0PY?6Q9fq-@|n^sDMm|;H8_W(Pw zVBv%3$FT7ibh(3gMI%_!wfhc$8aOfy1+TechVLOg!-1F0UBzm+wLg8a?`>koE1;Xr zcH#b*M(%tYx{K+W&O-OeUoXMBwZL*3B}%xvx%-SaqN>_GKTS2yTE+L%QlyF>Wtk)5 z4feO1E11g)&)92=*wG3+XXBE$=aMOeZ4E;M)?MQX8+Jb&?L0q-XhiH8yoo`6COJ(e z(`iR9`IzM4FBnVDTxlWeOSOkwxY0bMK}>ybTq_wdlNZnl=(cI3GLTF4vK9=0_N$W6 z^?O4ahR@1;Typ|xYrq_Y1|wyOom^ysm1p25p*ug&90uc5qvUU%nG0+8hqDRRF0zh; zYdex&Ig~n;r`Os+s^k%!u>S>s>Ln^CL{6^hZm#!7Mfgi@ydxY8cF|tU= zdtcJF=(L5emxsR>6%(bM$?97_Hur;FNFP@*nUBXo@*$Ibl%bO94>!8vc(J7_h@C1D zcl7a>E6zd7+#H$W5137k%5;@hWxUTr$3WBtUhBQ+*lHUfK5)gmdCw;}saS2!4^T@3 z{26I=a~n6DuN*ISW^_&C9bjomW6zE7we>@AAaIcBe7kl+2)1G1NA4g(sZKIuiwE*}SC(_lR23cei#L?2{Z?x7IRyaNN4Wth;; V`2nvfx#1%R@)uJFhq)F7008r(XL0}l literal 0 HcmV?d00001 diff --git a/tools/man/immudex-shoutcasts.1.gz b/tools/man/immudex-shoutcasts.1.gz new file mode 100644 index 0000000000000000000000000000000000000000..4f790bb275b9aecfe302120e116b70ad1f8959fc GIT binary patch literal 1070 zcmV+}1kw8+iwFo2$#7`^18Hq-b!26DEpupZb#!B4b98eqF#wfSO>g5i5WVYHOnuoc z5HnvzfnuAYisP)+#+D$-=mu2}v^27bNTNzo>lo;d?~szbNj53AhrrR09KLz)&5&gi zxCvnurmzfeg4=sY7eNBI!QK2jfWW|>YuI9giW@9obATOI?M2NSIA=fn#4ee~(gg&| z<@#p+X__p;bvpBtG=a(a1SY@nrsL`W7iSkg(x<5FuE58s-pS77TpLYU&S+t+QNc{s zl(*0mk0lFO`OCTY%7JVO*FLT5T#43z*>M9JxypAS8iT4q1Bw?yYLE)P9AqwQa=!|r zBuG4V4PPhs{>;iCJDE{O0dB1ap~PO~zGf50ue+%EDLjN2_IFG8PDX(5{-Is_l^ zu$QXPSHnN&ZkaLW)`#HA1s&R(c`}QGC=J5ZNJaLPi~q|3t%BK0=*!daDB2y9Y70Z5 zULh3bMv`JA1Qc@LRFW6K>dOvFQ6ZE{)_v-1x>0gZx-rp|5;k0uKV$mzCGqG#hjxx~?39PxU%=H+bnz zXs|$PBw`2~=Asl-dw=uPjuEJcI10=LGj|8sKs20;=kf^|Y%BL$?{9ZB4a zsp-SkA8nxzIe70@0?s2CTN7dX2EANKP1jCjS;GNl##jIO$*&dYG?nb%n3>n3u z!cR@zo(=*rQ9N1#A}__dmCB9?Yp)Z~WWJHgQT^U9!%_HRQ37T8(xTb27xy^r-@auu zHhz<}U&r+9aw>QJ$zMie#jiE%Q#)MEDw0#=5X=0*OZql`Zltd|*>ZeL=k9;^G|RiA zIsOyDFxgzr=a4E{if@GSenVPx8iyXRUfqh%*nHo^vYC!>96A0vU4*gshq7JN*k|Oi zJX4o-Pu(P*M`4@>tB-KK{+LX>7)dSzn{Mlz{&Tdqc zS`V`Kxpc1$)KWd5(KXVKopB!9sJ_R9brf3grP)){e4sMXHuhMKEyB8)w58vs5Z3vc z0i-)ruG&@T(Md%^i=iuKZ;e=2UhK>{{WZu=-n7;KW{Tt7gZDdX&(H~iwUTh92K05Q( z_64p8dr;aET>^@G0wMuSj2=()XK3Y`OfevZItIDP~a3G#Q)0}qmkT`M=x5t8L o%>P2ba$#g;E-?UgRNrr-I1qmKUon@buGDbd z?rEjdo=!&-+8{Ln0nu%B^uaL(tODk2(>DM8jSaNfZ0{io9?v&FzHdBUzJPTEyC{Qg zv<`0{Alrl~+=lnTF94x|7pkG+9aq%w0uD#0dDCCFw1dyyZ@+tAJmO^=2)En)I{3ca z$9IXp4q)+l0SmuZqJitH>#ukaZ95eFbvg8vq6J6v6AymSLQe;bf< z?|cc931*XKO7zA-(uZ9Xr(sIG8#qIffATWSFPBSOcK&N#CXX8g zv?HnO97?G`bE;S^x@x9H12Xx>(L{zv(xK;Suw-8-Da|K9X`V&HD+^E@6#sV+iWiTV7kvlAW1OuR8csYylh~?W* z$QN>dF=IYKBeZd(_hUZ#jMX_&jeHYgcE5xdVQQEXzX^@WT3LuvFlvy-DU$4(qeW5& z9qF1Os8}zxK<^_Q6zy1j+L0UfcM41`G_+i6jN_g9eL!)CI<}4?pa(e^n0zjQ4yMN9 zY^zN6M+hk-lr-S^0Nw-muFZINYZaMyWQdPt|D3aMmg{6w) zf{>+o!4dt2q;Wg3)0DYMwH?@J!(>+o+pYEhGB?$T-$ewGNUJ%1gH9UYc1SI58zifZ zzsvla@IK5Q08O`HwhL0+nNb2h#6EVq+TZ&L#QP+U(qJMX4Fd4*(`bQJVhuynKq1-C z^3IHOWB892n3ayAHu%E@jN6z(#$T;YXzvEvVBukD`*Uct6O`zqNWGHy(T*=354aL= zz(l7FZ5kWfz!4b&94mh52xH@BCSDlN!GDVC#WB&f9Gb$tWg7x0V>oSA+bK%laD0VR Oz2raRry@Od1^@v2lcdN1 literal 0 HcmV?d00001 diff --git a/tools/man/immudex-version.1.gz b/tools/man/immudex-version.1.gz new file mode 100644 index 0000000000000000000000000000000000000000..f3e00390e8dc1169c4a457621c723df443292879 GIT binary patch literal 705 zcmV;y0zUm8iwFo=oaAW$18Hq-b!26DEp}ycb7^mGE-?UYQ&Df5Fc5zCuekBFhlaG> zv}x)zjU=?O)BpmqEgE}phyiP0Bippizuy^>YU?Ty5g+$`_kDL~zwlrcLloz*iC6S? z2l<+2a7*vQHvrVaBQsEQ$u+b50Q(~}yzQ?$CgI9||H*&n6F*-A-E6k2@WozXh!@6yugv4MMaB?+02P9=0%nMf^+DUGDSzCRhTVPn&fDJWTh6p z1?dKw2&5TBMfxh7&PJk zopzSm-<~d zef82XiPM}$cd*#rWgba+ue62zP#drcK2OPC>yC-m$8LTZVaqt#rSxu{ljYeU6mLs4 zZWDA$|K`?o9ACcDHSzbF>3{+ zZ@A_TAH@Wbnn`=S0jVtT2ejpIn=oCjgD4Lc^q%HBz|bwtqcFq!5~mPA5}?!N_C81< z*``UHg{LNDVFPCspk>M;B8e(V#W9c{ze`fehnw!94}l|+_uRvC&%KhDjo>L3A2ve6DzNdvw52{+|Oz?_*FV6&HO5Kf{sOEDpwlv}BLI_|h?HVERkgOVc~b zE4r!dQ*F{2zS^u1o30f~@uz*Dl0l0wX!xFgN$;59(0004&OkWnzI3$W`arCB78Q7d z-Od7R!ehzKD(avc^ zvf?tEWP^Xv7mpT3_dXf7Kjz$9#HZ%LG9ig8@lj>5)`OJh#@0_Stz(_zJ?Aih50Rhe zXlfFf&;iRHc@gA#=hYz5R7a8D%4}Puh)HCM2f9S*YNiz3v6lq<_IW(X8&@P;1iBHX z$nMAqX2P)}?d5aP9wgtD=xQs!|7p62=DySaxapo1V_b=XkKviruCRMvRe)FOn~Q=u zH%MHRyihTqla-} zvpI*DL3Lu9ITxK&%(%4eHWkke!=d56&Ba~f`?!2Hu^b~u(eSd(WIH(LZDmJ}+cW?h z6GkhACTiP?Gwd#GJXg`_DxHNf`CD?W5fNW@_r;lfQ@h_=go2Fn|`T-_ui60=rF z4V!MK%y9VC9sXli7m!UmGq4zi!-lI`)2$g1~lewF1#*=2=<)Ybg<6oS({V2isWk@hm(ncTNLnAaW zBb13-`0>?jx=g2+!8}OUrkg(o>C#W|)gQ(%g=mU5y;{wuF+{643KPE(WP YI6F*Xdl0meW&>ODABO}2hB*lU0IoecKL7v# literal 0 HcmV?d00001 diff --git a/tools/man/library.sh.1.gz b/tools/man/library.sh.1.gz new file mode 100644 index 0000000000000000000000000000000000000000..ad0785fb93926122d0ae865c5b53280cce6f34a3 GIT binary patch literal 930 zcmV;T16}+diwFpVqU31+18iwxa$$0LE^}xuF#ugu?`z{Y5dE&dVlH2953){wEDLvg z9OtBIBS>RoI~;*PknOQ8*0zi!x6OZlBRNgWeh9&unWvdI?XK1h;?mE%KZSd{S;67kMwt+2QCSh_2(hbaRXD|x~ zEnB#|x%*BZt<1I1=fE^nb3+GvgBn(Sb|ZbE|487ew;5xqZh3zM7zjkzxV(>E{;{=OCQ$hD&cX)qaDi{ zX}}a(4i-v<26|;>Uk5b&?*_y#ZM=72U^JAQpP8}^O=Fd6&D`-LyFqCS*1=Y?MUcH! zAT1bds{o#fxk1zjmC{qvbT=y~kfVdG#Y^N-m zzlg~!W;NPViMbU0i3abB=F1;!b;T|{aH0Aaq$VGH9(|VBi*D-aayHe1JHEnpqG)7~ zC!sy+{vD2Djxw5*zB=K#qQU%h_jf=U-@hHd=EQ-kl$PimH3lBHXt4NsDy6YnoeI)~ zv;@t~N3$gsvP41?7S3vP0a{B-dNdYj4CAlsy0OGJkQKOnPzL=bI1mkr(v@mTBkJd$ zc?XTu4DIt~4t|xdlJIY*=7cGvq^??}4RsZ3+NHVPnyHyKfUVP^M&BafbNoudYrOc(W@k}PFvpQ*@TB<0#4a?g^Irr*y^=^a{?$ns%t*??mUUy{_@z+Z_0TE(6Rqix{sN_I7UX)enzMyQB+FLz zl}7zR#&Fxki-|7+9nMZsB-Bz)lmT3c+(nEkNuc)p!`T(^g~oDq&+BBh33pkz=%$ht6GcB_^s2&fSQ&rdt(K?I|OSd zFo9>?>jee? E0Eu|UfB*mh literal 0 HcmV?d00001 diff --git a/tools/misc/immudex-hostname.service b/tools/misc/immudex-hostname.service new file mode 100644 index 0000000..c65f2e3 --- /dev/null +++ b/tools/misc/immudex-hostname.service @@ -0,0 +1,9 @@ +[Unit] +Description=Set hostname based on Hardware model +Before=display-manager.service +[Service] +Type=OneShot +ExecStart=/usr/local/sbin/immudex-hostname +RemainAfterExit=yes +[Install] +WantedBy=multi-user.target diff --git a/tools/misc/motd.conf b/tools/misc/motd.conf new file mode 100644 index 0000000..1b62c4c --- /dev/null +++ b/tools/misc/motd.conf @@ -0,0 +1,18 @@ + +#MOUNT_POINTS - turning on file system space level monitoring. Mount points +#puted to variable must separated with space and $ on end up."; +MOUNT_POINTS="/$ /home$"; + +#OPTIONS - storage triggers for additional jobs, which script can do. At this +#moment we have: +#cryptparts - file system space level monitoring for LUKS parted disks, +#weather - put one line current weather status for declared location. It's +#requires LOCATION option configured. +OPTIONS="cryptparts weather"; + +#FOOTER - custom information printed before script end his execution. It could +#be anything. +FOOTER="morketsmerke.org @ 2026 https://github.com/xf0r3m/immudex" + +#LOCATION - not required option, it will be used to prints weather information +LOCATION="Warszawa"; diff --git a/tools/sbin/immudex-create-media b/tools/sbin/immudex-create-media new file mode 100755 index 0000000..1441f9d --- /dev/null +++ b/tools/sbin/immudex-create-media @@ -0,0 +1,137 @@ +#!/bin/bash + +GREEN="\e[32m"; +YELLOW="\e[33m"; +ENDCOLOR="\e[0m"; + +function help() { + echo "immudex-create-media it's script used for write iso image to usb drive."; + echo "Script writes .iso file to usb stick - make it then bootable. This" + echo "script prepare usb disks for 32-bit EFI systems." + echo "Superuser (root) privileges are required."; + echo; + echo "Usage: immudex-create-media [--help] [--version] [--i386-efi --disk=usb_disk --isofile=immudex.iso] [--nuke --disk=usb_disk] --disk=usb_disk --isofile=file.iso"; + echo; + echo "Options:"; + echo " --disk=/dev/sdX Indicates disk device."; + echo " --isofile=file.iso Indicates iso file."; + echo " --i386-efi --disk=/dev/sdX immudex.iso Creating 32-bit EFI bootable usb drive with iso image. (Compatibile with immudex images only.)"; + echo " --nuke --disk=/dev/sdX Write 0's to 1st megabyte of disk, wiping partition table."; + echo " --help Print this message."; + echo " --version Print information about version, author and copyrights."; + echo; + echo "Exmaples:"; + echo " immudex-create-media Print this message."; + echo " immudex-create-media --disk=/dev/sdX --isofile=file.iso Writes iso file to usb stick, made it bootable."; + echo " immudex-create-media --i386-efi --disk=/dev/sdX --isofile=immudex.iso Create 32-bit EFI bootable usb stick with immudex."; + echo " immudex-create-media --nuke --disk=/dev/sdX Writes first MB with 0's, deleting partition table"; + echo; + echo "Report bugs to "; +} + +function version() { + echo "immudex-create-media 1.0"; + echo; + echo "Copyright (C) 2026 morketsmerke.org"; + echo "This is free software; see the source for copying conditions. There is NO"; + echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."; + echo; + echo "Written by xf0r3m."; +} + +if [ $UID -ne 0 ]; then + echo "Permission denied!"; + help; + exit 1; +fi + +if [ "$1" ] && [ "$1" = "--help" ]; then help; exit 0; fi +if [ "$1" ] && [ "$1" = "--version" ]; then version; exit 0; fi + +if [ "$1" ] && [ "$1" = "--i386-efi" ]; then target="i386-efi"; shift; fi +if [ "$1" ] && [ "$1" = "--nuke" ]; then target="nuke"; shift; fi +if [ "$1" ] && [ "$(echo $1 | cut -d "=" -f 1)" = "--disk" ]; then + disk=$(echo $1 | cut -d "=" -f 2); shift; +else + help; + exit 1; +fi +if [ ! "$target" ] || [ "$target" != "nuke" ]; then + if [ "$1" ] && [ "$(echo $1 | cut -d "=" -f 1)" = "--isofile" ]; then + iso=$(echo $1 | cut -d "=" -f 2); + else + help; + exit 1; + fi +fi + +if [ "$target" = "i386-efi" ]; then + echo -n "Writing zeros to 1st megabyte on disk..."; + dd if=/dev/zero bs=1M of=$disk count=1 > /dev/null 2>&1; + if [ $? -eq 0 ]; then echo -e "[${GREEN}OK${ENDCOLOR}]"; fi + + echo -n "Creating MS-DOS partitionig scheme on disk..."; + parted $disk mklabel msdos > /dev/null 2>&1; + if [ $? -eq 0 ]; then echo -e "[${GREEN}OK${ENDCOLOR}]"; fi + + echo -n "Creating FAT-32 partition..."; + parted $disk mkpart primary fat32 1 100%Free > /dev/null 2>&1; + if [ $? -eq 0 ]; then echo -e "[${GREEN}OK${ENDCOLOR}]"; fi + + echo -n "Creating VFAT filesystem on partition..."; + mkfs.vfat ${disk}1 > /dev/null 2>&1; + if [ $? -eq 0 ]; then echo -e "[${GREEN}OK${ENDCOLOR}]"; fi + + echo -n "Creating /mnt/usb directory..."; + mkdir /mnt/usb > /dev/null 2>&1; + if [ $? -eq 0 ]; then echo -e "[${GREEN}OK${ENDCOLOR}]"; + else echo -e "[${YELLOW}Directory exist!${ENDCOLOR}]"; fi + + echo -n "Mounting VFAT partition on /mnt/usb..."; + mount ${disk}1 /mnt/usb > /dev/null 2>&1; + if [ $? -eq 0 ]; then echo -e "[${GREEN}OK${ENDCOLOR}]"; fi + + echo -n "Instalation GRUB on disk..."; + grub-install --target=i386-efi --efi-directory=/mnt/usb --boot-directory=/mnt/usb/boot --bootloader-id=boot --removable > /dev/null 2>&1; + if [ $? -eq 0 ]; then echo -e "[${GREEN}OK${ENDCOLOR}]"; fi + + echo -n "Creating /mnt/iso directory..."; + mkdir /mnt/iso > /dev/null 2>&1; + if [ $? -eq 0 ]; then echo -e "[${GREEN}OK${ENDCOLOR}]"; + else echo -e "[${YELLOW}Directory exist!${ENDCOLOR}]"; fi + + echo -n "Mounting iso file on /mnt/iso..."; + mount $iso /mnt/iso > /dev/null 2>&1; + if [ $? -eq 0 ]; then echo -e "[${GREEN}OK${ENDCOLOR}]"; fi + + echo -n "Copying grub config files to the disk..."; + cp /mnt/iso/boot/grub/font.pf2 /mnt/usb/boot/grub > /dev/null 2>&1; + cp /mnt/iso/boot/grub/grub.cfg /mnt/usb/boot/grub > /dev/null 2>&1; + if [ $? -eq 0 ]; then echo -e "[${GREEN}OK${ENDCOLOR}]"; fi + + echo -n "Copying immudex files to the disk..."; + cp -r /mnt/iso/live /mnt/usb > /dev/null 2>&1; + if [ $? -eq 0 ]; then echo -e "[${GREEN}OK${ENDCOLOR}]"; fi + + echo -n "Creating empty DEBIAN file..."; + touch /mnt/usb/DEBIAN > /dev/null 2>&1; + if [ $? -eq 0 ]; then echo -e "[${GREEN}OK${ENDCOLOR}]"; fi + + echo -n "Umounting all mounted filesystems..."; + umount /mnt/usb /mnt/iso > /dev/null 2>&1; + if [ $? -eq 0 ]; then echo -e "[${GREEN}OK${ENDCOLOR}]"; fi + +elif [ "$target" = "nuke" ]; then + echo -n "Writing zeros to 1st megabyte on disk..."; + dd if=/dev/zero bs=1M of=$disk count=1 > /dev/null 2>&1; + if [ $? -eq 0 ]; then echo -e "[${GREEN}OK${ENDCOLOR}]"; fi + +else + echo -n "Writing zeros to 1st megabyte on disk..."; + dd if=/dev/zero bs=1M of=$disk count=1 > /dev/null 2>&1; + if [ $? -eq 0 ]; then echo -e "[${GREEN}OK${ENDCOLOR}]"; fi + + echo -n "Writing iso image to the disk..." + dd if=$iso bs=1M of=$disk > /dev/null 2>&1; + if [ $? -eq 0 ]; then echo -e "[${GREEN}OK${ENDCOLOR}]"; fi +fi diff --git a/tools/sbin/immudex-crypt b/tools/sbin/immudex-crypt new file mode 100755 index 0000000..38fd47c --- /dev/null +++ b/tools/sbin/immudex-crypt @@ -0,0 +1,202 @@ +#!/bin/bash + +function help() { + + echo "immudex-crypt is script used for listing, open, close and create crypt_LUKS partitions."; + echo "Script creates 'immudex-crypt' mount points, every mount point end up with 'index'."; + echo "Index is order number of opening crypt_LUKS devices via 'immudex-crypt' The first"; + echo "opened device will have index equal 0, second = 1, and so on and on."; + echo "Superuser (root) privileges are required."; + echo; + echo "Usage: immudex-crypt [--list] [--create=/dev/partition] [--open=crypt_LUKS_device] [--close=index] [--help] [--version]"; + echo; + echo "Options:"; + echo " --list Prints list of opened and available crypt_LUKS devices."; + echo " --create=/dev/partition Preparing device for crypt_LUKS."; + echo " --open=/dev/crypt_LUKS_device Opening and mount crypt_LUKS device (create mount point, if not exist)."; + echo " --close=index Unmounting and close opened crypt_LUKS devices."; + echo " --help Prints this message."; + echo " --version Print information about version, author and copyrights."; + echo; + echo "Examples:"; + echo " immudex-crypt --list List available crypt_LUKS devices in the system."; + echo " immudex-crypt --create=/dev/sdX Create crypt_LUKS device from given partition."; + echo " immudex-crypt --open=/dev/sdX Open given crypt_LUKS device (with mounting file system, of course)."; + echo " immudex-crypt --close=0 Close first opened crypt_LUKS device in the system."; + echo; + echo "Report bugs to "; +} + +function version() { + echo "immudex-crypt 1.0"; + echo; + echo "Copyright (C) 2026 morketsmerke.org"; + echo "This is free software; see the source for copying conditions. There is NO"; + echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."; + echo; + echo "Written by xf0r3m."; +} + +function list() { + + mapperDeviceList=$(ls /dev/mapper | grep 'immudex-*' | awk '{printf $1" "}'); + + echo "=============================================================="; + echo -e "Opened devices:"; + echo "=============================================================="; + echo -e "Device:\t\tMapper name:\t\tMount point:"; + + if [ "$mapperDeviceList" ]; then + for dmDevice in $mapperDeviceList; do + if cryptsetup status /dev/mapper/${dmDevice} > /dev/null 2>&1; then + mountPoint=$(df --output=source,target /dev/mapper/${dmDevice} | tail -n 1 | awk '{printf $2}'); + device=$(cryptsetup status /dev/mapper/${dmDevice} | grep "device" | awk '{printf $2}'); + if [ "$mountPoint" ] && [ "$mountPoint" != "/dev" ]; then + echo -e "$device\t /dev/mapper/${dmDevice}\t$mountPoint"; + else + echo -e "$device\t /dev/mapper/${dmDevice}\tNot mounted"; + fi + fi + done + else + echo -e "No opened crypt devices was found"; + fi + echo "=============================================================="; + + luksDevicesList=$(blkid | grep 'LUKS' | cut -d ":" -f 1 | awk '{printf $1" "}'); + + echo "=============================================================="; + echo -e "crypt_LUKS devices:"; + echo "=============================================================="; + echo -e "Device:\t\t\tSize:"; + + if [ "$luksDevicesList" ]; then + for lDevice in $luksDevicesList; do + lDeviceSize=$(lsblk | grep "$(basename $lDevice)" | sed -n '1p' | awk '{printf $4}'); + echo -e "$lDevice\t\t$lDeviceSize"; + done + else + echo "No crypt device was found"; + fi + echo "=============================================================="; +} + +function open() { + + if [ $# -lt 1 ]; then help; exit 1; + else + index=$(ls --hide=control /dev/mapper | grep "immudex-crypt" | grep -o "[0-9]*$"| tail -1); + if [ "$index" ]; then + index=$((index + 1)); + else + index=0; + fi + cryptsetup open $1 immudex-crypt${index}; + mkdir -p /media/${USER}/immudex-crypt${index}; + lastField=$(ls -l /dev/mapper/immudex-crypt${index} | grep -o ' ' | wc -l); + dmDevice=$(ls -al /dev/mapper/immudex-crypt${index} | cut -d " " -f ${lastField}- | cut -d "/" -f2); + if ! $(file -s /dev/${dmDevice} | grep -q 'ext4'); then + echo "Could not determine filesystem of unlocked device."; + echo -n "Format this device to ext4? (y/n): " + read format; + if [ "$format" = "y" ]; then + mkfs.ext4 /dev/mapper/immudex-crypt${index}; + else + echo "Refuse to mount."; + cryptsetup close immudex-crypt${index}; + exit 1; + fi + fi + mount /dev/mapper/immudex-crypt${index} /media/${USER}/immudex-crypt${index}; + if [ ! -e /ic${index} ]; then + ln -s /media/${USER}/immudex-crypt${index} /ic${index}; + fi + fi + +} + +function close() { + + if [ $# -lt 1 ]; then help; exit 1; + else + if [ $1 -ge 0 ] 2> /dev/null; then + cryptfsName="immudex-crypt${1}"; + elif echo $1 | grep -q 'ic'; then + cryptfsName="immudex-crypt$(echo $1 | grep -o '[0-9]')"; + else + cryptfsName=$1; + fi + if cryptsetup status /dev/mapper/${cryptfsName} > /dev/null 2>&1; then + mountPoint=$(df --output=source,target /dev/mapper/${cryptfsName} | tail -1 | awk '{printf $2}'); + if [ "$mountPoint" ] && [ "$mountPoint" != "/dev" ]; then + umount -R $mountPoint; + cryptsetup close ${cryptfsName}; + else + cryptsetup close ${cryptfsName}; + fi + else + echo "Given devices isn't opened crypt device or it was closed before"; + fi + fi +} + +function create() { + if [ $# -lt 1 ]; then help; exit 1; + else + cryptsetup -y -v luksFormat $1; + fi +} + +function set_ownership(){ + if [ $# -lt 1 ]; then help; exit 1; + else + mountPoint=$(list | grep "$USER" | grep "$1" | awk '{printf $3}') + owner=$(stat -c %u $mountPoint); + if [ $owner -eq $RUID ]; then + if id $USER | grep -q $RUID; then + echo "User $USER is already owner of $mountPoint"; + fi + else + chown ${USER}:${USER} $mountPoint; + fi + fi +} + +if [ "$1" ]; then + + if [ $UID -ne 0 ]; then + echo "Permission denied!"; + help; + exit 1; + fi + + #immudex-crypt RUID is EUID of sudo, which spawning immudex-crypt + if $(pidof -sq sudo); then + export RUID=$(grep '^Uid:' /proc/$(pidof -s sudo)/status | awk '{printf $2}'); + export USER=$(grep "$RUID" /etc/passwd | cut -d ":" -f1); + fi + + option=$(echo $1 | cut -d '=' -f 1); + value=$(echo $1 | cut -d '=' -f 2-); + + case $option in + "--list") list;; + "--open") if [ "$value" ]; then open $value; + else help; exit 1; + fi;; + "--close") if [ "$value" ]; then close $value; + else help; exit 1; + fi;; + "--create") if [ "$value" ]; then + create $value; + open $value; + set_ownership $value; + else help; exit 1; + fi;; + "--help") help; exit 0;; + "--version") version; exit 0;; + *) help;; + esac +else + help; exit 1; +fi diff --git a/tools/sbin/immudex-hostname b/tools/sbin/immudex-hostname new file mode 100755 index 0000000..0788fc7 --- /dev/null +++ b/tools/sbin/immudex-hostname @@ -0,0 +1,58 @@ +#!/bin/bash + +function help() { + echo "immudex-hostname it's a main executional script for immudex-hostname"; + echo "service. The script job is to change set appropriate name for this"; + echo "host based on computer chassis and 7 last chars from boot ID." + echo; + echo "Usage: immudex-hostname [--help] [--version]"; + echo; + echo "Options:"; + echo " --help Print this message."; + echo " --version Print information about version, author and copyrights." + echo; + echo "Examples:"; + echo " immudex-hostname Set apropriate hostname, usually executed by systemd."; + echo " immudex-hostname --help Print this message."; + echo " immudex-hostname --version Print information about version, author and copyrights."; + echo; + echo "Files:"; + echo " /usr/lib/systemd/system/immudex-hostname.service Systemd unit file, to run immudex-hostname script as a service."; + echo; + echo "Report bugs to "; +} + +function version() { + echo "immudex-hostname 1.0"; + echo; + echo "Copyright (C) 2026 morketsmerke.org"; + echo "This is free software; see the source for copying conditions. There is NO"; + echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."; + echo; + echo "Written by xf0r3m."; + +} + +if [ "$1" ]; then + if [ "$1" = "--help" ]; then + help; + elif [ "$1" = "--version" ]; then + version; + fi +else + if [ $UID -ne 0 ]; then + echo "Permission denied!"; + exit 1; + fi + + bootID=$(sed 's/-//g' /proc/sys/kernel/random/boot_id | cut -c 26-33); + if hostnamectl > /dev/null 2>&1; then + hName="$(hostnamectl | grep 'Chassis' | cut -d ":" -f 2 | awk '{printf $1}')-${bootID}"; + else + hName="$(dmidecode -s chassis-type | head -1 | tr [A-Z] [a-z])-${bootID}"; + fi + + hostnamectl set-hostname $hName; + sed -i "s/immudex/${hName}/g" /etc/hosts; + echo $hName | sudo tee /etc/hostname > /dev/null; +fi diff --git a/tools/sbin/immudex-install b/tools/sbin/immudex-install new file mode 100755 index 0000000..fc07577 --- /dev/null +++ b/tools/sbin/immudex-install @@ -0,0 +1,196 @@ +#!/bin/bash + +RED="\e[31m"; +GREEN="\e[32m"; +ENDCOLOR="\e[0m"; + +function help() { + echo "it's a script for installation immudex LiveCD images on computer hard"; + echo "disk. This program runs interactivly and the one thing you need to do"; + echo "is choose a right disk for installation. That's all, but if you using"; + echo "custom images, you may need change partition size for immudex image." + echo "It's hard to imagine, how it's possible to create images bigger than 3"; + echo "GB. It would happens. More space in this partition is also needed for"; + echo "upgrades tasks. So if your image is bigger than 2 GiB, you need to "; + echo "change size of this partition before you start instalation."; + echo "Recomended size is 3 times the image size."; + echo "This script requires superuser (root) privileges."; + echo; + echo "Usage: immudex-install [--help] [--version]"; + echo; + echo "Options:"; + echo " --help Print this message."; + echo " --version Print information about version, author and copyrights."; + echo; + echo "Examples:"; + echo " immudex-install Standard execution, instalation immudex LiveCD on computer hard disk."; + echo " immudex-install --help Print this message."; + echo " immudex-install --version Print information about version, author and copyrights."; + echo; + echo "Report bugs to "; +} + +function version() { + echo "immudex-install 1.0"; + echo; + echo "Copyright (C) 2026 morketsmerke.org"; + echo "This is free software; see the source for copying conditions. There is NO"; + echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."; + echo; + echo "Written by xf0r3m."; + +} + +if [ "$1" ]; then + if [ "$1" = "--help" ]; then + help; + elif [ "$1" = "--version" ]; then + version; + fi +else +if [ $UID -ne 0 ]; then + echo "Permission denied!"; + exit 1; +fi + +while [ true ]; do + echo -e "${RED}This script will install immudex on first disk on your machine.${ENDCOLOR}"; + echo -e "${RED}It could be destructive for data placed on this disk${ENDCOLR}"; + echo -en "${RED}Are you sure that you want contiune? (y/n): ${ENDCOLOR}"; + read ans; + if [ "$ans" = "y" ]; then break; + elif [ "$ans" = "n" ]; then exit 1; + fi +done + +set -e + +function selectDisk() { + disks=$(lsblk | grep 'disk' | awk '{printf $1" "}'); + if [ $(echo $disks | wc -w) -gt 1 ]; then + select drive in $disks; do + echo $drive; + break; + done + else + echo $disks | awk '{printf $1}'; + fi +} + +if $(sudo efibootmgr > /dev/null 2>&1); then +#uefi installation + #partitioning + echo -n "Installation immudex in EFI mode ... "; + disk=$(selectDisk); + originDisk=$disk; + if [ ! "$disk" ]; then exit 1; fi + + dd if=/dev/zero bs=1M of=/dev/$disk count=1 2> /dev/null + + parted /dev/$disk mklabel msdos > /dev/null 2>&1; + parted /dev/$disk mkpart primary 1 101M > /dev/null 2>&1; + parted /dev/$disk set 1 boot on > /dev/null 2>&1; + parted /dev/$disk mkpart primary 101M 3G > /dev/null 2>&1; + + if $(echo $disk | egrep -qo "mmc|nvme"); then disk="${disk}p"; fi + + #formatting + mkfs.vfat -F32 /dev/${disk}1 > /dev/null 2>&1; + mkfs.ext4 /dev/${disk}2 > /dev/null 2>&1; + + #Setting label for partition + e2label /dev/${disk}2 "immudex" > /dev/null 2>&1; + + #mount root partition + mount /dev/${disk}2 /media > /dev/null 2>&1; + + #creating directories for efi partition + mkdir -p /media/boot/efi > /dev/null 2>&1; + + #mount efi partition + mount /dev/${disk}1 /media/boot/efi > /dev/null 2>&1; + + #mount iso image in /mnt directory + #sudo mount /dev/sr0 /mnt > /dev/null 2>&1; + + #copying whole iso image to the second partition + cp -rvv /run/live/medium/* /media > /dev/null 2>&1; + + sed -i '/set\ timeout=/ s/30/5/' /media/boot/grub/grub.cfg; + sed -i 's/bootfrom=removable //g' /media/boot/grub/grub.cfg; + + #removing unnecessary directories from second partition + rm -rf /media/isolinux > /dev/null 2>&1; + rm -rf /media/EFI > /dev/null 2>&1; + + #GRUB Installation + if [ -f /usr/lib/live/mount/medium/EFI/BOOT/BOOTIA32.EFI ]; then + target="i386-efi"; + else + target="x86_64-efi"; + fi + grub-install --target=${target} --root-directory=/media --boot-directory=/media/boot --efi-directory=/media/boot/efi --bootloader-id=debian --removable > /dev/null 2>&1; + + #Adding entry to EFI Firmware + efibootmgr -c -d /dev/${originDisk} -p 1 -L "Debian" -l '\EFI\BOOT\grubx64.efi' > /dev/null 2>&1; + + #Umount all mounted filesystems + umount -R /media > /dev/null 2>&1; + + if [ $? -eq 0 ]; then echo -e "[ ${GREEN}OK${ENDCOLOR} ]"; fi + +else +#mbr installation + echo -n "Installation immudex in BIOS mode ... "; + + #partitioning + disk=$(selectDisk); + if [ ! "$disk" ]; then exit 1; fi + + dd if=/dev/zero bs=1M of=/dev/$disk count=1 2> /dev/null + + parted /dev/$disk mklabel msdos > /dev/null 2>&1; + parted /dev/$disk mkpart primary 1 3G > /dev/null 2>&1; + parted /dev/$disk set 1 boot on > /dev/null 2>&1; + + if $(echo $disk | egrep -qo "mmc|nvme"); then disk="${disk}p"; fi + + #formatting + mkfs.ext4 /dev/${disk}1 > /dev/null 2>&1; + + #Setting label for partition is necessary for extlinux bootloader + e2label /dev/${disk}1 "immudex" > /dev/null 2>&1; + + #mount partition in /media directory + mount /dev/${disk}1 /media > /dev/null 2>&1; + + #Creating directory for extlinux + mkdir /media/extlinux > /dev/null 2>&1; + + #Instalation extlinux files in abovementioned directory + extlinux --install /media/extlinux > /dev/null 2>&1; + + #mount iso image in /mnt directory + #sudo mount /dev/sr0 /mnt > /dev/null 2>&1; + + #copying live directory from iso image to partition + cp -rvv /run/live/medium/live /media > /dev/null; 2>&1; + + #installation extlinux MBR on first sector of hard drive (whole device) + dd if=/usr/lib/EXTLINUX/mbr.bin of=/dev/${disk} > /dev/null 2>&1; + + #creating extlinux configuration file + cat > extlinux.conf < /dev/null 2>&1; + rm extlinux.conf; + + #Unmounting filesystems + umount /media > /dev/null 2>&1; + if [ $? -eq 0 ]; then echo -e "[ ${GREEN}OK${ENDCOLOR} ]"; fi +fi +fi diff --git a/tools/sbin/immudex-upgrade b/tools/sbin/immudex-upgrade new file mode 100755 index 0000000..b9a849d --- /dev/null +++ b/tools/sbin/immudex-upgrade @@ -0,0 +1,146 @@ +#!/bin/bash + +set -e + +source library.sh + +RED="\e[31m"; +GREEN="\e[32m"; +YELLOW="\e[33m"; +ENDCOLOR="\e[0m"; +root="/run/live/medium"; + +function help() { + echo "Script for searching upgrades and upgrade immudex."; + echo "Superuser (root) privileges are required."; + echo; + echo "Usage: immudex-upgrade [--help] [--version] [--check] [--upgrade] [--myversion] [--compilation-date] [--packages-upgradable [--security]]"; + echo; + echo "Options:"; + echo " --check Check there are upgrades for immudex"; + echo " --upgrade Upgrade immudex from given source"; + echo " --myversion Prints image details"; + echo " --compilation-date Prints date of image creation"; + echo " --packages-upgradable [--security] Updates apt (packages) list and prints available to upgrade packages, with --security modificator prints only pacakages from security repository branch"; + echo " --help Prints this message."; + echo " --version Prints information about version, author and copyrights."; + echo; + echo "Report bugs to "; +} + +function version(){ + echo "immudex-upgrade 1.0"; + echo; + echo "Copyright (C) 2026 morketsmerke.org"; + echo "This is free software; see the source for copying conditions. There is NO"; + echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."; + echo; + echo "Written by xf0r3m."; +} + +if [ $UID -ne 0 ]; then + echo "Permission denied!"; + help; + exit 1; +fi + +if [ "$1" ]; then + if [ "$1" = "--help" ]; then + help; + exit 0; + elif [ "$1" = "--version" ]; then + version; + exit 0; + fi + if [ "$1" ] && [ "$1" = "--check" ]; then + if check_distro_commit; then + echo -e "${GREEN}This${ENDCOLOR} is the latest version of immudex"; + else + echo -e "There is a ${RED}new${ENDCOLOR} version of immudex:"; + echo "==================================================="; + check_distro_commit --print; + fi + elif [ "$1" ] && [ "$1" = "--upgrade" ]; then + part=$(blkid | grep 'LABEL="immudex"' | awk '{printf $1}' | cut -d ":" -f 1); + if mount | grep -q "$part"; then + echo -n "Mounting iso image..."; + mount $2 /mnt > /dev/null 2>&1; + if [ $? -eq 0 ]; then echo -e "[ ${GREEN}OK${ENDCOLOR} ]"; fi + mountPointList=$(mount | grep "$part" | awk '{printf $3" "}'); + for mountPoint in $mountPointList; do + echo -n "Unlocking $mountPoint ..."; + mount $part $mountPoint -o remount,rw > /dev/null 2>&1; + if [ $? -eq 0 ]; then + echo -e "[ ${GREEN}OK${ENDCOLOR} ]"; + else + echo -e "[ ${RED}FAIL${ENDCOLOR} ]"; + fi + done + echo "Copying immudex files to the disk..."; + cp -vv /mnt/live/* ${mountPoint}/live; + if [ $? -eq 0 ]; then + echo -e "Copying immudex files to the disk...[ ${GREEN}OK${ENDCOLOR} ]"; + else + echo -e "Copying immudex files to the disk...[ ${RED}FAIL${ENDCOLOR} ]"; + fi + else + echo -n "Mounting immudex partition..."; + mount $part /mnt >> /dev/null 2>&1; + if [ $? -eq 0 ]; then echo -e "[ ${GREEN}OK${ENDCOLOR} ]"; fi + echo "Copying immudex files to the disk..."; + cp -vv /run/live/medium/live/* /mnt/live; + if [ $? -eq 0 ]; then + echo -e "Copying immudex files to the disk...[ ${GREEN}OK${ENDCOLOR} ]"; + else + echo -e "Copying immudex files to the disk...[ ${RED}FAIL${ENDCOLOR} ]"; + fi + fi + if $(sudo efibootmgr > /dev/null 2>&1); then + echo "Copying grub config to the disk..."; + if [ "$mountPoint" ]; then + cp -vv /mnt/boot/grub/grub.cfg ${mountPoint}/boot/grub/grub.cfg; + if [ $? -eq 0 ]; then + echo -e "Copying grub config to the disk...[ ${GREEN}OK${ENDCOLOR} ]"; + sed -i '/set\ timeout=/ s/30/5/' ${mountPoint}/boot/grub/grub.cfg; + sed -i 's/bootfrom=removable //g' ${mountPoint}/boot/grub/grub.cfg; + else + echo -e "Copying grub config to the disk...[ ${RED}FAIL${ENDCOLOR} ]"; + fi + else + cp -vv /run/live/medium/boot/grub/grub.cfg /mnt/boot/grub/grub.cfg; + if [ $? -eq 0 ]; then + echo -e "Copying grub config to the disk...[ ${GREEN}OK${ENDCOLOR} ]"; + sed -i '/set\ timeout=/ s/30/5/' /mnt/boot/grub/grub.cfg; + sed -i 's/bootfrom=removable //g' /mnt/boot/grub/grub.cfg; + else + echo -e "Copying grub config to the disk...[ ${RED}FAIL${ENDCOLOR} ]"; + fi + fi + fi + elif [ "$1" ] && [ "$1" = "--myversion" ]; then + #if [ -d /tmp/immudex ]; then + # (cd /tmp/immudex && git pull > /dev/null 2>&1) + #else + # git clone https://github.com/xf0r3m/immudex /tmp/immudex; + #fi + #(cd /tmp/immudex && git show $(cat /run/live/medium/live/version)) + cat /run/live/medium/live/changelog; + elif [ "$1" ] && [ "$1" = "--packages-upgradable" ]; then + apt update; + if [ "$2" ] && [ "$2" = "--security" ]; then + apt list --upgradable | grep 'security'; + else + apt list --upgradable; + fi + elif [ "$1" ] && [ "$1" = "--compilation-date" ]; then + eval $(grep '^COMPILATION_DATE' /run/live/medium/live/changelog); + echo "Image was created: $COMPILATION_DATE"; + else + help; + exit 1; + fi +else + help; + exit 1; +fi + diff --git a/versions/base.sh b/versions/base.sh index 5e39cbf..cbb4079 100644 --- a/versions/base.sh +++ b/versions/base.sh @@ -12,8 +12,8 @@ else fi cd; -if [ -x /usr/bin/git ]; then git clone https://git.morketsmerke.org/git/immudex; -else apt install git -y && git clone https://git.morketsmerke.org/git/immudex; +if [ -x /usr/bin/git ]; then git clone https://github.com/xf0r3m/immudex; +else apt install git -y && git clone https://github.com/xf0r3m/immudex; fi source ~/immudex/versions/template.sh; @@ -38,8 +38,7 @@ dpkg-reconfigure console-setup; install_packages task-desktop task-xfce-desktop; -#Usunięcie pakietów make oraz gimp - 22.11.2025; -install_packages firejail ufw cryptsetup lsof extlinux grub-efi-amd64 efibootmgr bash-completion etherwake wakeonlan cifs-utils wget figlet vim-gtk3 redshift irssi nmap nfs-common remmina python3-pip ffmpeg debootstrap squashfs-tools xorriso syslinux-efi grub-pc-bin grub-efi-amd64-bin mtools dosfstools chrony python3-venv isolinux rsync mutt openvpn netselect-apt gvfs-backends dnsutils lolcat cdparanoia icedax mc minicom; +install_packages firejail ufw cryptsetup lsof extlinux grub-efi-amd64 efibootmgr bash-completion etherwake wakeonlan cifs-utils wget figlet redshift irssi nmap nfs-common remmina python3-pip ffmpeg debootstrap squashfs-tools xorriso syslinux-efi grub-pc-bin grub-efi-amd64-bin mtools dosfstools chrony python3-venv isolinux rsync mutt gimp openvpn netselect-apt gvfs-backends dnsutils lolcat cdparanoia icedax mc minicom; cd; @@ -52,29 +51,32 @@ if [ -f /usr/bin/youtube-dl ]; then rm /usr/bin/youtube-dl; fi ytdlpVer=$(curl https://github.com/yt-dlp/yt-dlp/releases.atom 2>/dev/null | grep '.*$' | sed -n '2p' | sed 's/\ /\n/g' | tail -1 | sed 's,,,'); wget https://github.com/yt-dlp/yt-dlp/releases/download/${ytdlpVer}/yt-dlp -O /usr/bin/yt-dlp -#Polityka antyfrankensteinowa - 13.05.2024 +#Zapewnienie kompatybilnosci wstecznej dla programów korzystających youtube-dl; ln -s /usr/bin/yt-dlp /usr/bin/youtube-dl; cd; -wget https://ftp.morketsmerke.org/youtube-search/python3-youtube-search_2.2.0.deb -apt install ./python3-youtube-search_2.2.0.deb -y -git clone https://git.morketsmerke.org/git/immudex-tools; -cp -vv ~/immudex-tools/bin/* /usr/local/bin; +wget https://ftp.morketsmerke.org/youtube-search/python3-youtube-search_2.2.0.deb; +apt install ./python3-youtube-search_2.2.0.deb -y -git clone https://git.morketsmerke.org/git/immudex-only-tools; -cp -vv ~/immudex-only-tools/bin/* /usr/local/bin; +cp -vv ~/immudex/tools/bin/* /usr/local/bin; chmod +x /usr/local/bin/*; -cp -vv ~/immudex-tools/sbin/* /usr/local/sbin; -cp -vv ~/immudex-only-tools/sbin/* /usr/local/sbin; +cp -vv ~/immudex/tools/sbin/* /usr/local/sbin; chown root:root /usr/local/sbin/*; chmod 544 /usr/local/sbin/*; -cp -vv ~/immudex-tools/misc/motd.conf /etc/motd.conf; -cp -vv ~/immudex-only-tools/misc/immudex-hostname.service /etc/systemd/system; +cp -vv ~/immudex/tools/misc/motd.conf /etc/motd.conf; +cp -vv ~/immudex/tools/misc/immudex-hostname.service /etc/systemd/system; systemctl enable immudex-hostname.service; +if [ ! -d /usr/share/man/man1 ]; then mkdir /usr/share/man/man1; fi +cp -vv ~/immudex/tools/man/* /usr/share/man/man1; + +mkdir /etc/skel/.irssi + +cp -vv ~/immudex/files/config /etc/skel/.irssi; +cp -vv ~/immudex/files/default.theme /etc/skel/.irssi; cp -rvv ~/immudex/files/libreoffice /etc/skel/.config; cp -vv ~/immudex/files/firejail.config /etc/firejail; cp -vv ~/immudex/files/redshift.conf /etc/skel/.config; @@ -84,17 +86,13 @@ if [ -h /usr/share/applications/qmmp-1.desktop ]; then rm /usr/share/applications/qmmp-1.desktop; fi -cp -vv ~/immudex/launchers/*.desktop /usr/share/applications; -cp -vv ~/immudex/files/whiskermenu-1.rc /etc/skel/.config/xfce4/panel/whiskermenu-1.rc; +tar -xf ~/immudex/files/mozilla.tgz -C /etc/skel; cp -vv ~/immudex/launchers/16844254192.desktop /etc/skel/.config/xfce4/panel/launcher-5; -tar -xzvf ~/immudex/files/mozilla.tgz -C /etc/skel; - - cat >> /etc/bash.bashrc << EOL if [ ! -f /tmp/.motd ]; then -/usr/local/bin/immudex-motd +/usr/local/bin/immudex-motd2 touch /tmp/.motd; fi EOL diff --git a/versions/template.sh b/versions/template.sh index be87380..51d3083 100644 --- a/versions/template.sh +++ b/versions/template.sh @@ -39,10 +39,8 @@ function tidy() { apt-get autoremove -y; apt-get autoclean; rm -rf ~/immudex; - rm -rf ~/immudex-tools; - rm -rf ~/immudex-only-tools; - rm ~/python3-youtube-search*.deb; if [ -d ~/xfcedebian ]; then rm -rf ~/xfcedebian; fi + rm ~/python3-youtube-search*.deb; rm /var/cache/apt/*.bin; echo > ~/.bash_history; history -c -- 2.39.5