@ -0,0 +1 @@ |
|||||
|
/build/focal |
@ -0,0 +1,73 @@ |
|||||
|
#!/bin/bash |
||||
|
|
||||
|
set -e # exit on error |
||||
|
set -o pipefail # exit on pipeline error |
||||
|
set -u # treat unset variable as error |
||||
|
|
||||
|
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")" |
||||
|
PARENT_DIR="$(dirname "$SCRIPT_DIR")" |
||||
|
ISO_DIR="$(dirname "$SCRIPT_DIR")"/iso |
||||
|
|
||||
|
set +u |
||||
|
if [ -z $OUTPUT ]; then |
||||
|
. $SCRIPT_DIR/linux-live/buildconfig || exit 1 |
||||
|
fi |
||||
|
set -u |
||||
|
. $SCRIPT_DIR/linux-live/minioslib || exit 1 |
||||
|
. $SCRIPT_DIR/linux-live/config || exit 1 |
||||
|
|
||||
|
# don't change! use ./install instead |
||||
|
UNATTENDED="1" |
||||
|
|
||||
|
CMD=(setup_host build_bootstrap build_chroot build_live build_modules_chroot build_modules_live build_iso) |
||||
|
|
||||
|
# ============= main ================ |
||||
|
|
||||
|
BUILD_DIR="" |
||||
|
|
||||
|
common_variables |
||||
|
|
||||
|
if [ -f /.dockerenv ] || [ "$container" = "podman" ]; then |
||||
|
new_run |
||||
|
fi |
||||
|
|
||||
|
console_colours |
||||
|
|
||||
|
allow_root_only |
||||
|
|
||||
|
create_livekitname_install_symlink |
||||
|
|
||||
|
create_completion |
||||
|
|
||||
|
create_backup |
||||
|
|
||||
|
# check number of args |
||||
|
if [[ $# == 0 || $# > 3 ]]; then help; fi |
||||
|
|
||||
|
# loop through args |
||||
|
dash_flag=false |
||||
|
start_index=0 |
||||
|
end_index=${#CMD[*]} |
||||
|
for ii in "$@"; do |
||||
|
if [[ $ii == "-" ]]; then |
||||
|
dash_flag=true |
||||
|
continue |
||||
|
fi |
||||
|
find_index $ii |
||||
|
if [[ $dash_flag == false ]]; then |
||||
|
start_index=$index |
||||
|
else |
||||
|
end_index=$(($index + 1)) |
||||
|
fi |
||||
|
done |
||||
|
if [[ $dash_flag == false ]]; then |
||||
|
end_index=$(($start_index + 1)) |
||||
|
fi |
||||
|
|
||||
|
#loop through the commands |
||||
|
for ((ii = $start_index; ii < $end_index; ii++)); do |
||||
|
setup_build_dir |
||||
|
${CMD[ii]} |
||||
|
done |
||||
|
|
||||
|
echo -e "${BOLD}${LIGHTYELLOW}$0${ENDCOLOUR} - ${LIGHTGREEN}Command completed successfully!${ENDCOLOUR}" |
@ -0,0 +1,6 @@ |
|||||
|
#!/bin/bash |
||||
|
# Several packages need to be installed to use Dockerfile.py |
||||
|
# It creates a local container that you can use to build minios-live |
||||
|
apt install python3-pip |
||||
|
pip3 install pydocker |
||||
|
python3 ./Dockerfile.py |
@ -0,0 +1,5 @@ |
|||||
|
#!/bin/bash |
||||
|
#docker run -d --name mlc --privileged -v /build:/build local/mlc /build/slax/autoinstall - |
||||
|
docker run --rm -it --privileged -v /build:/build local/mlc /build/slax/autoinstall build_modules_chroot - |
||||
|
#docker run -it --name mlc --privileged -v /build:/build local/mlc |
||||
|
#docker run -d --name mlc --privileged -v /build:/build local/mlc |
@ -0,0 +1,68 @@ |
|||||
|
#!/usr/bin/python3 |
||||
|
# Dockerfile.py |
||||
|
|
||||
|
import sys |
||||
|
import logging |
||||
|
import pydocker # github.com/jen-soft/pydocker |
||||
|
|
||||
|
logging.getLogger('').setLevel(logging.INFO) |
||||
|
logging.root.addHandler(logging.StreamHandler(sys.stdout)) |
||||
|
|
||||
|
|
||||
|
class DockerFile(pydocker.DockerFile): |
||||
|
""" add here your custom features """ |
||||
|
|
||||
|
#d = DockerFile(base_img='ubuntu:focal', name='crims0n/minios-live-container:latest') |
||||
|
d = DockerFile(base_img='ubuntu:focal', name='local/mlc:latest') |
||||
|
|
||||
|
d.RUN_bash_script('/opt/install.sh', r''' |
||||
|
touch /.minios-live-container |
||||
|
apt-get update -y |
||||
|
apt-get install -y wget sudo debootstrap xorriso genisoimage binutils squashfs-tools grub-pc-bin grub-efi-amd64-bin dosfstools mtools xz-utils liblz4-tool zstd |
||||
|
: 'apt-get install -y patch |
||||
|
cd /opt/ |
||||
|
wget -c http://ru.archive.ubuntu.com/ubuntu/pool/main/d/debootstrap/debootstrap_1.0.123ubuntu2_all.deb |
||||
|
dpkg -i /opt/debootstrap_1.0.123ubuntu2_all.deb |
||||
|
rm -f /opt/debootstrap_1.0.123ubuntu2_all.deb |
||||
|
cat <<'EOF' >/usr/share/debootstrap/functions.diff |
||||
|
--- functions 2020-10-23 20:42:16.000000000 +0300 |
||||
|
+++ functions.new 2021-01-16 23:22:25.612064306 +0300 |
||||
|
@@ -1176,7 +1176,9 @@ |
||||
|
umount_on_exit /dev/shm |
||||
|
umount_on_exit /proc |
||||
|
umount_on_exit /proc/bus/usb |
||||
|
- umount "$TARGET/proc" 2>/dev/null || true |
||||
|
+ if [ ! -h "$TARGET/proc" ]; then |
||||
|
+ umount "$TARGET/proc" 2>/dev/null || true |
||||
|
+ fi |
||||
|
|
||||
|
# some container environment are used at second-stage, it already treats /proc and so on |
||||
|
if [ -z "$(ls -A "$TARGET/proc")" ]; then |
||||
|
|
||||
|
EOF |
||||
|
cd /usr/share/debootstrap/ |
||||
|
patch </usr/share/debootstrap/functions.diff ' |
||||
|
apt-get clean |
||||
|
find /var/log/ -type f | xargs rm -f |
||||
|
rm -f /var/backups/* |
||||
|
rm -f /var/cache/ldconfig/* |
||||
|
rm -f /var/cache/debconf/* |
||||
|
rm -f /var/cache/fontconfig/* |
||||
|
rm -f /var/cache/apt/archives/*.deb |
||||
|
rm -f /var/cache/apt/*.bin |
||||
|
rm -f /var/cache/debconf/*-old |
||||
|
rm -f /var/lib/apt/extended_states |
||||
|
rm -f /var/lib/apt/lists/*Packages* |
||||
|
rm -f /var/lib/apt/lists/*Translation* |
||||
|
rm -f /var/lib/apt/lists/*InRelease |
||||
|
rm -f /var/lib/apt/lists/deb.* |
||||
|
rm -f /var/lib/dpkg/*-old |
||||
|
''') |
||||
|
|
||||
|
d.VOLUME = '/build' |
||||
|
d.WORKDIR = '/build/minios-live' |
||||
|
|
||||
|
# d.ENTRYPOINT = ["/opt/www-data/entrypoint.sh"] |
||||
|
d.CMD = ["/build/minios-live/autoinstall", "-"] |
||||
|
|
||||
|
d.build_img() |
@ -0,0 +1,73 @@ |
|||||
|
#!/bin/bash |
||||
|
|
||||
|
set -e # exit on error |
||||
|
set -o pipefail # exit on pipeline error |
||||
|
set -u # treat unset variable as error |
||||
|
|
||||
|
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")" |
||||
|
PARENT_DIR="$(dirname "$SCRIPT_DIR")" |
||||
|
ISO_DIR="$(dirname "$SCRIPT_DIR")"/iso |
||||
|
|
||||
|
set +u |
||||
|
if [ -z $OUTPUT ]; then |
||||
|
. $SCRIPT_DIR/linux-live/buildconfig || exit 1 |
||||
|
fi |
||||
|
set -u |
||||
|
. $SCRIPT_DIR/linux-live/minioslib || exit 1 |
||||
|
. $SCRIPT_DIR/linux-live/config || exit 1 |
||||
|
|
||||
|
# don't change! use ./autoinstall instead |
||||
|
UNATTENDED="0" |
||||
|
|
||||
|
CMD=(setup_host build_bootstrap build_chroot build_live build_modules_chroot build_modules_live build_iso) |
||||
|
|
||||
|
# ============= main ================ |
||||
|
|
||||
|
BUILD_DIR="" |
||||
|
|
||||
|
common_variables |
||||
|
|
||||
|
if [ -f /.dockerenv ] || [ "$container" = "podman" ]; then |
||||
|
new_run |
||||
|
fi |
||||
|
|
||||
|
console_colours |
||||
|
|
||||
|
allow_root_only |
||||
|
|
||||
|
create_livekitname_install_symlink |
||||
|
|
||||
|
create_completion |
||||
|
|
||||
|
create_backup |
||||
|
|
||||
|
# check number of args |
||||
|
if [[ $# == 0 || $# > 3 ]]; then help; fi |
||||
|
|
||||
|
# loop through args |
||||
|
dash_flag=false |
||||
|
start_index=0 |
||||
|
end_index=${#CMD[*]} |
||||
|
for ii in "$@"; do |
||||
|
if [[ $ii == "-" ]]; then |
||||
|
dash_flag=true |
||||
|
continue |
||||
|
fi |
||||
|
find_index $ii |
||||
|
if [[ $dash_flag == false ]]; then |
||||
|
start_index=$index |
||||
|
else |
||||
|
end_index=$(($index + 1)) |
||||
|
fi |
||||
|
done |
||||
|
if [[ $dash_flag == false ]]; then |
||||
|
end_index=$(($start_index + 1)) |
||||
|
fi |
||||
|
|
||||
|
#loop through the commands |
||||
|
for ((ii = $start_index; ii < $end_index; ii++)); do |
||||
|
setup_build_dir |
||||
|
${CMD[ii]} |
||||
|
done |
||||
|
|
||||
|
echo -e "${BOLD}${LIGHTYELLOW}$0${ENDCOLOUR} - ${LIGHTGREEN}Command completed successfully!${ENDCOLOUR}" |
@ -0,0 +1,341 @@ |
|||||
|
GNU GENERAL PUBLIC LICENSE |
||||
|
Version 2, June 1991 |
||||
|
|
||||
|
Copyright (C) 1989, 1991 Free Software Foundation, Inc. |
||||
|
675 Mass Ave, Cambridge, MA 02139, USA |
||||
|
Everyone is permitted to copy and distribute verbatim copies |
||||
|
of this license document, but changing it is not allowed. |
||||
|
|
||||
|
Preamble |
||||
|
|
||||
|
The licenses for most software are designed to take away your |
||||
|
freedom to share and change it. By contrast, the GNU General Public |
||||
|
License is intended to guarantee your freedom to share and change free |
||||
|
software--to make sure the software is free for all its users. This |
||||
|
General Public License applies to most of the Free Software |
||||
|
Foundation's software and to any other program whose authors commit to |
||||
|
using it. (Some other Free Software Foundation software is covered by |
||||
|
the GNU Library General Public License instead.) You can apply it to |
||||
|
your programs, too. |
||||
|
|
||||
|
When we speak of free software, we are referring to freedom, not |
||||
|
price. Our General Public Licenses are designed to make sure that you |
||||
|
have the freedom to distribute copies of free software (and charge for |
||||
|
this service if you wish), that you receive source code or can get it |
||||
|
if you want it, that you can change the software or use pieces of it |
||||
|
in new free programs; and that you know you can do these things. |
||||
|
|
||||
|
To protect your rights, we need to make restrictions that forbid |
||||
|
anyone to deny you these rights or to ask you to surrender the rights. |
||||
|
These restrictions translate to certain responsibilities for you if you |
||||
|
distribute copies of the software, or if you modify it. |
||||
|
|
||||
|
For example, if you distribute copies of such a program, whether |
||||
|
gratis or for a fee, you must give the recipients all the rights that |
||||
|
you have. You must make sure that they, too, receive or can get the |
||||
|
source code. And you must show them these terms so they know their |
||||
|
rights. |
||||
|
|
||||
|
We protect your rights with two steps: (1) copyright the software, and |
||||
|
(2) offer you this license which gives you legal permission to copy, |
||||
|
distribute and/or modify the software. |
||||
|
|
||||
|
Also, for each author's protection and ours, we want to make certain |
||||
|
that everyone understands that there is no warranty for this free |
||||
|
software. If the software is modified by someone else and passed on, we |
||||
|
want its recipients to know that what they have is not the original, so |
||||
|
that any problems introduced by others will not reflect on the original |
||||
|
authors' reputations. |
||||
|
|
||||
|
Finally, any free program is threatened constantly by software |
||||
|
patents. We wish to avoid the danger that redistributors of a free |
||||
|
program will individually obtain patent licenses, in effect making the |
||||
|
program proprietary. To prevent this, we have made it clear that any |
||||
|
patent must be licensed for everyone's free use or not licensed at all. |
||||
|
|
||||
|
The precise terms and conditions for copying, distribution and |
||||
|
modification follow. |
||||
|
|
||||
|
GNU GENERAL PUBLIC LICENSE |
||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION |
||||
|
|
||||
|
0. This License applies to any program or other work which contains |
||||
|
a notice placed by the copyright holder saying it may be distributed |
||||
|
under the terms of this General Public License. The "Program", below, |
||||
|
refers to any such program or work, and a "work based on the Program" |
||||
|
means either the Program or any derivative work under copyright law: |
||||
|
that is to say, a work containing the Program or a portion of it, |
||||
|
either verbatim or with modifications and/or translated into another |
||||
|
language. (Hereinafter, translation is included without limitation in |
||||
|
the term "modification".) Each licensee is addressed as "you". |
||||
|
|
||||
|
Activities other than copying, distribution and modification are not |
||||
|
covered by this License; they are outside its scope. The act of |
||||
|
running the Program is not restricted, and the output from the Program |
||||
|
is covered only if its contents constitute a work based on the |
||||
|
Program (independent of having been made by running the Program). |
||||
|
Whether that is true depends on what the Program does. |
||||
|
|
||||
|
1. You may copy and distribute verbatim copies of the Program's |
||||
|
source code as you receive it, in any medium, provided that you |
||||
|
conspicuously and appropriately publish on each copy an appropriate |
||||
|
copyright notice and disclaimer of warranty; keep intact all the |
||||
|
notices that refer to this License and to the absence of any warranty; |
||||
|
and give any other recipients of the Program a copy of this License |
||||
|
along with the Program. |
||||
|
|
||||
|
You may charge a fee for the physical act of transferring a copy, and |
||||
|
you may at your option offer warranty protection in exchange for a fee. |
||||
|
|
||||
|
2. You may modify your copy or copies of the Program or any portion |
||||
|
of it, thus forming a work based on the Program, and copy and |
||||
|
distribute such modifications or work under the terms of Section 1 |
||||
|
above, provided that you also meet all of these conditions: |
||||
|
|
||||
|
a) You must cause the modified files to carry prominent notices |
||||
|
stating that you changed the files and the date of any change. |
||||
|
|
||||
|
b) You must cause any work that you distribute or publish, that in |
||||
|
whole or in part contains or is derived from the Program or any |
||||
|
part thereof, to be licensed as a whole at no charge to all third |
||||
|
parties under the terms of this License. |
||||
|
|
||||
|
c) If the modified program normally reads commands interactively |
||||
|
when run, you must cause it, when started running for such |
||||
|
interactive use in the most ordinary way, to print or display an |
||||
|
announcement including an appropriate copyright notice and a |
||||
|
notice that there is no warranty (or else, saying that you provide |
||||
|
a warranty) and that users may redistribute the program under |
||||
|
these conditions, and telling the user how to view a copy of this |
||||
|
License. (Exception: if the Program itself is interactive but |
||||
|
does not normally print such an announcement, your work based on |
||||
|
the Program is not required to print an announcement.) |
||||
|
|
||||
|
These requirements apply to the modified work as a whole. If |
||||
|
identifiable sections of that work are not derived from the Program, |
||||
|
and can be reasonably considered independent and separate works in |
||||
|
themselves, then this License, and its terms, do not apply to those |
||||
|
sections when you distribute them as separate works. But when you |
||||
|
distribute the same sections as part of a whole which is a work based |
||||
|
on the Program, the distribution of the whole must be on the terms of |
||||
|
this License, whose permissions for other licensees extend to the |
||||
|
entire whole, and thus to each and every part regardless of who wrote it. |
||||
|
|
||||
|
Thus, it is not the intent of this section to claim rights or contest |
||||
|
your rights to work written entirely by you; rather, the intent is to |
||||
|
exercise the right to control the distribution of derivative or |
||||
|
collective works based on the Program. |
||||
|
|
||||
|
In addition, mere aggregation of another work not based on the Program |
||||
|
with the Program (or with a work based on the Program) on a volume of |
||||
|
a storage or distribution medium does not bring the other work under |
||||
|
the scope of this License. |
||||
|
|
||||
|
3. You may copy and distribute the Program (or a work based on it, |
||||
|
under Section 2) in object code or executable form under the terms of |
||||
|
Sections 1 and 2 above provided that you also do one of the following: |
||||
|
|
||||
|
a) Accompany it with the complete corresponding machine-readable |
||||
|
source code, which must be distributed under the terms of Sections |
||||
|
1 and 2 above on a medium customarily used for software interchange; or, |
||||
|
|
||||
|
b) Accompany it with a written offer, valid for at least three |
||||
|
years, to give any third party, for a charge no more than your |
||||
|
cost of physically performing source distribution, a complete |
||||
|
machine-readable copy of the corresponding source code, to be |
||||
|
distributed under the terms of Sections 1 and 2 above on a medium |
||||
|
customarily used for software interchange; or, |
||||
|
|
||||
|
c) Accompany it with the information you received as to the offer |
||||
|
to distribute corresponding source code. (This alternative is |
||||
|
allowed only for noncommercial distribution and only if you |
||||
|
received the program in object code or executable form with such |
||||
|
an offer, in accord with Subsection b above.) |
||||
|
|
||||
|
The source code for a work means the preferred form of the work for |
||||
|
making modifications to it. For an executable work, complete source |
||||
|
code means all the source code for all modules it contains, plus any |
||||
|
associated interface definition files, plus the scripts used to |
||||
|
control compilation and installation of the executable. However, as a |
||||
|
special exception, the source code distributed need not include |
||||
|
anything that is normally distributed (in either source or binary |
||||
|
form) with the major components (compiler, kernel, and so on) of the |
||||
|
operating system on which the executable runs, unless that component |
||||
|
itself accompanies the executable. |
||||
|
|
||||
|
If distribution of executable or object code is made by offering |
||||
|
access to copy from a designated place, then offering equivalent |
||||
|
access to copy the source code from the same place counts as |
||||
|
distribution of the source code, even though third parties are not |
||||
|
compelled to copy the source along with the object code. |
||||
|
|
||||
|
4. You may not copy, modify, sublicense, or distribute the Program |
||||
|
except as expressly provided under this License. Any attempt |
||||
|
otherwise to copy, modify, sublicense or distribute the Program is |
||||
|
void, and will automatically terminate your rights under this License. |
||||
|
However, parties who have received copies, or rights, from you under |
||||
|
this License will not have their licenses terminated so long as such |
||||
|
parties remain in full compliance. |
||||
|
|
||||
|
5. You are not required to accept this License, since you have not |
||||
|
signed it. However, nothing else grants you permission to modify or |
||||
|
distribute the Program or its derivative works. These actions are |
||||
|
prohibited by law if you do not accept this License. Therefore, by |
||||
|
modifying or distributing the Program (or any work based on the |
||||
|
Program), you indicate your acceptance of this License to do so, and |
||||
|
all its terms and conditions for copying, distributing or modifying |
||||
|
the Program or works based on it. |
||||
|
|
||||
|
6. Each time you redistribute the Program (or any work based on the |
||||
|
Program), the recipient automatically receives a license from the |
||||
|
original licensor to copy, distribute or modify the Program subject to |
||||
|
these terms and conditions. You may not impose any further |
||||
|
restrictions on the recipients' exercise of the rights granted herein. |
||||
|
You are not responsible for enforcing compliance by third parties to |
||||
|
this License. |
||||
|
|
||||
|
7. If, as a consequence of a court judgment or allegation of patent |
||||
|
infringement or for any other reason (not limited to patent issues), |
||||
|
conditions are imposed on you (whether by court order, agreement or |
||||
|
otherwise) that contradict the conditions of this License, they do not |
||||
|
excuse you from the conditions of this License. If you cannot |
||||
|
distribute so as to satisfy simultaneously your obligations under this |
||||
|
License and any other pertinent obligations, then as a consequence you |
||||
|
may not distribute the Program at all. For example, if a patent |
||||
|
license would not permit royalty-free redistribution of the Program by |
||||
|
all those who receive copies directly or indirectly through you, then |
||||
|
the only way you could satisfy both it and this License would be to |
||||
|
refrain entirely from distribution of the Program. |
||||
|
|
||||
|
If any portion of this section is held invalid or unenforceable under |
||||
|
any particular circumstance, the balance of the section is intended to |
||||
|
apply and the section as a whole is intended to apply in other |
||||
|
circumstances. |
||||
|
|
||||
|
It is not the purpose of this section to induce you to infringe any |
||||
|
patents or other property right claims or to contest validity of any |
||||
|
such claims; this section has the sole purpose of protecting the |
||||
|
integrity of the free software distribution system, which is |
||||
|
implemented by public license practices. Many people have made |
||||
|
generous contributions to the wide range of software distributed |
||||
|
through that system in reliance on consistent application of that |
||||
|
system; it is up to the author/donor to decide if he or she is willing |
||||
|
to distribute software through any other system and a licensee cannot |
||||
|
impose that choice. |
||||
|
|
||||
|
This section is intended to make thoroughly clear what is believed to |
||||
|
be a consequence of the rest of this License. |
||||
|
|
||||
|
8. If the distribution and/or use of the Program is restricted in |
||||
|
certain countries either by patents or by copyrighted interfaces, the |
||||
|
original copyright holder who places the Program under this License |
||||
|
may add an explicit geographical distribution limitation excluding |
||||
|
those countries, so that distribution is permitted only in or among |
||||
|
countries not thus excluded. In such case, this License incorporates |
||||
|
the limitation as if written in the body of this License. |
||||
|
|
||||
|
9. The Free Software Foundation may publish revised and/or new versions |
||||
|
of the General Public License from time to time. Such new versions will |
||||
|
be similar in spirit to the present version, but may differ in detail to |
||||
|
address new problems or concerns. |
||||
|
|
||||
|
Each version is given a distinguishing version number. If the Program |
||||
|
specifies a version number of this License which applies to it and "any |
||||
|
later version", you have the option of following the terms and conditions |
||||
|
either of that version or of any later version published by the Free |
||||
|
Software Foundation. If the Program does not specify a version number of |
||||
|
this License, you may choose any version ever published by the Free Software |
||||
|
Foundation. |
||||
|
|
||||
|
10. If you wish to incorporate parts of the Program into other free |
||||
|
programs whose distribution conditions are different, write to the author |
||||
|
to ask for permission. For software which is copyrighted by the Free |
||||
|
Software Foundation, write to the Free Software Foundation; we sometimes |
||||
|
make exceptions for this. Our decision will be guided by the two goals |
||||
|
of preserving the free status of all derivatives of our free software and |
||||
|
of promoting the sharing and reuse of software generally. |
||||
|
|
||||
|
NO WARRANTY |
||||
|
|
||||
|
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY |
||||
|
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN |
||||
|
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES |
||||
|
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED |
||||
|
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS |
||||
|
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE |
||||
|
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, |
||||
|
REPAIR OR CORRECTION. |
||||
|
|
||||
|
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING |
||||
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR |
||||
|
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, |
||||
|
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING |
||||
|
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED |
||||
|
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY |
||||
|
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER |
||||
|
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE |
||||
|
POSSIBILITY OF SUCH DAMAGES. |
||||
|
|
||||
|
END OF TERMS AND CONDITIONS |
||||
|
|
||||
|
|
||||
|
How to Apply These Terms to Your New Programs |
||||
|
|
||||
|
If you develop a new program, and you want it to be of the greatest |
||||
|
possible use to the public, the best way to achieve this is to make it |
||||
|
free software which everyone can redistribute and change under these terms. |
||||
|
|
||||
|
To do so, attach the following notices to the program. It is safest |
||||
|
to attach them to the start of each source file to most effectively |
||||
|
convey the exclusion of warranty; and each file should have at least |
||||
|
the "copyright" line and a pointer to where the full notice is found. |
||||
|
|
||||
|
<one line to give the program's name and a brief idea of what it does.> |
||||
|
Copyright (C) 19yy <name of author> |
||||
|
|
||||
|
This program is free software; you can redistribute it and/or modify |
||||
|
it under the terms of the GNU General Public License as published by |
||||
|
the Free Software Foundation; either version 2 of the License, or |
||||
|
(at your option) any later version. |
||||
|
|
||||
|
This program is distributed in the hope that it will be useful, |
||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
GNU General Public License for more details. |
||||
|
|
||||
|
You should have received a copy of the GNU General Public License |
||||
|
along with this program; if not, write to the Free Software |
||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
||||
|
|
||||
|
|
||||
|
Also add information on how to contact you by electronic and paper mail. |
||||
|
|
||||
|
If the program is interactive, make it output a short notice like this |
||||
|
when it starts in an interactive mode: |
||||
|
|
||||
|
Gnomovision version 69, Copyright (C) 19yy name of author |
||||
|
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. |
||||
|
This is free software, and you are welcome to redistribute it |
||||
|
under certain conditions; type `show c' for details. |
||||
|
|
||||
|
The hypothetical commands `show w' and `show c' should show the appropriate |
||||
|
parts of the General Public License. Of course, the commands you use may |
||||
|
be called something other than `show w' and `show c'; they could even be |
||||
|
mouse-clicks or menu items--whatever suits your program. |
||||
|
|
||||
|
You should also get your employer (if you work as a programmer) or your |
||||
|
school, if any, to sign a "copyright disclaimer" for the program, if |
||||
|
necessary. Here is a sample; alter the names: |
||||
|
|
||||
|
Yoyodyne, Inc., hereby disclaims all copyright interest in the program |
||||
|
`Gnomovision' (which makes passes at compilers) written by James Hacker. |
||||
|
|
||||
|
<signature of Ty Coon>, 1 April 1989 |
||||
|
Ty Coon, President of Vice |
||||
|
|
||||
|
This General Public License does not permit incorporating your program into |
||||
|
proprietary programs. If your program is a subroutine library, you may |
||||
|
consider it more useful to permit linking proprietary applications with the |
||||
|
library. If this is what you want to do, use the GNU Library General |
||||
|
Public License instead of this License. |
@ -0,0 +1,13 @@ |
|||||
|
|
||||
|
License: |
||||
|
|
||||
|
This software is released under GNU GENERAL PUBLIC LICENSE. |
||||
|
|
||||
|
Warranty: |
||||
|
|
||||
|
This software is distributed with NO WARRANTY, use it at your own risk. |
||||
|
|
||||
|
Author: |
||||
|
|
||||
|
This software is written by |
||||
|
Tomas M. <http://www.linux-live.org> |
@ -0,0 +1,5 @@ |
|||||
|
You can pass the following boot parameters: |
||||
|
|
||||
|
debug ... start shell prompt several times during live kit startup |
||||
|
|
||||
|
from=... load data from given directory (search all drives for it) |
@ -0,0 +1,31 @@ |
|||||
|
Bundle |
||||
|
------ |
||||
|
|
||||
|
A bundle is compressed squashfs filesystem, consisting of up-to-the-root |
||||
|
directory structure. Old name for bundle is 'module'. Bundle format |
||||
|
brings some new enhancements over the old modules. |
||||
|
|
||||
|
File extension for bundles may vary. Currently Slax uses .sb extension, |
||||
|
where 'sb' means 'slax bundle'. |
||||
|
|
||||
|
|
||||
|
How to create bundle: |
||||
|
|
||||
|
# mksquashfs bundle_rootfs wholefs.sb -comp xz -bs 512k |
||||
|
|
||||
|
or |
||||
|
# mksquashfs /usr /usr.sb --keep-as-directory -comp xz -bs 512k |
||||
|
|
||||
|
or use function in livekitlib: |
||||
|
# . livekitlib; make_bundle bundle_rootfs wholefs.sb |
||||
|
|
||||
|
|
||||
|
Special files in bundle filesystem structure: |
||||
|
|
||||
|
|
||||
|
/run/requires |
||||
|
/run/activate.sh |
||||
|
/run/deactivate.sh |
||||
|
/run/startcmd.sh ? |
||||
|
|
||||
|
|
@ -0,0 +1,2 @@ |
|||||
|
Source code for precompiled binaries (initramfs/static/*) can be found at |
||||
|
http://ftp.slax.org/Slax-7.x-development/sources/Slax-7.0-sources/busybox-and-ntfs3g/ |
@ -0,0 +1,14 @@ |
|||||
|
Supported filesystems |
||||
|
--------------------- |
||||
|
|
||||
|
The Live distro created by Linux Live Kit can be installed |
||||
|
on the following filesystems: |
||||
|
|
||||
|
* iso9660 (CD) ..... using isolinux |
||||
|
* FAT32 (vfat) ..... using syslinux or extlinux |
||||
|
* ntfs ............. using syslinux or extlinux |
||||
|
* ext2/3/4,btrfs ... using extlinux |
||||
|
* any other fs ..... using lilo |
||||
|
|
||||
|
Most users will install on FAT32 for compatibility |
||||
|
with the other operating systems (I mean Windows). |
@ -0,0 +1,18 @@ |
|||||
|
Live Kit |
||||
|
-------- |
||||
|
|
||||
|
* also known as Linux Live Kit. Formely known as Linux Live CD. Nowadays, |
||||
|
people mostly use USB flash drives, cameras, and other devices to run |
||||
|
such 'Live' linuxes, thus Live CD is no longer ideal name for it. |
||||
|
|
||||
|
Meaning of Kit is like a tool, toolkit, or such. Which (I believe) corresponds |
||||
|
with the usage of such Live Linux distribution much better. |
||||
|
|
||||
|
|
||||
|
Bundles |
||||
|
------- |
||||
|
|
||||
|
* compressed squashfs images with some specialities |
||||
|
Read ./bundle.txt for more. |
||||
|
|
||||
|
|
@ -0,0 +1,59 @@ |
|||||
|
Linux Live Kit |
||||
|
============== |
||||
|
|
||||
|
Use this set of scripts to turn your existing preinstalled Linux |
||||
|
distribution into a Live Kit (formely known as Live CD). |
||||
|
Make sure to extract and use it on a posix-compatible filesystem, |
||||
|
since it creates some (sym)links and such. |
||||
|
|
||||
|
Note: |
||||
|
|
||||
|
* Store Linux Live kit in a directory which is not going to be included |
||||
|
in your live distro, else it would be copied to it. Best practice is to |
||||
|
make a directory such as /a and put these scripts there. |
||||
|
Be warned, if you put it to /tmp, some distros may erase it on reboot. |
||||
|
|
||||
|
* Before you start building your Kit, edit the file ./config |
||||
|
Most importantly change the LIVEKITNAME variable. |
||||
|
|
||||
|
* Make sure your kernel is in /boot/vmlinuz or change the path in ./config |
||||
|
Your kernel must support squashfs. Your kernel must also support either |
||||
|
aufs or overlayfs or both. AUFS is recommended for more flexibility, |
||||
|
but if your distro does not support it, overlayfs will work too. |
||||
|
|
||||
|
* You may also wish to replace boot graphics in ./bootfiles/bootlogo.png |
||||
|
(one options is to modify and run the ./tools/bootlogo.update script) |
||||
|
and reorganize isolinux.cfg to fit your needs (when editing the file, |
||||
|
keep all paths in /boot/, it will be rellocated during LiveKit creation) |
||||
|
|
||||
|
* Linux Live Kit comes with precompiled static binaries in ./initramfs |
||||
|
directory. Those may be outdated but will work. You may replace them |
||||
|
by your own statically linked binaries, if you know how to compile them. |
||||
|
|
||||
|
* If you plan to boot your Live Kit from CD, you need to recompile |
||||
|
syslinux.bin else it won't be able to boot your Live Kit from directory |
||||
|
LIVEKITNAME. There is a script prepared for you which will handle all |
||||
|
of that. Simply go to directory ./tools/ and run isolinux.bin.update ... |
||||
|
it will update ./bootfiles/isolinux.bin automatically by downloading |
||||
|
isolinux sources, patching them using your actual LIVEKITNAME and |
||||
|
recompiling. This step is not needed if you plan to boot from USB only. |
||||
|
|
||||
|
* If you have tmpfs mounted on /tmp, make sure you have enough RAM |
||||
|
since LiveKit will store lots of data there. If you are low on RAM, |
||||
|
make sure /tmp is a regular on-disk directory. |
||||
|
|
||||
|
* When done, run the ./build script to create your Live Kit |
||||
|
- it will create ISO and TAR files for you in /tmp |
||||
|
- make sure you have enough free space in /tmp to handle it |
||||
|
|
||||
|
* If you want to use the Live Kit on a USB you have to either |
||||
|
- use Windows to execute the bootinst.bat file in the $NAME/boot folder |
||||
|
- or use Linux to execute the shellscript bootinst.sh in the $NAME/boot folder. |
||||
|
|
||||
|
* You will need the following packages to be installed: |
||||
|
- squashfs-tools |
||||
|
- genisoimage or mkisofs |
||||
|
- zip |
||||
|
|
||||
|
|
||||
|
Author: Tomas M. <http://www.linux-live.org> |
@ -0,0 +1,54 @@ |
|||||
|
# deb http://ru.archive.ubuntu.com/ubuntu/ bionic main restricted |
||||
|
|
||||
|
# deb http://ru.archive.ubuntu.com/ubuntu/ bionic-updates main restricted |
||||
|
# deb http://security.ubuntu.com/ubuntu bionic-security main restricted |
||||
|
|
||||
|
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to |
||||
|
# newer versions of the distribution. |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ bionic main restricted |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ bionic main restricted |
||||
|
|
||||
|
## Major bug fix updates produced after the final release of the |
||||
|
## distribution. |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ bionic-updates main restricted |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ bionic-updates main restricted |
||||
|
|
||||
|
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu |
||||
|
## team. Also, please note that software in universe WILL NOT receive any |
||||
|
## review or updates from the Ubuntu security team. |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ bionic universe |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ bionic universe |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ bionic-updates universe |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ bionic-updates universe |
||||
|
|
||||
|
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu |
||||
|
## team, and may not be under a free licence. Please satisfy yourself as to |
||||
|
## your rights to use the software. Also, please note that software in |
||||
|
## multiverse WILL NOT receive any review or updates from the Ubuntu |
||||
|
## security team. |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ bionic multiverse |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ bionic multiverse |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ bionic-updates multiverse |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ bionic-updates multiverse |
||||
|
|
||||
|
## N.B. software from this repository may not have been tested as |
||||
|
## extensively as that contained in the main release, although it includes |
||||
|
## newer versions of some applications which may provide useful features. |
||||
|
## Also, please note that software in backports WILL NOT receive any review |
||||
|
## or updates from the Ubuntu security team. |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ bionic-backports main restricted universe multiverse |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ bionic-backports main restricted universe multiverse |
||||
|
|
||||
|
## Uncomment the following two lines to add software from Canonical's |
||||
|
## 'partner' repository. |
||||
|
## This software is not part of Ubuntu, but is offered by Canonical and the |
||||
|
## respective vendors as a service to Ubuntu users. |
||||
|
# deb http://archive.canonical.com/ubuntu bionic partner |
||||
|
# deb-src http://archive.canonical.com/ubuntu bionic partner |
||||
|
|
||||
|
deb http://security.ubuntu.com/ubuntu bionic-security main restricted |
||||
|
# deb-src http://security.ubuntu.com/ubuntu bionic-security main restricted |
||||
|
deb http://security.ubuntu.com/ubuntu bionic-security universe |
||||
|
# deb-src http://security.ubuntu.com/ubuntu bionic-security universe |
||||
|
deb http://security.ubuntu.com/ubuntu bionic-security multiverse |
||||
|
# deb-src http://security.ubuntu.com/ubuntu bionic-security multiverse |
@ -0,0 +1,5 @@ |
|||||
|
deb http://deb.debian.org/debian/ buster main contrib non-free |
||||
|
deb http://deb.debian.org/debian/ buster-updates main contrib non-free |
||||
|
deb http://security.debian.org/debian-security buster/updates main contrib non-free |
||||
|
|
||||
|
deb-src http://deb.debian.org/debian/ buster main contrib non-free |
@ -0,0 +1,54 @@ |
|||||
|
# deb http://ru.archive.ubuntu.com/ubuntu/ focal main restricted |
||||
|
|
||||
|
# deb http://ru.archive.ubuntu.com/ubuntu/ focal-updates main restricted |
||||
|
# deb http://security.ubuntu.com/ubuntu focal-security main restricted |
||||
|
|
||||
|
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to |
||||
|
# newer versions of the distribution. |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ focal main restricted |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ focal main restricted |
||||
|
|
||||
|
## Major bug fix updates produced after the final release of the |
||||
|
## distribution. |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ focal-updates main restricted |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ focal-updates main restricted |
||||
|
|
||||
|
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu |
||||
|
## team. Also, please note that software in universe WILL NOT receive any |
||||
|
## review or updates from the Ubuntu security team. |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ focal universe |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ focal universe |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ focal-updates universe |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ focal-updates universe |
||||
|
|
||||
|
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu |
||||
|
## team, and may not be under a free licence. Please satisfy yourself as to |
||||
|
## your rights to use the software. Also, please note that software in |
||||
|
## multiverse WILL NOT receive any review or updates from the Ubuntu |
||||
|
## security team. |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ focal multiverse |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ focal multiverse |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ focal-updates multiverse |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ focal-updates multiverse |
||||
|
|
||||
|
## N.B. software from this repository may not have been tested as |
||||
|
## extensively as that contained in the main release, although it includes |
||||
|
## newer versions of some applications which may provide useful features. |
||||
|
## Also, please note that software in backports WILL NOT receive any review |
||||
|
## or updates from the Ubuntu security team. |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ focal-backports main restricted universe multiverse |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ focal-backports main restricted universe multiverse |
||||
|
|
||||
|
## Uncomment the following two lines to add software from Canonical's |
||||
|
## 'partner' repository. |
||||
|
## This software is not part of Ubuntu, but is offered by Canonical and the |
||||
|
## respective vendors as a service to Ubuntu users. |
||||
|
# deb http://archive.canonical.com/ubuntu focal partner |
||||
|
# deb-src http://archive.canonical.com/ubuntu focal partner |
||||
|
|
||||
|
deb http://security.ubuntu.com/ubuntu focal-security main restricted |
||||
|
# deb-src http://security.ubuntu.com/ubuntu focal-security main restricted |
||||
|
deb http://security.ubuntu.com/ubuntu focal-security universe |
||||
|
# deb-src http://security.ubuntu.com/ubuntu focal-security universe |
||||
|
deb http://security.ubuntu.com/ubuntu focal-security multiverse |
||||
|
# deb-src http://security.ubuntu.com/ubuntu focal-security multiverse |
@ -0,0 +1,54 @@ |
|||||
|
# deb http://ru.archive.ubuntu.com/ubuntu/ groovy main restricted |
||||
|
|
||||
|
# deb http://ru.archive.ubuntu.com/ubuntu/ groovy-updates main restricted |
||||
|
# deb http://security.ubuntu.com/ubuntu groovy-security main restricted |
||||
|
|
||||
|
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to |
||||
|
# newer versions of the distribution. |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ groovy main restricted |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ groovy main restricted |
||||
|
|
||||
|
## Major bug fix updates produced after the final release of the |
||||
|
## distribution. |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ groovy-updates main restricted |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ groovy-updates main restricted |
||||
|
|
||||
|
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu |
||||
|
## team. Also, please note that software in universe WILL NOT receive any |
||||
|
## review or updates from the Ubuntu security team. |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ groovy universe |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ groovy universe |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ groovy-updates universe |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ groovy-updates universe |
||||
|
|
||||
|
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu |
||||
|
## team, and may not be under a free licence. Please satisfy yourself as to |
||||
|
## your rights to use the software. Also, please note that software in |
||||
|
## multiverse WILL NOT receive any review or updates from the Ubuntu |
||||
|
## security team. |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ groovy multiverse |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ groovy multiverse |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ groovy-updates multiverse |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ groovy-updates multiverse |
||||
|
|
||||
|
## N.B. software from this repository may not have been tested as |
||||
|
## extensively as that contained in the main release, although it includes |
||||
|
## newer versions of some applications which may provide useful features. |
||||
|
## Also, please note that software in backports WILL NOT receive any review |
||||
|
## or updates from the Ubuntu security team. |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ groovy-backports main restricted universe multiverse |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ groovy-backports main restricted universe multiverse |
||||
|
|
||||
|
## Uncomment the following two lines to add software from Canonical's |
||||
|
## 'partner' repository. |
||||
|
## This software is not part of Ubuntu, but is offered by Canonical and the |
||||
|
## respective vendors as a service to Ubuntu users. |
||||
|
# deb http://archive.canonical.com/ubuntu groovy partner |
||||
|
# deb-src http://archive.canonical.com/ubuntu groovy partner |
||||
|
|
||||
|
deb http://security.ubuntu.com/ubuntu groovy-security main restricted |
||||
|
# deb-src http://security.ubuntu.com/ubuntu groovy-security main restricted |
||||
|
deb http://security.ubuntu.com/ubuntu groovy-security universe |
||||
|
# deb-src http://security.ubuntu.com/ubuntu groovy-security universe |
||||
|
deb http://security.ubuntu.com/ubuntu groovy-security multiverse |
||||
|
# deb-src http://security.ubuntu.com/ubuntu groovy-security multiverse |
@ -0,0 +1,54 @@ |
|||||
|
# deb http://ru.archive.ubuntu.com/ubuntu/ distro main restricted |
||||
|
|
||||
|
# deb http://ru.archive.ubuntu.com/ubuntu/ distro-updates main restricted |
||||
|
# deb http://security.ubuntu.com/ubuntu distro-security main restricted |
||||
|
|
||||
|
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to |
||||
|
# newer versions of the distribution. |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ distro main restricted |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ distro main restricted |
||||
|
|
||||
|
## Major bug fix updates produced after the final release of the |
||||
|
## distribution. |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ distro-updates main restricted |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ distro-updates main restricted |
||||
|
|
||||
|
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu |
||||
|
## team. Also, please note that software in universe WILL NOT receive any |
||||
|
## review or updates from the Ubuntu security team. |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ distro universe |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ distro universe |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ distro-updates universe |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ distro-updates universe |
||||
|
|
||||
|
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu |
||||
|
## team, and may not be under a free licence. Please satisfy yourself as to |
||||
|
## your rights to use the software. Also, please note that software in |
||||
|
## multiverse WILL NOT receive any review or updates from the Ubuntu |
||||
|
## security team. |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ distro multiverse |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ distro multiverse |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ distro-updates multiverse |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ distro-updates multiverse |
||||
|
|
||||
|
## N.B. software from this repository may not have been tested as |
||||
|
## extensively as that contained in the main release, although it includes |
||||
|
## newer versions of some applications which may provide useful features. |
||||
|
## Also, please note that software in backports WILL NOT receive any review |
||||
|
## or updates from the Ubuntu security team. |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ distro-backports main restricted universe multiverse |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ distro-backports main restricted universe multiverse |
||||
|
|
||||
|
## Uncomment the following two lines to add software from Canonical's |
||||
|
## 'partner' repository. |
||||
|
## This software is not part of Ubuntu, but is offered by Canonical and the |
||||
|
## respective vendors as a service to Ubuntu users. |
||||
|
# deb http://archive.canonical.com/ubuntu distro partner |
||||
|
# deb-src http://archive.canonical.com/ubuntu distro partner |
||||
|
|
||||
|
deb http://security.ubuntu.com/ubuntu distro-security main restricted |
||||
|
# deb-src http://security.ubuntu.com/ubuntu distro-security main restricted |
||||
|
deb http://security.ubuntu.com/ubuntu distro-security universe |
||||
|
# deb-src http://security.ubuntu.com/ubuntu distro-security universe |
||||
|
deb http://security.ubuntu.com/ubuntu distro-security multiverse |
||||
|
# deb-src http://security.ubuntu.com/ubuntu distro-security multiverse |
@ -0,0 +1,54 @@ |
|||||
|
# deb http://ru.archive.ubuntu.com/ubuntu/ trusty main restricted |
||||
|
|
||||
|
# deb http://ru.archive.ubuntu.com/ubuntu/ trusty-updates main restricted |
||||
|
# deb http://security.ubuntu.com/ubuntu trusty-security main restricted |
||||
|
|
||||
|
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to |
||||
|
# newer versions of the distribution. |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ trusty main restricted |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ trusty main restricted |
||||
|
|
||||
|
## Major bug fix updates produced after the final release of the |
||||
|
## distribution. |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ trusty-updates main restricted |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ trusty-updates main restricted |
||||
|
|
||||
|
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu |
||||
|
## team. Also, please note that software in universe WILL NOT receive any |
||||
|
## review or updates from the Ubuntu security team. |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ trusty universe |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ trusty universe |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ trusty-updates universe |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ trusty-updates universe |
||||
|
|
||||
|
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu |
||||
|
## team, and may not be under a free licence. Please satisfy yourself as to |
||||
|
## your rights to use the software. Also, please note that software in |
||||
|
## multiverse WILL NOT receive any review or updates from the Ubuntu |
||||
|
## security team. |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ trusty multiverse |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ trusty multiverse |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ trusty-updates multiverse |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ trusty-updates multiverse |
||||
|
|
||||
|
## N.B. software from this repository may not have been tested as |
||||
|
## extensively as that contained in the main release, although it includes |
||||
|
## newer versions of some applications which may provide useful features. |
||||
|
## Also, please note that software in backports WILL NOT receive any review |
||||
|
## or updates from the Ubuntu security team. |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse |
||||
|
|
||||
|
## Uncomment the following two lines to add software from Canonical's |
||||
|
## 'partner' repository. |
||||
|
## This software is not part of Ubuntu, but is offered by Canonical and the |
||||
|
## respective vendors as a service to Ubuntu users. |
||||
|
# deb http://archive.canonical.com/ubuntu trusty partner |
||||
|
# deb-src http://archive.canonical.com/ubuntu trusty partner |
||||
|
|
||||
|
deb http://security.ubuntu.com/ubuntu trusty-security main restricted |
||||
|
# deb-src http://security.ubuntu.com/ubuntu trusty-security main restricted |
||||
|
deb http://security.ubuntu.com/ubuntu trusty-security universe |
||||
|
# deb-src http://security.ubuntu.com/ubuntu trusty-security universe |
||||
|
deb http://security.ubuntu.com/ubuntu trusty-security multiverse |
||||
|
# deb-src http://security.ubuntu.com/ubuntu trusty-security multiverse |
@ -0,0 +1,54 @@ |
|||||
|
# deb http://ru.archive.ubuntu.com/ubuntu/ xenial main restricted |
||||
|
|
||||
|
# deb http://ru.archive.ubuntu.com/ubuntu/ xenial-updates main restricted |
||||
|
# deb http://security.ubuntu.com/ubuntu xenial-security main restricted |
||||
|
|
||||
|
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to |
||||
|
# newer versions of the distribution. |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ xenial main restricted |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ xenial main restricted |
||||
|
|
||||
|
## Major bug fix updates produced after the final release of the |
||||
|
## distribution. |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ xenial-updates main restricted |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ xenial-updates main restricted |
||||
|
|
||||
|
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu |
||||
|
## team. Also, please note that software in universe WILL NOT receive any |
||||
|
## review or updates from the Ubuntu security team. |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ xenial universe |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ xenial universe |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ xenial-updates universe |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ xenial-updates universe |
||||
|
|
||||
|
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu |
||||
|
## team, and may not be under a free licence. Please satisfy yourself as to |
||||
|
## your rights to use the software. Also, please note that software in |
||||
|
## multiverse WILL NOT receive any review or updates from the Ubuntu |
||||
|
## security team. |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ xenial multiverse |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ xenial multiverse |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ xenial-updates multiverse |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ xenial-updates multiverse |
||||
|
|
||||
|
## N.B. software from this repository may not have been tested as |
||||
|
## extensively as that contained in the main release, although it includes |
||||
|
## newer versions of some applications which may provide useful features. |
||||
|
## Also, please note that software in backports WILL NOT receive any review |
||||
|
## or updates from the Ubuntu security team. |
||||
|
deb http://ru.archive.ubuntu.com/ubuntu/ xenial-backports main restricted universe multiverse |
||||
|
# deb-src http://ru.archive.ubuntu.com/ubuntu/ xenial-backports main restricted universe multiverse |
||||
|
|
||||
|
## Uncomment the following two lines to add software from Canonical's |
||||
|
## 'partner' repository. |
||||
|
## This software is not part of Ubuntu, but is offered by Canonical and the |
||||
|
## respective vendors as a service to Ubuntu users. |
||||
|
# deb http://archive.canonical.com/ubuntu xenial partner |
||||
|
# deb-src http://archive.canonical.com/ubuntu xenial partner |
||||
|
|
||||
|
deb http://security.ubuntu.com/ubuntu xenial-security main restricted |
||||
|
# deb-src http://security.ubuntu.com/ubuntu xenial-security main restricted |
||||
|
deb http://security.ubuntu.com/ubuntu xenial-security universe |
||||
|
# deb-src http://security.ubuntu.com/ubuntu xenial-security universe |
||||
|
deb http://security.ubuntu.com/ubuntu xenial-security multiverse |
||||
|
# deb-src http://security.ubuntu.com/ubuntu xenial-security multiverse |
@ -0,0 +1,16 @@ |
|||||
|
#!/bin/bash |
||||
|
|
||||
|
set -e # exit on error |
||||
|
set -o pipefail # exit on pipeline error |
||||
|
set -u # treat unset variable as error |
||||
|
|
||||
|
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")" |
||||
|
|
||||
|
# install packages |
||||
|
if [ -f $SCRIPT_DIR/package.list ]; then |
||||
|
#sudo DEBIAN_FRONTEND=$DEBIAN_FRONTEND_TYPE \ |
||||
|
$APT_CMD update >>$OUTPUT 2>&1 && |
||||
|
#sudo DEBIAN_FRONTEND=$DEBIAN_FRONTEND_TYPE \ |
||||
|
$APT_CMD install $APT_OPTIONS \ |
||||
|
$(grep -vE "^\s*#" $SCRIPT_DIR/package.list | tr "\n" " ") >>$OUTPUT 2>&1 |
||||
|
fi |
@ -0,0 +1,17 @@ |
|||||
|
# since we work without modules, we install everything in one file |
||||
|
# main |
||||
|
casper |
||||
|
lupin-casper |
||||
|
discover |
||||
|
laptop-detect |
||||
|
os-prober |
||||
|
network-manager |
||||
|
net-tools |
||||
|
wireless-tools |
||||
|
# gui |
||||
|
xubuntu-core^ |
||||
|
ubiquity |
||||
|
ubiquity-casper |
||||
|
ubiquity-frontend-gtk |
||||
|
ubiquity-slideshow-xubuntu |
||||
|
ubiquity-ubuntu-artwork |
@ -0,0 +1,14 @@ |
|||||
|
# This file should go in /etc/casper.conf |
||||
|
# Supported variables are: |
||||
|
# USERNAME, USERFULLNAME, HOST, BUILD_SYSTEM, FLAVOUR |
||||
|
|
||||
|
export USERNAME="live" |
||||
|
export USERFULLNAME="Live session user" |
||||
|
export HOST="minios" |
||||
|
export BUILD_SYSTEM="Ubuntu" |
||||
|
|
||||
|
# USERNAME and HOSTNAME as specified above won't be honoured and will be set to |
||||
|
# flavour string acquired at boot time, unless you set FLAVOUR to any |
||||
|
# non-empty string. |
||||
|
|
||||
|
# export FLAVOUR="Ubuntu" |
@ -0,0 +1,2 @@ |
|||||
|
Welcome to MiniOS! \n \l |
||||
|
|
@ -0,0 +1 @@ |
|||||
|
WebBrowser=google-chrome |
@ -0,0 +1,15 @@ |
|||||
|
[Desktop Entry] |
||||
|
Version=1.0 |
||||
|
Type=Application |
||||
|
Exec=exo-open --launch FileManager %u |
||||
|
Icon=system-file-manager |
||||
|
StartupNotify=true |
||||
|
Terminal=false |
||||
|
Categories=Utility;X-XFCE;X-Xfce-Toplevel; |
||||
|
OnlyShowIn=XFCE; |
||||
|
X-XFCE-MimeType=inode/directory;x-scheme-handler/trash; |
||||
|
Name=File Manager |
||||
|
Name[ru]=Файловый менеджер |
||||
|
Comment=Browse the file system |
||||
|
Comment[ru]=Просмотреть файловую систему |
||||
|
X-XFCE-Source=file:///usr/share/applications/exo-file-manager.desktop |
@ -0,0 +1,16 @@ |
|||||
|
[Desktop Entry] |
||||
|
Version=1.0 |
||||
|
Type=Application |
||||
|
Exec=exo-open --launch WebBrowser %u |
||||
|
Icon=web-browser |
||||
|
StartupNotify=true |
||||
|
Terminal=false |
||||
|
Categories=Network;X-XFCE;X-Xfce-Toplevel; |
||||
|
OnlyShowIn=XFCE; |
||||
|
X-XFCE-MimeType=x-scheme-handler/http;x-scheme-handler/https; |
||||
|
Name=Web Browser |
||||
|
Name[ru]=Веб-браузер |
||||
|
Comment=Browse the web |
||||
|
Comment[ru]=Смотреть в Интернете |
||||
|
X-XFCE-Source=file:///usr/share/applications/exo-web-browser.desktop |
||||
|
Path= |
@ -0,0 +1,14 @@ |
|||||
|
[Desktop Entry] |
||||
|
Version=1.0 |
||||
|
Type=Application |
||||
|
Exec=exo-open --launch TerminalEmulator |
||||
|
Icon=utilities-terminal |
||||
|
StartupNotify=true |
||||
|
Terminal=false |
||||
|
Categories=Utility;X-XFCE;X-Xfce-Toplevel; |
||||
|
OnlyShowIn=XFCE; |
||||
|
Name=Terminal Emulator |
||||
|
Name[ru]=Эмулятор терминала |
||||
|
Comment=Use the command line |
||||
|
Comment[ru]=Использовать командную строку |
||||
|
X-XFCE-Source=file:///usr/share/applications/exo-terminal-emulator.desktop |
@ -0,0 +1,68 @@ |
|||||
|
favorites=ubiquity.desktop |
||||
|
recent= |
||||
|
button-title=Applications Menu |
||||
|
button-icon=MiniOS-white |
||||
|
button-single-row=false |
||||
|
show-button-title=false |
||||
|
show-button-icon=true |
||||
|
launcher-show-name=true |
||||
|
launcher-show-description=false |
||||
|
launcher-show-tooltip=true |
||||
|
item-icon-size=2 |
||||
|
hover-switch-category=false |
||||
|
category-show-name=true |
||||
|
category-icon-size=1 |
||||
|
load-hierarchy=true |
||||
|
recent-items-max=10 |
||||
|
favorites-in-recent=true |
||||
|
display-recent-default=false |
||||
|
position-search-alternate=true |
||||
|
position-commands-alternate=false |
||||
|
position-categories-alternate=false |
||||
|
menu-width=400 |
||||
|
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-logout=xfce4-session-logout |
||||
|
show-command-logout=true |
||||
|
command-menueditor=menulibre |
||||
|
show-command-menueditor=true |
||||
|
command-profile=mugshot |
||||
|
show-command-profile=true |
||||
|
search-actions=5 |
||||
|
|
||||
|
[action0] |
||||
|
name=Man-страницы |
||||
|
pattern=# |
||||
|
command=exo-open --launch TerminalEmulator man %s |
||||
|
regex=false |
||||
|
|
||||
|
[action1] |
||||
|
name=Web-поиск |
||||
|
pattern=? |
||||
|
command=exo-open --launch WebBrowser https://duckduckgo.com/?q=%u |
||||
|
regex=false |
||||
|
|
||||
|
[action2] |
||||
|
name=Википедия |
||||
|
pattern=!w |
||||
|
command=exo-open --launch WebBrowser https://en.wikipedia.org/wiki/%u |
||||
|
regex=false |
||||
|
|
||||
|
[action3] |
||||
|
name=Выполнить в терминале |
||||
|
pattern=! |
||||
|
command=exo-open --launch TerminalEmulator %s |
||||
|
regex=false |
||||
|
|
||||
|
[action4] |
||||
|
name=Открыть URI |
||||
|
pattern=^(file|http|https):\\/\\/(.*)$ |
||||
|
command=exo-open \\0 |
||||
|
regex=true |
||||
|
|
@ -0,0 +1,123 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
|
||||
|
<channel name="xfce4-panel" version="1.0"> |
||||
|
<property name="panels" type="uint" value="1"> |
||||
|
<property name="panel-0" type="empty"> |
||||
|
<property name="position" type="string" value="p=8;x=1109;y=1275"/> |
||||
|
<property name="length" type="uint" value="100"/> |
||||
|
<property name="position-locked" type="bool" value="true"/> |
||||
|
<property name="plugin-ids" type="array"> |
||||
|
<value type="int" value="1"/> |
||||
|
<value type="int" value="21"/> |
||||
|
<value type="int" value="23"/> |
||||
|
<value type="int" value="19"/> |
||||
|
<value type="int" value="24"/> |
||||
|
<value type="int" value="22"/> |
||||
|
<value type="int" value="2"/> |
||||
|
<value type="int" value="3"/> |
||||
|
<value type="int" value="5"/> |
||||
|
<value type="int" value="4"/> |
||||
|
<value type="int" value="7"/> |
||||
|
<value type="int" value="6"/> |
||||
|
<value type="int" value="9"/> |
||||
|
<value type="int" value="10"/> |
||||
|
<value type="int" value="11"/> |
||||
|
<value type="int" value="12"/> |
||||
|
</property> |
||||
|
<property name="background-style" type="uint" value="0"/> |
||||
|
<property name="background-alpha" type="uint" value="60"/> |
||||
|
<property name="size" type="uint" value="32"/> |
||||
|
<property name="length-adjust" type="bool" value="true"/> |
||||
|
<property name="span-monitors" type="bool" value="false"/> |
||||
|
<property name="enter-opacity" type="uint" value="100"/> |
||||
|
<property name="leave-opacity" type="uint" value="100"/> |
||||
|
<property name="mode" type="uint" value="0"/> |
||||
|
<property name="autohide-behavior" type="uint" value="0"/> |
||||
|
<property name="nrows" type="uint" value="1"/> |
||||
|
</property> |
||||
|
</property> |
||||
|
<property name="plugins" type="empty"> |
||||
|
<property name="plugin-1" type="string" value="whiskermenu"/> |
||||
|
<property name="plugin-2" type="string" value="tasklist"> |
||||
|
<property name="flat-buttons" type="bool" value="true"/> |
||||
|
<property name="show-handle" type="bool" value="false"/> |
||||
|
<property name="show-labels" type="bool" value="false"/> |
||||
|
</property> |
||||
|
<property name="plugin-3" type="string" value="separator"> |
||||
|
<property name="style" type="uint" value="0"/> |
||||
|
<property name="expand" type="bool" value="true"/> |
||||
|
</property> |
||||
|
<property name="plugin-4" type="string" value="systray"> |
||||
|
<property name="show-frame" type="bool" value="false"/> |
||||
|
<property name="size-max" type="uint" value="22"/> |
||||
|
<property name="names-visible" type="array"> |
||||
|
<value type="string" value="thunar"/> |
||||
|
<value type="string" value="ctsg"/> |
||||
|
</property> |
||||
|
<property name="names-hidden" type="array"> |
||||
|
<value type="string" value="network"/> |
||||
|
<value type="string" value="xfce4-power-manager"/> |
||||
|
<value type="string" value="сеть"/> |
||||
|
<value type="string" value="апплет networkmanager"/> |
||||
|
<value type="string" value="networkmanager applet"/> |
||||
|
<value type="string" value="remmina"/> |
||||
|
</property> |
||||
|
</property> |
||||
|
<property name="plugin-9" type="string" value="pulseaudio"> |
||||
|
<property name="enable-keyboard-shortcuts" type="bool" value="true"/> |
||||
|
<property name="enable-mpris" type="bool" value="true"/> |
||||
|
<property name="mixer-command" type="string" value="pavucontrol"/> |
||||
|
<property name="mpris-players" type="string" value="parole"/> |
||||
|
<property name="show-notifications" type="bool" value="true"/> |
||||
|
</property> |
||||
|
<property name="plugin-10" type="string" value="separator"> |
||||
|
<property name="style" type="uint" value="0"/> |
||||
|
<property name="expand" type="bool" value="false"/> |
||||
|
</property> |
||||
|
<property name="plugin-11" type="string" value="clock"> |
||||
|
<property name="digital-format" type="string" value="%d %b, %H:%M"/> |
||||
|
</property> |
||||
|
<property name="plugin-12" type="string" value="showdesktop"/> |
||||
|
<property name="plugin-19" type="string" value="launcher"> |
||||
|
<property name="items" type="array"> |
||||
|
<value type="string" value="16093657651.desktop"/> |
||||
|
</property> |
||||
|
</property> |
||||
|
<property name="plugin-21" type="string" value="separator"> |
||||
|
<property name="style" type="uint" value="0"/> |
||||
|
</property> |
||||
|
<property name="plugin-22" type="string" value="separator"> |
||||
|
<property name="style" type="uint" value="0"/> |
||||
|
</property> |
||||
|
<property name="plugin-23" type="string" value="launcher"> |
||||
|
<property name="items" type="array"> |
||||
|
<value type="string" value="16093659533.desktop"/> |
||||
|
</property> |
||||
|
<property name="show-label" type="bool" value="false"/> |
||||
|
<property name="disable-tooltips" type="bool" value="false"/> |
||||
|
</property> |
||||
|
<property name="plugin-24" type="string" value="launcher"> |
||||
|
<property name="items" type="array"> |
||||
|
<value type="string" value="16093659584.desktop"/> |
||||
|
</property> |
||||
|
</property> |
||||
|
<property name="plugin-5" type="string" value="xkb"> |
||||
|
<property name="display-scale" type="uint" value="50"/> |
||||
|
<property name="display-tooltip-icon" type="bool" value="true"/> |
||||
|
<property name="group-policy" type="uint" value="0"/> |
||||
|
<property name="display-type" type="uint" value="2"/> |
||||
|
<property name="display-name" type="uint" value="1"/> |
||||
|
</property> |
||||
|
<property name="plugin-7" type="string" value="statusnotifier"> |
||||
|
<property name="known-items" type="array"> |
||||
|
<value type="string" value="ctsg"/> |
||||
|
<value type="string" value="remmina-icon"/> |
||||
|
<value type="string" value="nm-applet"/> |
||||
|
</property> |
||||
|
<property name="hidden-items" type="array"> |
||||
|
</property> |
||||
|
</property> |
||||
|
<property name="plugin-6" type="string" value="power-manager-plugin"/> |
||||
|
</property> |
||||
|
<property name="configver" type="int" value="2"/> |
||||
|
</channel> |
@ -0,0 +1 @@ |
|||||
|
Europe/Moscow |
@ -0,0 +1,140 @@ |
|||||
|
# ~/.bashrc: executed by bash(1) for non-login shells. |
||||
|
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) |
||||
|
# for examples |
||||
|
|
||||
|
# If not running interactively, don't do anything |
||||
|
case $- in |
||||
|
*i*) ;; |
||||
|
*) return;; |
||||
|
esac |
||||
|
|
||||
|
# don't put duplicate lines or lines starting with space in the history. |
||||
|
# See bash(1) for more options |
||||
|
HISTCONTROL=ignoreboth |
||||
|
|
||||
|
# append to the history file, don't overwrite it |
||||
|
shopt -s histappend |
||||
|
|
||||
|
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1) |
||||
|
HISTSIZE=1000 |
||||
|
HISTFILESIZE=2000 |
||||
|
|
||||
|
# check the window size after each command and, if necessary, |
||||
|
# update the values of LINES and COLUMNS. |
||||
|
shopt -s checkwinsize |
||||
|
|
||||
|
# If set, the pattern "**" used in a pathname expansion context will |
||||
|
# match all files and zero or more directories and subdirectories. |
||||
|
#shopt -s globstar |
||||
|
|
||||
|
# make less more friendly for non-text input files, see lesspipe(1) |
||||
|
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" |
||||
|
|
||||
|
# set variable identifying the chroot you work in (used in the prompt below) |
||||
|
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then |
||||
|
debian_chroot=$(cat /etc/debian_chroot) |
||||
|
fi |
||||
|
|
||||
|
# set a fancy prompt (non-color, unless we know we "want" color) |
||||
|
case "$TERM" in |
||||
|
xterm-color|*-256color) color_prompt=yes;; |
||||
|
esac |
||||
|
|
||||
|
# uncomment for a colored prompt, if the terminal has the capability; turned |
||||
|
# off by default to not distract the user: the focus in a terminal window |
||||
|
# should be on the output of commands, not on the prompt |
||||
|
#force_color_prompt=yes |
||||
|
|
||||
|
if [ -n "$force_color_prompt" ]; then |
||||
|
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then |
||||
|
# We have color support; assume it's compliant with Ecma-48 |
||||
|
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such |
||||
|
# a case would tend to support setf rather than setaf.) |
||||
|
color_prompt=yes |
||||
|
else |
||||
|
color_prompt= |
||||
|
fi |
||||
|
fi |
||||
|
|
||||
|
if [ "$color_prompt" = yes ]; then |
||||
|
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' |
||||
|
else |
||||
|
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' |
||||
|
fi |
||||
|
unset color_prompt force_color_prompt |
||||
|
|
||||
|
# If this is an xterm set the title to user@host:dir |
||||
|
case "$TERM" in |
||||
|
xterm*|rxvt*) |
||||
|
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1" |
||||
|
;; |
||||
|
*) |
||||
|
;; |
||||
|
esac |
||||
|
|
||||
|
# enable color support of ls and also add handy aliases |
||||
|
if [ -x /usr/bin/dircolors ]; then |
||||
|
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" |
||||
|
alias ls='ls --color=auto' |
||||
|
#alias dir='dir --color=auto' |
||||
|
#alias vdir='vdir --color=auto' |
||||
|
|
||||
|
alias grep='grep --color=auto' |
||||
|
alias fgrep='fgrep --color=auto' |
||||
|
alias egrep='egrep --color=auto' |
||||
|
fi |
||||
|
|
||||
|
# colored GCC warnings and errors |
||||
|
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01' |
||||
|
|
||||
|
# some more ls aliases |
||||
|
alias ll='ls -alF' |
||||
|
alias la='ls -A' |
||||
|
alias l='ls -CF' |
||||
|
|
||||
|
# Add an "alert" alias for long running commands. Use like so: |
||||
|
# sleep 10; alert |
||||
|
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' |
||||
|
|
||||
|
# Alias definitions. |
||||
|
# You may want to put all your additions into a separate file like |
||||
|
# ~/.bash_aliases, instead of adding them here directly. |
||||
|
# See /usr/share/doc/bash-doc/examples in the bash-doc package. |
||||
|
|
||||
|
if [ -f ~/.bash_aliases ]; then |
||||
|
. ~/.bash_aliases |
||||
|
fi |
||||
|
|
||||
|
# enable programmable completion features (you don't need to enable |
||||
|
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile |
||||
|
# sources /etc/bash.bashrc). |
||||
|
if ! shopt -oq posix; then |
||||
|
if [ -f /usr/share/bash-completion/bash_completion ]; then |
||||
|
. /usr/share/bash-completion/bash_completion |
||||
|
elif [ -f /etc/bash_completion ]; then |
||||
|
. /etc/bash_completion |
||||
|
fi |
||||
|
fi |
||||
|
|
||||
|
apt-get() |
||||
|
{ |
||||
|
if [ -e /var/cache/apt/pkgcache.bin ]; then |
||||
|
/usr/bin/apt-get "$@" |
||||
|
else |
||||
|
/usr/bin/apt-get update |
||||
|
/usr/bin/apt-get "$@" |
||||
|
fi |
||||
|
} |
||||
|
|
||||
|
apt() |
||||
|
{ |
||||
|
if [ -e /var/cache/apt/pkgcache.bin ]; then |
||||
|
/usr/bin/apt "$@" |
||||
|
else |
||||
|
/usr/bin/apt update |
||||
|
/usr/bin/apt "$@" |
||||
|
fi |
||||
|
} |
||||
|
|
||||
|
export -f apt-get |
||||
|
export -f apt |
After Width: | Height: | Size: 681 KiB |
After Width: | Height: | Size: 17 KiB |
@ -0,0 +1 @@ |
|||||
|
/usr/share/plymouth/themes/minios-logo/minios-logo.plymouth |
@ -0,0 +1,4 @@ |
|||||
|
[Plymouth Theme] |
||||
|
Name=Details |
||||
|
Description=Verbose fallback theme |
||||
|
ModuleName=details |
After Width: | Height: | Size: 326 B |
After Width: | Height: | Size: 98 B |
After Width: | Height: | Size: 7.0 KiB |
After Width: | Height: | Size: 3.4 KiB |
@ -0,0 +1,8 @@ |
|||||
|
[Plymouth Theme] |
||||
|
Name=MiniOS Logo |
||||
|
Description=A theme that features a background with a logo. |
||||
|
ModuleName=script |
||||
|
|
||||
|
[script] |
||||
|
ImageDir=/usr/share/plymouth/themes/minios-logo |
||||
|
ScriptFile=/usr/share/plymouth/themes/minios-logo/minios-logo.script |
@ -0,0 +1,512 @@ |
|||||
|
/************************************************************************** |
||||
|
* |
||||
|
* Copyright (C) 2011 The Xubuntu Community |
||||
|
* Copyright (C) 2009 Canonical Ltd. |
||||
|
* |
||||
|
* This program is free software: you can redistribute it and/or modify |
||||
|
* it under the terms of the GNU General Public License as published by |
||||
|
* the Free Software Foundation, either version 3 of the License, or |
||||
|
* (at your option) any later version. |
||||
|
* |
||||
|
* This program is distributed in the hope that it will be useful, |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
* GNU General Public License for more details. |
||||
|
* |
||||
|
* You should have received a copy of the GNU General Public License |
||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
|
* |
||||
|
* Written by: Mad Nick <dr.madnick@gmail.com> |
||||
|
* |
||||
|
**************************************************************************/ |
||||
|
|
||||
|
/* |
||||
|
* Related to the screen */ |
||||
|
|
||||
|
screen_width = Window.GetWidth(); |
||||
|
screen_height = Window.GetHeight(); |
||||
|
screen_x = Window.GetX(); |
||||
|
screen_y = Window.GetY(); |
||||
|
|
||||
|
/**/ |
||||
|
|
||||
|
/* |
||||
|
* Images, check bits per pixel |
||||
|
* and load images accordingly */ |
||||
|
|
||||
|
background_image = Image("wallpaper.png"); |
||||
|
passw_dialog_input_image = Image("passw-dialog.png"); |
||||
|
bullet_image = Image("test.png"); |
||||
|
|
||||
|
bpp = Window.GetBitsPerPixel(); |
||||
|
|
||||
|
if (bpp == 4) { |
||||
|
|
||||
|
logotype_image = Image("logo_16bit.png"); |
||||
|
progress_meter_image = Image("progress-meter_16bit.png"); |
||||
|
progress_fade_image = Image("progress-fade_16bit.png"); |
||||
|
fsck_progress_meter_image = Image("progress-meter_16bit.png"); |
||||
|
fsck_progress_fade_image = Image("fsck-fade_16bit.png"); |
||||
|
|
||||
|
} |
||||
|
else { |
||||
|
|
||||
|
logotype_image = Image("logo.png"); |
||||
|
progress_meter_image = Image("progress-meter.png"); |
||||
|
progress_fade_image = Image("progress-fade.png"); |
||||
|
fsck_progress_meter_image = Image("progress-meter.png"); |
||||
|
fsck_progress_fade_image = Image("fsck-fade.png"); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
/**/ |
||||
|
|
||||
|
/* |
||||
|
* Sprites */ |
||||
|
|
||||
|
ratio = screen_height / screen_width; |
||||
|
background_ratio = background_image.GetHeight() / background_image.GetWidth(); |
||||
|
factor = 0; |
||||
|
|
||||
|
if (ratio > background_ratio) { |
||||
|
|
||||
|
factor = screen_height / background_image.GetHeight(); |
||||
|
|
||||
|
} |
||||
|
else { |
||||
|
|
||||
|
factor = screen_width / background_image.GetWidth(); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
scaled = background_image.Scale(background_image.GetWidth() * factor, background_image.GetHeight() * factor); |
||||
|
background_sprite = Sprite(scaled); |
||||
|
background_sprite.SetX(screen_x + screen_width / 2 - scaled.GetWidth() / 2); |
||||
|
background_sprite.SetY(screen_y + screen_height / 2 - scaled.GetHeight() / 2); |
||||
|
|
||||
|
logotype_sprite = Sprite(logotype_image); |
||||
|
|
||||
|
fsck_progress_meter_sprite = Sprite(fsck_progress_meter_image); |
||||
|
fsck_progress_fade_sprite = Sprite(fsck_progress_fade_image.Scale(1, fsck_progress_fade_image.GetHeight())); |
||||
|
|
||||
|
passw_dialog_input_sprite = Sprite(passw_dialog_input_image); |
||||
|
passw_lbl_sprite = Sprite(); |
||||
|
|
||||
|
msg_label_sprite = Sprite(); |
||||
|
|
||||
|
/**/ |
||||
|
|
||||
|
/* |
||||
|
* Misc */ |
||||
|
|
||||
|
counter = 0; |
||||
|
|
||||
|
fade_pos_x = (screen_width / 2) - (progress_meter_image.GetWidth() / 2); |
||||
|
fade_dir = 0; /* 0 = right, 1 = left */ |
||||
|
|
||||
|
fsck_running = 0; |
||||
|
fsck_dev_array; |
||||
|
fsck_dev_counter = 0; |
||||
|
fsck_fade_in_counter = 0; |
||||
|
fsck_done_fading = 0; |
||||
|
|
||||
|
stars_array; |
||||
|
stars_n = 0; |
||||
|
|
||||
|
//full_msg = ""; |
||||
|
msgs_line = [NULL,NULL,NULL,NULL,NULL]; |
||||
|
|
||||
|
/**/ |
||||
|
|
||||
|
/* |
||||
|
* Debug related */ |
||||
|
|
||||
|
debug = 0; |
||||
|
debug_sprite = Sprite(); |
||||
|
|
||||
|
fun debugOutput(str) { |
||||
|
|
||||
|
/* |
||||
|
* This will print to the top left corner */ |
||||
|
debug_sprite.SetImage(Image.Text(str)); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
/**/ |
||||
|
|
||||
|
/* |
||||
|
* Setup the graphics properties */ |
||||
|
logotype_sprite.SetPosition(screen_x + (screen_width / 2) - (logotype_image.GetWidth() / 2), screen_y + (screen_height / 2) - (logotype_image.GetHeight() / 2)); |
||||
|
fsck_progress_meter_sprite.SetPosition(screen_x + (screen_width / 2) - (progress_meter_image.GetWidth() / 2), screen_y + (screen_height / 2) + (logotype_image.GetHeight() / 2) + 25); |
||||
|
fsck_progress_fade_sprite.SetPosition(screen_x + (screen_width / 2) - (progress_meter_image.GetWidth() / 2), screen_y + (screen_height / 2) + (logotype_image.GetHeight() / 2) + 25); |
||||
|
fsck_progress_meter_sprite.SetOpacity(0); |
||||
|
fsck_progress_fade_sprite.SetOpacity(0); |
||||
|
passw_dialog_input_sprite.SetPosition(screen_x + (screen_width / 2) - (passw_dialog_input_image.GetWidth() / 2), screen_y + (screen_height / 2) + (logotype_image.GetHeight() / 2) + 70); |
||||
|
passw_dialog_input_sprite.SetOpacity(0); |
||||
|
passw_lbl_sprite.SetOpacity(0); |
||||
|
|
||||
|
spin = 0; |
||||
|
|
||||
|
/* |
||||
|
* this function only goes up to 100 |
||||
|
* because thats all thats needed for |
||||
|
* the progress meter bar */ |
||||
|
fun atoi(str) { |
||||
|
|
||||
|
int = -1; |
||||
|
|
||||
|
for (i = 0; i <= 100; i++) { |
||||
|
|
||||
|
if (i + "" == str) { |
||||
|
|
||||
|
int = i; |
||||
|
|
||||
|
break; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
return int; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
/* |
||||
|
* This handler will/can be invoked |
||||
|
* 50 times per second. |
||||
|
* |
||||
|
* According to the previous author of the |
||||
|
* splash script, without this callback |
||||
|
* the screen is not updated correctly */ |
||||
|
spinner_sprite; |
||||
|
spinner; |
||||
|
|
||||
|
fun refreshHandler() { |
||||
|
|
||||
|
if (spin < 3.14 * 2) { |
||||
|
|
||||
|
spin = spin + 0.1; |
||||
|
|
||||
|
} |
||||
|
else { |
||||
|
|
||||
|
spin = 0; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
/* if fsck is running or the password is prompted, hide the spinner */ |
||||
|
if (fsck_running == 1 || passw_dialog_input_sprite.GetOpacity() == 1) { |
||||
|
|
||||
|
spinner_sprite.SetOpacity(0); |
||||
|
|
||||
|
} else { |
||||
|
|
||||
|
spinner = Image("spinner.png"); |
||||
|
spinner = spinner.Rotate(spin); |
||||
|
spinner_sprite = Sprite(spinner); |
||||
|
spinner_sprite.SetPosition(screen_x + (screen_width / 2) - (spinner.GetWidth() / 2), screen_y + (screen_height / 2) - (spinner.GetHeight() / 2) + 80); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
if (fade_dir == 0) { |
||||
|
|
||||
|
counter++; |
||||
|
|
||||
|
if (counter >= 200) { |
||||
|
|
||||
|
fade_dir = 1; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
||||
|
else { |
||||
|
|
||||
|
counter--; |
||||
|
|
||||
|
if (counter <= 0) { |
||||
|
|
||||
|
fade_dir = 0; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
if ((fsck_running == 1) && (fsck_done_fading == 0)) { |
||||
|
|
||||
|
|
||||
|
fsck_progress_meter_sprite.SetOpacity(fsck_fade_in_counter); |
||||
|
fsck_progress_fade_sprite.SetOpacity(fsck_fade_in_counter); |
||||
|
|
||||
|
if (fsck_fade_in_counter < 1) { |
||||
|
|
||||
|
fsck_fade_in_counter+= 0.025; |
||||
|
|
||||
|
} |
||||
|
else { |
||||
|
|
||||
|
fsck_done_fading = 1; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
Plymouth.SetRefreshFunction (refreshHandler); |
||||
|
|
||||
|
/**/ |
||||
|
|
||||
|
/* |
||||
|
* This function will display the password related information |
||||
|
* when being prompt with entering a password */ |
||||
|
fun showPasswordHandler(prompt, stars) { |
||||
|
|
||||
|
if (passw_dialog_input_sprite.GetOpacity() == 0 && passw_lbl_sprite.GetOpacity() == 0) { |
||||
|
|
||||
|
passw_dialog_input_sprite.SetOpacity(1); |
||||
|
passw_lbl_sprite.SetOpacity(1); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
tmp_prompt_image = Image.Text(prompt, 1, 1, 1); |
||||
|
|
||||
|
passw_lbl_sprite.SetImage(tmp_prompt_image); |
||||
|
passw_lbl_sprite.SetPosition(screen_x + (screen_width / 2) - (tmp_prompt_image.GetWidth() / 2), screen_y + (screen_height / 2) + (logotype_image.GetHeight() / 2) + 50); |
||||
|
|
||||
|
for(i = 0; i < stars_n; i++) { |
||||
|
|
||||
|
stars_array[i] = NULL; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
stars_n = 0; |
||||
|
|
||||
|
for(i = 0; (i < stars) && (i < 15); i++) { |
||||
|
|
||||
|
stars_array[i] = Sprite(bullet_image); |
||||
|
stars_array[i].SetPosition(screen_x + (((screen_width / 2) - (passw_dialog_input_image.GetWidth() / 2)) + (18 * i)) + 2, screen_y + (screen_height / 2) + (logotype_image.GetHeight() / 2) + 75); |
||||
|
stars_n++; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
Plymouth.SetDisplayPasswordFunction(showPasswordHandler); |
||||
|
|
||||
|
/**/ |
||||
|
|
||||
|
fun displayNormalHandler() { |
||||
|
|
||||
|
/* |
||||
|
* Hide the password dialog and the bullets */ |
||||
|
|
||||
|
if (passw_dialog_input_sprite.GetOpacity() == 1) { |
||||
|
|
||||
|
passw_dialog_input_sprite.SetOpacity(0); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
if (passw_lbl_sprite.GetOpacity() == 1) { |
||||
|
|
||||
|
passw_lbl_sprite.SetOpacity(0); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
for(i = 0; i < stars_n; i++) { |
||||
|
|
||||
|
stars_array[i] = NULL; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
Plymouth.SetDisplayNormalFunction(displayNormalHandler); |
||||
|
|
||||
|
fun strlen(string) { |
||||
|
|
||||
|
i = 0; |
||||
|
|
||||
|
while (String(string).CharAt(i)) { |
||||
|
|
||||
|
i++; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
return i; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
/* |
||||
|
* This function will display the most current message */ |
||||
|
fun messageHandler(msg) { |
||||
|
|
||||
|
if ((msg == "") || !msg) { |
||||
|
|
||||
|
return 0; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
if (msg.SubString(0, 5) == "keys:") { |
||||
|
|
||||
|
msg = msg.SubString(5, strlen(msg)); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
# Get the message without the "fsckd-cancel-msg" prefix as we don't support i18n |
||||
|
if (msg.SubString(0, 17) == "fsckd-cancel-msg:") |
||||
|
msg = msg.SubString(17, strlen(msg)); |
||||
|
|
||||
|
//full_msg += msg + " "; |
||||
|
for(i = 4; i > 0; i--) { |
||||
|
|
||||
|
msgs_line[i] = msgs_line[i - 1]; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
msgs_line[0] = Sprite(Image.Text(msg, 1, 1, 1)); |
||||
|
|
||||
|
dist = 1; |
||||
|
|
||||
|
for(i = 0; i < 5; i++) { |
||||
|
|
||||
|
if (msgs_line[i] != NULL) { |
||||
|
|
||||
|
msgs_line[i].SetPosition(screen_x + (screen_width / 2) - (msgs_line[i].GetImage().GetWidth() / 2), screen_y + (screen_height - msgs_line[i].GetImage().GetHeight()) - 20*dist); |
||||
|
dist++; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
Plymouth.SetMessageFunction(messageHandler); |
||||
|
|
||||
|
/**/ |
||||
|
|
||||
|
/* |
||||
|
* Handles the updates passed to the plymouth daemon |
||||
|
* for example the FSCK data */ |
||||
|
fun statusHandler(status) { |
||||
|
|
||||
|
tmp_char; |
||||
|
status_array[0] = ""; |
||||
|
elem_count = 0; |
||||
|
|
||||
|
for (i = 0; String(status).CharAt(i) != ""; i++) { |
||||
|
|
||||
|
tmp_char = String(status).CharAt(i); |
||||
|
|
||||
|
if (tmp_char != ":") { |
||||
|
|
||||
|
status_array[elem_count] += tmp_char; |
||||
|
|
||||
|
} |
||||
|
else { |
||||
|
|
||||
|
elem_count++; |
||||
|
status_array[elem_count] = ""; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
if (status_array[0] == "fsck") { |
||||
|
|
||||
|
already_added = 0; |
||||
|
|
||||
|
if (fsck_running == 0) { |
||||
|
|
||||
|
/* |
||||
|
* use the dedicated message handler for this |
||||
|
* since there is no messages about fsck checks |
||||
|
* currently... */ |
||||
|
messageHandler("Routine disk drive check."); |
||||
|
|
||||
|
fsck_running = 1; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
for(i = 0; i < fsck_dev_counter; i++) { |
||||
|
|
||||
|
/* |
||||
|
* check if the device already exist and update |
||||
|
* the progress only in that case */ |
||||
|
if (fsck_dev_array[i][0] == status_array[1]) { |
||||
|
|
||||
|
fsck_dev_array[i][1] = status_array[2]; /* progress */ |
||||
|
already_added = 1; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
/* |
||||
|
* if the device is not added, then add it */ |
||||
|
if (already_added == 0) { |
||||
|
|
||||
|
fsck_dev_array[fsck_dev_counter][0] = status_array[1]; /* device */ |
||||
|
fsck_dev_array[fsck_dev_counter][1] = status_array[2]; /* progress */ |
||||
|
fsck_dev_counter++; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
/* |
||||
|
* update the progress */ |
||||
|
|
||||
|
total = 0; |
||||
|
|
||||
|
for(i = 0; i < fsck_dev_counter; i++) { |
||||
|
|
||||
|
total += atoi(fsck_dev_array[i][1]); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
if (fsck_dev_counter > 0) { |
||||
|
|
||||
|
/* |
||||
|
* display the total percentage */ |
||||
|
fsck_progress_fade_sprite.SetImage(fsck_progress_fade_image.Scale((fsck_progress_meter_image.GetWidth() / 100) * (total / fsck_dev_counter), fsck_progress_fade_image.GetHeight())); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
/**/ |
||||
|
|
||||
|
/* |
||||
|
* if the total progress is at maximum, |
||||
|
* make the progress meter go away, |
||||
|
* we might want to fade this out... */ |
||||
|
if (total == (100 * fsck_dev_counter)) { |
||||
|
|
||||
|
fsck_progress_meter_sprite.SetOpacity(0); |
||||
|
fsck_progress_fade_sprite.SetOpacity(0); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
# systemd-fsckd pass fsckd:<number_devices>:<progress>:<l10n_string> |
||||
|
if (status_array[0] == "fsckd") { |
||||
|
fsck_running = 1; |
||||
|
|
||||
|
# remove ",x" as we only care about integers |
||||
|
progress_str = status_array[2]; |
||||
|
progress = atoi(progress_str.SubString(0, strlen(progress_str) - 2)); |
||||
|
|
||||
|
fsck_progress_fade_sprite.SetImage(fsck_progress_fade_image.Scale((fsck_progress_meter_image.GetWidth() / 100) * progress, fsck_progress_fade_image.GetHeight())); |
||||
|
|
||||
|
/* |
||||
|
* if the total progress is at maximum, |
||||
|
* make the progress meter go away, |
||||
|
* we might want to fade this out... */ |
||||
|
if (progress == 100) { |
||||
|
fsck_progress_meter_sprite.SetOpacity(0); |
||||
|
fsck_progress_fade_sprite.SetOpacity(0); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
Plymouth.SetUpdateStatusFunction(statusHandler); |
||||
|
|
||||
|
/**/ |
After Width: | Height: | Size: 101 B |
After Width: | Height: | Size: 267 B |
After Width: | Height: | Size: 88 B |
After Width: | Height: | Size: 236 B |
After Width: | Height: | Size: 88 B |
After Width: | Height: | Size: 981 B |
After Width: | Height: | Size: 136 B |
After Width: | Height: | Size: 2.0 KiB |
@ -0,0 +1,11 @@ |
|||||
|
[Plymouth Theme] |
||||
|
Name=MiniOS Text |
||||
|
Description=Text mode theme based on minios-logo theme |
||||
|
ModuleName=ubuntu-text |
||||
|
|
||||
|
[ubuntu-text] |
||||
|
title=MiniOS 2021 |
||||
|
black=0x000000 |
||||
|
white=0xffffff |
||||
|
brown=0x000000 |
||||
|
blue=0xffffff |
@ -0,0 +1 @@ |
|||||
|
/usr/share/plymouth/themes/minios-text/minios-text.plymouth |
@ -0,0 +1,16 @@ |
|||||
|
#!/bin/bash |
||||
|
|
||||
|
set -e # exit on error |
||||
|
set -o pipefail # exit on pipeline error |
||||
|
set -u # treat unset variable as error |
||||
|
|
||||
|
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")" |
||||
|
|
||||
|
# install packages |
||||
|
if [ -f $SCRIPT_DIR/package.list ]; then |
||||
|
#sudo DEBIAN_FRONTEND=$DEBIAN_FRONTEND_TYPE \ |
||||
|
$APT_CMD update >>$OUTPUT 2>&1 && |
||||
|
#sudo DEBIAN_FRONTEND=$DEBIAN_FRONTEND_TYPE \ |
||||
|
$APT_CMD install $APT_OPTIONS $APT_OPTIONS2 \ |
||||
|
$(grep -vE "^\s*#" $SCRIPT_DIR/package.list | tr "\n" " ") >>$OUTPUT 2>&1 |
||||
|
fi |
@ -0,0 +1,41 @@ |
|||||
|
mc |
||||
|
squashfs-tools |
||||
|
genisoimage |
||||
|
zip |
||||
|
unzip |
||||
|
psmisc |
||||
|
net-tools |
||||
|
alsa-utils |
||||
|
man |
||||
|
less |
||||
|
xz-utils |
||||
|
ca-certificates |
||||
|
openssl |
||||
|
acpid |
||||
|
acpi-support-base |
||||
|
powermgmt-base |
||||
|
bzip2 |
||||
|
gpart |
||||
|
hdparm |
||||
|
sdparm |
||||
|
mdadm |
||||
|
smartmontools |
||||
|
dosfstools |
||||
|
lsof |
||||
|
htop |
||||
|
gddrescue |
||||
|
rsync |
||||
|
netcat |
||||
|
ssh |
||||
|
gpm |
||||
|
wireless-tools |
||||
|
ntfs-3g |
||||
|
rfkill |
||||
|
file |
||||
|
dnsmasq |
||||
|
ntpdate |
||||
|
dvd+rw-tools |
||||
|
usb-modeswitch |
||||
|
pm-utils |
||||
|
wget |
||||
|
linux-image-amd64 |
@ -0,0 +1,103 @@ |
|||||
|
#!/bin/bash |
||||
|
|
||||
|
apt-get remove --yes vim* grub* debconf-i18n installation-report |
||||
|
|
||||
|
CWD="$(pwd)" |
||||
|
cd /tmp |
||||
|
apt -y update |
||||
|
apt-get download acpi-support |
||||
|
dpkg -x acpi-support*.deb /tmp/acpisupport |
||||
|
cd /tmp/acpisupport |
||||
|
cp -aR * / |
||||
|
cd "$CWD" |
||||
|
|
||||
|
rm -f /etc/fstab |
||||
|
rm -f /etc/mtab |
||||
|
rm -f /etc/apt/sources.list~ |
||||
|
rm -Rf /etc/systemd/system/timers.target.wants |
||||
|
rm -f /etc/systemd/system/multi-user.target.wants/ssh.service |
||||
|
rm -f /etc/systemd/system/multi-user.target.wants/dnsmasq.service |
||||
|
|
||||
|
rm -f /etc/ssh/ssh_host* |
||||
|
|
||||
|
rm -f /var/backups/* |
||||
|
rm -f /var/cache/ldconfig/* |
||||
|
rm -f /var/cache/debconf/* |
||||
|
rm -f /var/cache/fontconfig/* |
||||
|
rm -f /var/lib/apt/extended_states |
||||
|
rm -f /var/lib/systemd/random-seed |
||||
|
rm -f /var/lib/apt/lists/deb.* |
||||
|
rm -Rf /root/.local/share/mc |
||||
|
rm -Rf /root/.cache |
||||
|
rm -f /root/.wget-hsts |
||||
|
|
||||
|
rm -f /var/lib/dpkg/*-old |
||||
|
rm -f /var/log/* |
||||
|
rm -f /var/log/*/* |
||||
|
rm -f /var/log/*/*/* |
||||
|
rm -f /var/cache/apt/archives/*.deb |
||||
|
rm -f /var/cache/apt/*.bin |
||||
|
rm -f /var/cache/debconf/*-old |
||||
|
rm -f /var/lib/dhcp/dhclient.leases |
||||
|
rm -f /root/.bash_history |
||||
|
rm -f /root/.wget-hsts |
||||
|
rm -Rf /usr/share/doc/* |
||||
|
rm -Rf /usr/share/info/* |
||||
|
rm -f /usr/share/images/fluxbox/debian-squared.jpg |
||||
|
rm -Rf /usr/share/fluxbox/nls/??* |
||||
|
rm -Rf /usr/share/gnome/help |
||||
|
|
||||
|
rm -Rf /usr/share/locale/?? |
||||
|
rm -Rf /usr/share/locale/??_* |
||||
|
rm -Rf /usr/share/locale/??@* |
||||
|
rm -Rf /usr/share/locale/??? |
||||
|
rm -Rf /usr/share/i18n/locales/*_* |
||||
|
rm -Rf /usr/share/man/?? |
||||
|
rm -Rf /usr/share/man/*_* |
||||
|
|
||||
|
rm -Rf /usr/share/icons/elementaryXubuntu-dark |
||||
|
rm -Rf /usr/share/icons/gnome/256x256 |
||||
|
|
||||
|
rm /usr/share/applications/compton.desktop |
||||
|
rm /usr/share/applications/debian-uxterm.desktop |
||||
|
rm /usr/share/applications/debian-xterm.desktop |
||||
|
rm /usr/share/applications/htop.desktop |
||||
|
rm /usr/share/applications/mc.desktop |
||||
|
rm /usr/share/applications/mcedit.desktop |
||||
|
rm /usr/share/applications/pcmanfm-desktop-pref.desktop |
||||
|
rm /usr/share/applications/python2.7.desktop |
||||
|
rm /usr/share/applications/python3.7.desktop |
||||
|
rm /usr/share/applications/vim.desktop |
||||
|
|
||||
|
|
||||
|
|
||||
|
# Unzip gzipped files (man pages), so LZMA can compress 2times better. |
||||
|
# First we fix symlinks, then uncompress files |
||||
|
# $1 = search directory |
||||
|
uncompress_files() |
||||
|
{ |
||||
|
local LINK LINE |
||||
|
|
||||
|
find "$1" -type l -name "*.gz" | while read LINE; do |
||||
|
LINK="$(readlink "$LINE" | sed -r 's/.gz$//')" |
||||
|
FILE="$(echo "$LINE" | sed -r 's/.gz$//')" |
||||
|
ln -sfn "$LINK" "$FILE" |
||||
|
rm -f "$LINE" |
||||
|
done |
||||
|
find "$1" -type f -name "*.gz" | xargs -r gunzip |
||||
|
} |
||||
|
|
||||
|
uncompress_files /etc/alternatives |
||||
|
uncompress_files /usr/share/man |
||||
|
|
||||
|
# remove broken links |
||||
|
# $1 = search directory |
||||
|
remove_broken_links() |
||||
|
{ |
||||
|
find "$1" -type l -exec test ! -e {} \; -print | xargs rm -vf |
||||
|
} |
||||
|
|
||||
|
remove_broken_links /etc/alternatives |
||||
|
remove_broken_links /usr/share/man |
||||
|
|
||||
|
|
@ -0,0 +1,3 @@ |
|||||
|
0.0 0 0.0 |
||||
|
0 |
||||
|
LOCAL |
@ -0,0 +1,3 @@ |
|||||
|
APT::Install-Recommends "0"; |
||||
|
APT::Install-Suggests "0"; |
||||
|
Acquire::Languages { "none"; } |
@ -0,0 +1,5 @@ |
|||||
|
deb http://deb.debian.org/debian/ buster main contrib non-free |
||||
|
deb http://deb.debian.org/debian/ buster-updates main contrib non-free |
||||
|
deb http://security.debian.org/debian-security buster/updates main contrib non-free |
||||
|
|
||||
|
deb-src http://deb.debian.org/debian/ buster main contrib non-free |
@ -0,0 +1 @@ |
|||||
|
minios |
@ -0,0 +1,7 @@ |
|||||
|
127.0.0.1 localhost |
||||
|
127.0.1.1 minios |
||||
|
|
||||
|
# The following lines are desirable for IPv6 capable hosts |
||||
|
::1 localhost ip6-localhost ip6-loopback |
||||
|
ff02::1 ip6-allnodes |
||||
|
ff02::2 ip6-allrouters |
@ -0,0 +1,31 @@ |
|||||
|
|
||||
|
|
||||
|
\l |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
Thank you for using MiniOS. |
||||
|
Based on Debian GNU/Linux 10. |
||||
|
|
||||
|
:::: :::: ::::::::::: :::: ::: ::::::::::: :::::::: :::::::: |
||||
|
+:+:+: :+:+:+ :+: :+:+: :+: :+: :+: :+: :+: :+: |
||||
|
+:+ +:+:+ +:+ +:+ :+:+:+ +:+ +:+ +:+ +:+ +:+ |
||||
|
+#+ +:+ +#+ +#+ +#+ +:+ +#+ +#+ +#+ +:+ +#++:++#++ |
||||
|
+#+ +#+ +#+ +#+ +#+#+# +#+ +#+ +#+ +#+ |
||||
|
#+# #+# #+# #+# #+#+# #+# #+# #+# #+# #+# |
||||
|
### ### ########### ### #### ########### ######## ######## |
||||
|
|
||||
|
: : |
||||
|
: Root login name: [1;33mroot[0;29m : |
||||
|
: Password: [1;33mtoor[0;29m : |
||||
|
: User login name: [1;33mlive[0;29m : |
||||
|
: Password: [1;33mevil[0;29m : |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
@ -0,0 +1 @@ |
|||||
|
/usr/share/zoneinfo/Etc/UTC |
@ -0,0 +1 @@ |
|||||
|
|
@ -0,0 +1,34 @@ |
|||||
|
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1)) |
||||
|
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...). |
||||
|
|
||||
|
if [ "`id -u`" -eq 0 ]; then |
||||
|
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games" |
||||
|
else |
||||
|
PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games" |
||||
|
fi |
||||
|
export PATH |
||||
|
|
||||
|
if [ "${PS1-}" ]; then |
||||
|
if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then |
||||
|
# The file bash.bashrc already sets the default PS1. |
||||
|
# PS1='\h:\w\$ ' |
||||
|
if [ -f /etc/bash.bashrc ]; then |
||||
|
. /etc/bash.bashrc |
||||
|
fi |
||||
|
else |
||||
|
if [ "`id -u`" -eq 0 ]; then |
||||
|
PS1='# ' |
||||
|
else |
||||
|
PS1='$ ' |
||||
|
fi |
||||
|
fi |
||||
|
fi |
||||
|
|
||||
|
if [ -d /etc/profile.d ]; then |
||||
|
for i in /etc/profile.d/*.sh; do |
||||
|
if [ -r $i ]; then |
||||
|
. $i |
||||
|
fi |
||||
|
done |
||||
|
unset i |
||||
|
fi |
@ -0,0 +1,2 @@ |
|||||
|
PermitRootLogin yes |
||||
|
PasswordAuthentication yes |
@ -0,0 +1 @@ |
|||||
|
/lib/systemd/system/dhclient.service |
@ -0,0 +1 @@ |
|||||
|
Etc/UTC |
@ -0,0 +1,140 @@ |
|||||
|
# ~/.bashrc: executed by bash(1) for non-login shells. |
||||
|
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) |
||||
|
# for examples |
||||
|
|
||||
|
# If not running interactively, don't do anything |
||||
|
case $- in |
||||
|
*i*) ;; |
||||
|
*) return;; |
||||
|
esac |
||||
|
|
||||
|
# don't put duplicate lines or lines starting with space in the history. |
||||
|
# See bash(1) for more options |
||||
|
HISTCONTROL=ignoreboth |
||||
|
|
||||
|
# append to the history file, don't overwrite it |
||||
|
shopt -s histappend |
||||
|
|
||||
|
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1) |
||||
|
HISTSIZE=1000 |
||||
|
HISTFILESIZE=2000 |
||||
|
|
||||
|
# check the window size after each command and, if necessary, |
||||
|
# update the values of LINES and COLUMNS. |
||||
|
shopt -s checkwinsize |
||||
|
|
||||
|
# If set, the pattern "**" used in a pathname expansion context will |
||||
|
# match all files and zero or more directories and subdirectories. |
||||
|
#shopt -s globstar |
||||
|
|
||||
|
# make less more friendly for non-text input files, see lesspipe(1) |
||||
|
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" |
||||
|
|
||||
|
# set variable identifying the chroot you work in (used in the prompt below) |
||||
|
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then |
||||
|
debian_chroot=$(cat /etc/debian_chroot) |
||||
|
fi |
||||
|
|
||||
|
# set a fancy prompt (non-color, unless we know we "want" color) |
||||
|
case "$TERM" in |
||||
|
xterm-color|*-256color) color_prompt=yes;; |
||||
|
esac |
||||
|
|
||||
|
# uncomment for a colored prompt, if the terminal has the capability; turned |
||||
|
# off by default to not distract the user: the focus in a terminal window |
||||
|
# should be on the output of commands, not on the prompt |
||||
|
#force_color_prompt=yes |
||||
|
|
||||
|
if [ -n "$force_color_prompt" ]; then |
||||
|
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then |
||||
|
# We have color support; assume it's compliant with Ecma-48 |
||||
|
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such |
||||
|
# a case would tend to support setf rather than setaf.) |
||||
|
color_prompt=yes |
||||
|
else |
||||
|
color_prompt= |
||||
|
fi |
||||
|
fi |
||||
|
|
||||
|
if [ "$color_prompt" = yes ]; then |
||||
|
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' |
||||
|
else |
||||
|
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' |
||||
|
fi |
||||
|
unset color_prompt force_color_prompt |
||||
|
|
||||
|
# If this is an xterm set the title to user@host:dir |
||||
|
case "$TERM" in |
||||
|
xterm*|rxvt*) |
||||
|
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1" |
||||
|
;; |
||||
|
*) |
||||
|
;; |
||||
|
esac |
||||
|
|
||||
|
# enable color support of ls and also add handy aliases |
||||
|
if [ -x /usr/bin/dircolors ]; then |
||||
|
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" |
||||
|
alias ls='ls --color=auto' |
||||
|
#alias dir='dir --color=auto' |
||||
|
#alias vdir='vdir --color=auto' |
||||
|
|
||||
|
alias grep='grep --color=auto' |
||||
|
alias fgrep='fgrep --color=auto' |
||||
|
alias egrep='egrep --color=auto' |
||||
|
fi |
||||
|
|
||||
|
# colored GCC warnings and errors |
||||
|
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01' |
||||
|
|
||||
|
# some more ls aliases |
||||
|
alias ll='ls -alF' |
||||
|
alias la='ls -A' |
||||
|
alias l='ls -CF' |
||||
|
|
||||
|
# Add an "alert" alias for long running commands. Use like so: |
||||
|
# sleep 10; alert |
||||
|
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' |
||||
|
|
||||
|
# Alias definitions. |
||||
|
# You may want to put all your additions into a separate file like |
||||
|
# ~/.bash_aliases, instead of adding them here directly. |
||||
|
# See /usr/share/doc/bash-doc/examples in the bash-doc package. |
||||
|
|
||||
|
if [ -f ~/.bash_aliases ]; then |
||||
|
. ~/.bash_aliases |
||||
|
fi |
||||
|
|
||||
|
# enable programmable completion features (you don't need to enable |
||||
|
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile |
||||
|
# sources /etc/bash.bashrc). |
||||
|
if ! shopt -oq posix; then |
||||
|
if [ -f /usr/share/bash-completion/bash_completion ]; then |
||||
|
. /usr/share/bash-completion/bash_completion |
||||
|
elif [ -f /etc/bash_completion ]; then |
||||
|
. /etc/bash_completion |
||||
|
fi |
||||
|
fi |
||||
|
|
||||
|
apt-get() |
||||
|
{ |
||||
|
if [ -e /var/cache/apt/pkgcache.bin ]; then |
||||
|
/usr/bin/apt-get "$@" |
||||
|
else |
||||
|
/usr/bin/apt-get update |
||||
|
/usr/bin/apt-get "$@" |
||||
|
fi |
||||
|
} |
||||
|
|
||||
|
apt() |
||||
|
{ |
||||
|
if [ -e /var/cache/apt/pkgcache.bin ]; then |
||||
|
/usr/bin/apt "$@" |
||||
|
else |
||||
|
/usr/bin/apt update |
||||
|
/usr/bin/apt "$@" |
||||
|
fi |
||||
|
} |
||||
|
|
||||
|
export -f apt-get |
||||
|
export -f apt |
@ -0,0 +1,58 @@ |
|||||
|
#!/bin/bash |
||||
|
# Author: Tomas M. <http://www.slax.org/> |
||||
|
|
||||
|
usage() |
||||
|
{ |
||||
|
echo "" |
||||
|
echo "Convert directory to .sb compressed module" |
||||
|
echo "Usage: $0 [source_directory.sb] [[target_file.sb]]" |
||||
|
echo " If source_directory does not have .sb suffix and it is not 'squashfs-root'," |
||||
|
echo " then the source_directory itself is included in the module and" |
||||
|
echo " then the target_file.sb parameter is required." |
||||
|
echo " If target_file.sb is not specified, the source_directory is erased" |
||||
|
echo " and replaced by the newly generated module file." |
||||
|
} |
||||
|
|
||||
|
P1="$(readlink -f "$1")" |
||||
|
P2="$(readlink -f "$2")" |
||||
|
|
||||
|
if [ "$P1" = "$P2" ]; then |
||||
|
P2="" |
||||
|
fi |
||||
|
|
||||
|
SB=$(echo "$P1" | grep -o "[.]sb/*\$") |
||||
|
if [ "$(echo "$P1" | grep -o "/squashfs-root/*\$")" != "" ]; then |
||||
|
SB="true" |
||||
|
fi |
||||
|
|
||||
|
if [ "$SB" = "" ]; then |
||||
|
KEEP="-keep-as-directory" |
||||
|
if [ "$P2" = "" ]; then |
||||
|
usage |
||||
|
exit 1 |
||||
|
fi |
||||
|
else |
||||
|
KEEP="" |
||||
|
fi |
||||
|
|
||||
|
if [ ! -d "$P1" ]; then |
||||
|
echo "Not a directory: $P1" >&2 |
||||
|
exit 2 |
||||
|
fi |
||||
|
|
||||
|
|
||||
|
if [ "$P2" = "" ]; then |
||||
|
TARGET="$P1".sb |
||||
|
while [ -e "$TARGET" ]; do TARGET="$TARGET"x; done |
||||
|
mksquashfs "$P1" "$TARGET" -comp xz -b 1024K -always-use-fragments $KEEP >/dev/null || exit 3 |
||||
|
umount "$P1" 2>/dev/null |
||||
|
rm -Rf "$P1" |
||||
|
mv "$TARGET" "$P1" |
||||
|
else |
||||
|
if [ -e "$P2" ]; then |
||||
|
echo "Target exists: $P2" >&2 |
||||
|
exit 4 |
||||
|
fi |
||||
|
|
||||
|
mksquashfs "$P1" "$P2" -comp xz -b 1024K -always-use-fragments $KEEP >/dev/null |
||||
|
fi |
@ -0,0 +1,80 @@ |
|||||
|
#!/bin/bash |
||||
|
|
||||
|
# Author: Tomas M. <http://www.linux-live.org> |
||||
|
# Author: crims0n. <http://minios.ru> |
||||
|
|
||||
|
CWD=$(pwd) |
||||
|
SOURCE=/run/initramfs/memory |
||||
|
TEMP=/tmp/miniosiso.$$ |
||||
|
REGEX='^$' |
||||
|
|
||||
|
if [ "$1" = "-e" ]; then |
||||
|
REGEX="$2" |
||||
|
shift |
||||
|
shift |
||||
|
fi |
||||
|
|
||||
|
TARGET="$(readlink -f "$1")" |
||||
|
|
||||
|
if [ "$TARGET" = "" ]; then |
||||
|
echo "" |
||||
|
echo "Generate MiniOS ISO image, adding specified modules" |
||||
|
echo "Regular expression is used to exclude any existing path or file with -e regex" |
||||
|
echo "" |
||||
|
echo "Usage:" |
||||
|
echo " $0 [[ -e regex ]] target.iso [[module.sb]] [[module.sb]] ..." |
||||
|
echo "" |
||||
|
echo "Examples:" |
||||
|
echo " # to create MiniOS iso without chromium.sb module:" |
||||
|
echo " $0 -e 'chromium' minios_without_chromium.iso" |
||||
|
echo "" |
||||
|
echo " # to create MiniOS text-mode core only:" |
||||
|
echo " $0 -e 'firmware|xorg|desktop|apps|chromium' minios_textmode.iso" |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
if [ -e "$SOURCE/data/minios/boot/isolinux.bin" ]; then |
||||
|
MINIOS=$SOURCE/data/minios |
||||
|
fi |
||||
|
|
||||
|
if [ -e "$SOURCE/toram/boot/isolinux.bin" ]; then |
||||
|
MINIOS=$SOURCE/toram |
||||
|
fi |
||||
|
|
||||
|
if [ "$MINIOS" = "" ]; then |
||||
|
echo "Cannot find boot/isolinux.bin in MiniOS data" >&2 |
||||
|
exit 2 |
||||
|
fi |
||||
|
|
||||
|
GRAFT=\ |
||||
|
$( |
||||
|
cd "$MINIOS" |
||||
|
find . -type f | sed -r "s:^[.]/::" | egrep -v "^boot/isolinux.(bin|boot)$" | egrep -v "^changes/" | egrep -v "$REGEX" | while read LINE; do |
||||
|
echo "minios/$LINE=$MINIOS/$LINE" |
||||
|
done |
||||
|
) |
||||
|
|
||||
|
# add all modules |
||||
|
while [ "$2" != "" ]; do |
||||
|
if [ ! -e "$2" ]; then |
||||
|
echo "File does not exist: $2" |
||||
|
exit 3 |
||||
|
fi |
||||
|
BAS="$(basename "$2")" |
||||
|
MOD="$(readlink -f "$2")" |
||||
|
GRAFT="$GRAFT minios/modules/$BAS=$MOD" |
||||
|
shift |
||||
|
done |
||||
|
|
||||
|
( |
||||
|
mkdir -p $TEMP/minios/{boot,modules,changes} |
||||
|
cp "$MINIOS/boot/isolinux.bin" "$TEMP/minios/boot" |
||||
|
cd "$TEMP" |
||||
|
genisoimage -o - -quiet -v -J -R -D -A minios -V minios \ |
||||
|
-no-emul-boot -boot-info-table -boot-load-size 4 -input-charset utf-8 \ |
||||
|
-b minios/boot/isolinux.bin -c minios/boot/isolinux.boot \ |
||||
|
-graft-points $GRAFT \ |
||||
|
. \ |
||||
|
) > "$TARGET" |
||||
|
|
||||
|
rm -Rf $TEMP |
@ -0,0 +1,86 @@ |
|||||
|
#!/bin/bash |
||||
|
# Rebuild initial ramdisk with full network drivers, |
||||
|
# start DHCP and TFTP server in order to provide PXE service |
||||
|
# |
||||
|
# Author: Tomas M <www.slax.org> |
||||
|
|
||||
|
LIVE=/run/initramfs |
||||
|
FTPROOT=/var/state/dnsmasq/root |
||||
|
|
||||
|
# find out our own IP address. If more interfaces are available, use the first one |
||||
|
IP="$(hostname -I | cut -d " " -f 1)" |
||||
|
GW=$(ip route show | grep default | grep -o "via.*" | head -n 1 | cut -d " " -f 2) |
||||
|
|
||||
|
# if no IP is assigned to this computer, setup private address randomly |
||||
|
if [ "$IP" = "" ]; then |
||||
|
killall dhclient 2>/dev/null |
||||
|
IP="10."$(($RANDOM/130+1))"."$(($RANDOM/130+1))".1" |
||||
|
ifconfig $(ls -1 /sys/class/net | egrep -v '^lo$' | sort | head -n 1) $IP netmask 255.255.255.0 |
||||
|
fi |
||||
|
|
||||
|
# if gateway is not recognized, lets make our IP a gateway and enable forwarding |
||||
|
if [ "$GW" = "" ]; then |
||||
|
GW="$IP" |
||||
|
echo 1 > /proc/sys/net/ipv4/conf/all/forwarding |
||||
|
echo 1 > /proc/sys/net/ipv6/conf/all/forwarding |
||||
|
fi |
||||
|
|
||||
|
echo Starting PXE server on $IP ... |
||||
|
|
||||
|
# calculate C class range |
||||
|
RANGE=$(echo $IP | cut -d "." -f 1-3) |
||||
|
|
||||
|
# make sure dnsmasq can be started |
||||
|
killall dnsmasq 2>/dev/null |
||||
|
killall busybox 2>/dev/null |
||||
|
rm -Rf $FTPROOT 2>/dev/null |
||||
|
mkdir -p $FTPROOT/{pxelinux.cfg,tmp}/ |
||||
|
|
||||
|
# create root filesystem for ftfp |
||||
|
cd $LIVE |
||||
|
( find . -print | grep -v "memory" |
||||
|
cd / |
||||
|
find /lib/modules/$(uname -r)/kernel/drivers/net | grep -v wireless |
||||
|
) | cpio -pvd $FTPROOT/tmp 2>/dev/null |
||||
|
|
||||
|
cp /lib/modules/$(uname -r)/modules.* $FTPROOT/tmp/lib/modules/$(uname -r) |
||||
|
depmod -b $FTPROOT/tmp |
||||
|
rm $FTPROOT/tmp/lib/initramfs_escaped |
||||
|
|
||||
|
# pack root in initramfs |
||||
|
cd $FTPROOT/tmp |
||||
|
find . -print | cpio -o -H newc 2>/dev/null | gzip -f --fast >../initrfs.img |
||||
|
cd .. |
||||
|
rm -Rf tmp |
||||
|
|
||||
|
# link files here since copying is not necessary |
||||
|
ln -s $(find $LIVE/memory/{data,iso,toram} 2>/dev/null | grep vmlinuz | head -n 1) $FTPROOT/vmlinuz |
||||
|
ln -s $(find $LIVE/memory/{data,iso,toram} 2>/dev/null | grep pxelinux.0 | head -n 1) $FTPROOT/pxelinux.0 |
||||
|
ln -s $(find $LIVE/memory/{data,iso,toram} 2>/dev/null | grep ldlinux.c32 | head -n 1) $FTPROOT/ldlinux.c32 |
||||
|
|
||||
|
find $LIVE/memory/{data,iso,toram} 2>/dev/null | egrep "[.]sb\$" | sort -n | while read LINE; do |
||||
|
BAS="$(basename "$LINE")" |
||||
|
ln -s $LINE "$FTPROOT/$BAS" |
||||
|
echo $BAS >> "$FTPROOT/PXEFILELIST" |
||||
|
done |
||||
|
|
||||
|
echo "This is <a href=http://www.slax.org/>Slax</a> PXE data server. PXE clients will download <a href=PXEFILELIST>file list</a>" > "$FTPROOT/index.html" |
||||
|
|
||||
|
# default pxelinux configuration. Keep xmode selection for clients the same like for the server |
||||
|
echo " |
||||
|
PROMPT 0 |
||||
|
DEFAULT slax |
||||
|
LABEL slax |
||||
|
KERNEL /vmlinuz |
||||
|
IPAPPEND 1 |
||||
|
APPEND initrd=/initrfs.img load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 $(cat /proc/cmdline | egrep -o 'slax.flags=[^ ]+' | sed -r 's:[,=]pxe::' | sed -r 's:[,=]toram::') |
||||
|
" > $FTPROOT/pxelinux.cfg/default |
||||
|
|
||||
|
# start the DHCP server and TFTP server |
||||
|
dnsmasq --enable-tftp --tftp-root=/var/state/dnsmasq/root \ |
||||
|
--dhcp-boot=pxelinux.0,"$IP",$IP \ |
||||
|
--dhcp-option=3,$GW \ |
||||
|
--dhcp-range=$RANGE.2,$RANGE.250,infinite --log-dhcp |
||||
|
|
||||
|
# start HTTP server at port 7529 (that are the numbers you type on your phone to write 'slax') |
||||
|
busybox httpd -p 7529 -h /var/state/dnsmasq/root |
@ -0,0 +1,17 @@ |
|||||
|
#!/bin/bash |
||||
|
# Author: Tomas M. <http://www.slax.org/> |
||||
|
|
||||
|
if [ ! -e "$1" ]; then |
||||
|
echo |
||||
|
echo "Erase module directory created by sb2dir" |
||||
|
echo "Usage: $0 [source_directory.sb]" |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
if [ ! -d "$1" ]; then |
||||
|
echo "Directory does not exist: $1" >&2 |
||||
|
exit |
||||
|
fi |
||||
|
|
||||
|
umount "$1" 2>/dev/null |
||||
|
rm -Rf "$1" |
@ -0,0 +1,46 @@ |
|||||
|
#!/bin/bash |
||||
|
|
||||
|
TMP=/tmp/changes$$ |
||||
|
EXCLUDE="^\$|/\$|[.]wh[.][.]wh[.]orph/|^[.]wh[.][.]wh[.]plnk/|^[.]wh[.][.]wh[.]aufs|^var/cache/|^var/backups/|^var/tmp/|^var/log/|^var/lib/apt/|^var/lib/dhcp/|^var/lib/systemd/|^sbin/fsck[.]aufs|^etc/resolv[.]conf|^root/[.]Xauthority|^root/[.]xsession-errors|^root/[.]fehbg|^root/[.]fluxbox/lastwallpaper|^root/[.]fluxbox/menu_resolution|^etc/mtab|^etc/fstab|^boot/|^dev/|^mnt/|^proc/|^run/|^sys/|^tmp/" |
||||
|
CHANGES=/run/initramfs/memory/changes |
||||
|
|
||||
|
if [ "$1" = "" ]; then |
||||
|
echo "" |
||||
|
echo "savechanges - save all changed files in a compressed filesystem bundle" |
||||
|
echo " - excluding some predefined files such as /etc/mtab," |
||||
|
echo " temp & log files, empty directories, apt cache, and such" |
||||
|
echo "" |
||||
|
echo "Usage:" |
||||
|
echo " $0 [ target_file.sb ] [ changes_directory ]" |
||||
|
echo "" |
||||
|
echo "If changes_directory is not specified, /run/initramfs/memory/changes is used." |
||||
|
echo "" |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
if [ ! "$2" = "" ]; then |
||||
|
CHANGES="$2" |
||||
|
fi |
||||
|
|
||||
|
# exclude the save_file itself of course |
||||
|
EXCLUDE="$EXCLUDE|^""$(readlink -f "$1" | cut -b 2- | sed -r "s/[.]/[.]/")""\$" |
||||
|
|
||||
|
CWD=$(pwd) |
||||
|
|
||||
|
cd $CHANGES || exit |
||||
|
|
||||
|
mkdir -p $TMP |
||||
|
mount -t tmpfs tmpfs $TMP |
||||
|
|
||||
|
find \( -type d -printf "%p/\n" , -not -type d -print \) \ |
||||
|
| sed -r "s/^[.]\\///" | egrep -v "$EXCLUDE" \ |
||||
|
| while read FILE; do |
||||
|
cp --parents -afr "$FILE" "$TMP" |
||||
|
done |
||||
|
|
||||
|
cd $CWD |
||||
|
|
||||
|
mksquashfs $TMP "$1" -comp xz -b 1024K -always-use-fragments -noappend |
||||
|
|
||||
|
umount $TMP |
||||
|
rmdir $TMP |
@ -0,0 +1,29 @@ |
|||||
|
#!/bin/bash |
||||
|
|
||||
|
if [ "$1" = "rm" ]; then |
||||
|
shift |
||||
|
rmsbdir "$@" |
||||
|
exit $? |
||||
|
fi |
||||
|
|
||||
|
if [ "$1" = "rmdir" ]; then |
||||
|
shift |
||||
|
rmsbdir "$@" |
||||
|
exit $? |
||||
|
fi |
||||
|
|
||||
|
if [ "$1" = "conv" ]; then |
||||
|
shift |
||||
|
fi |
||||
|
|
||||
|
if [ ! -r "$1" ]; then |
||||
|
echo File not found "$1" |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
if [ -d "$1" ]; then |
||||
|
dir2sb "$@" |
||||
|
exit $? |
||||
|
fi |
||||
|
|
||||
|
sb2dir "$@" |
@ -0,0 +1,33 @@ |
|||||
|
#!/bin/bash |
||||
|
# Author: Tomas M. <http://www.slax.org/> |
||||
|
|
||||
|
if [ ! -e "$1" ]; then |
||||
|
echo |
||||
|
echo "Convert .sb compressed module into directory with the same name" |
||||
|
echo "Usage: $0 [source_file.sb] [[optional output_directory]]" |
||||
|
echo " If the output_directory is specified, it must exist" |
||||
|
echo " If the output_directory is not specified, the name source_file.sb" |
||||
|
echo " is used and the directory is overmounted with tmpfs" |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
if [ ! -r "$1" ]; then |
||||
|
echo "File does not exist: $1" >&2 |
||||
|
exit |
||||
|
fi |
||||
|
|
||||
|
if [ "$2" = "" ]; then |
||||
|
SOURCE="$1".x |
||||
|
while [ -e "$SOURCE" ]; do SOURCE="$SOURCE"x; done |
||||
|
mv "$1" "$SOURCE" || exit |
||||
|
mkdir "$1" |
||||
|
mount -t tmpfs tmpfs "$1" |
||||
|
unsquashfs -f -dest "$1" "$SOURCE" >/dev/null || exit |
||||
|
rm "$SOURCE" |
||||
|
else |
||||
|
if [ ! -d "$2" ]; then |
||||
|
echo "Directory does not exist: $2" >&2 |
||||
|
exit |
||||
|
fi |
||||
|
unsquashfs -f -dest "$2" "$1" >/dev/null |
||||
|
fi |
@ -0,0 +1,178 @@ |
|||||
|
#!/bin/bash |
||||
|
# Slax management and control script |
||||
|
# Author: Tomas M <http://www.slax.org/> |
||||
|
|
||||
|
# activate |
||||
|
# deactivate |
||||
|
# list |
||||
|
|
||||
|
|
||||
|
LIVE=/run/initramfs/memory |
||||
|
RAMSTORE=$LIVE/modules |
||||
|
|
||||
|
# Print error message and exit |
||||
|
# $1 = error message |
||||
|
# |
||||
|
die() |
||||
|
{ |
||||
|
echo "$1" >&2 |
||||
|
exit 1 |
||||
|
} |
||||
|
|
||||
|
|
||||
|
print_branches() |
||||
|
{ |
||||
|
local SI BUNDLE LOOP CWD |
||||
|
|
||||
|
SI="/sys/fs/aufs/$(cat /proc/mounts | grep 'aufs / aufs' | egrep -o 'si=([^,) ]+)' | tr = _)" |
||||
|
CWD="$(pwd)" |
||||
|
cd "$SI" |
||||
|
ls -v1 | grep -v xi_path | egrep 'br[0-9]+' | xargs cat | grep memory/bundles | rev | cut -b 4- | rev | while read BUNDLE; do |
||||
|
if mountpoint -q "$BUNDLE"; then |
||||
|
LOOP=$(cat /proc/mounts | fgrep " $BUNDLE squashfs" | cut -d " " -f 1) |
||||
|
echo -n "$BUNDLE" |
||||
|
echo -ne "\t" |
||||
|
losetup $LOOP | sed -r "s:.*[(]|[)].*::g" |
||||
|
fi |
||||
|
done | tac |
||||
|
cd "$CWD" |
||||
|
} |
||||
|
|
||||
|
|
||||
|
# Activate Slax Bundle |
||||
|
# $1 = file to activate |
||||
|
# |
||||
|
activate() |
||||
|
{ |
||||
|
local SB TGT BAS |
||||
|
|
||||
|
SB="$(readlink -f "$1")" |
||||
|
BAS="$(basename "$SB")" |
||||
|
|
||||
|
# check if file exists |
||||
|
if [ ! -r "$SB" ]; then |
||||
|
usage |
||||
|
die "file not found $SB" |
||||
|
fi |
||||
|
|
||||
|
# check if the file is part of aufs union, if yes we need to copy it outside |
||||
|
if df "$SB" | cut -d " " -f 1 | grep -q aufs; then |
||||
|
TGT="$RAMSTORE" |
||||
|
mkdir -p "$TGT" |
||||
|
if [ -r $TGT/$BAS ]; then die "File exists: $TGT/$BAS"; fi |
||||
|
cp -n "$SB" "$TGT/$BAS" |
||||
|
if [ $? -ne 0 ]; then die "Error copying file to $TGT/$BAS. Not enough free RAM or disk space?"; fi |
||||
|
SB="$TGT/$BAS" |
||||
|
fi |
||||
|
|
||||
|
# check if this particular file is already activated |
||||
|
if print_branches | cut -f 2 | fgrep -q "$SB"; then |
||||
|
exit |
||||
|
fi |
||||
|
|
||||
|
# mount remount,add |
||||
|
TGT="$LIVE/bundles/$BAS" |
||||
|
mkdir -p "$TGT" |
||||
|
|
||||
|
mount -n -o loop,ro "$SB" "$TGT" |
||||
|
if [ $? -ne 0 ]; then |
||||
|
die "Error mounting $SB to $TGT, perhaps corrupted download" |
||||
|
fi |
||||
|
|
||||
|
# add current branch to aufs union |
||||
|
mount -t aufs -o remount,add:1:"$TGT" aufs / |
||||
|
if [ $? -ne 0 ]; then |
||||
|
umount "$TGT" |
||||
|
rmdir "$TGT" |
||||
|
die "Error attaching bundle filesystem to Slax" |
||||
|
fi |
||||
|
|
||||
|
echo "Slax Bundle activated: $BAS" |
||||
|
} |
||||
|
|
||||
|
|
||||
|
# Deactivate Slax bundle of the given name |
||||
|
# $1 = path to bundle file, or its name |
||||
|
# |
||||
|
deactivate() |
||||
|
{ |
||||
|
local BUNDLES SB MATCH LOOP LOOPFILE |
||||
|
|
||||
|
BUNDLES=$LIVE/bundles |
||||
|
MODULES=$LIVE/modules |
||||
|
SB="$(basename "$1")" |
||||
|
|
||||
|
rmdir "$BUNDLES/$SB" 2>/dev/null # this fails unless the dir is |
||||
|
rmdir "$BUNDLES/$SB.sb" 2>/dev/null # forgotten there empty. It's safe this way |
||||
|
|
||||
|
if [ ! -d "$BUNDLES/$SB" ]; then |
||||
|
# we don't have real filename match, lets try to add .sb extension |
||||
|
if [ ! -d "$BUNDLES/$SB.sb" ]; then |
||||
|
# no, still no match. Lets use some guesswork |
||||
|
SB=$(print_branches | cut -f 2 | egrep -o "/[0-9]+-$SB.sb\$" | tail -n 1 | xargs -r basename) |
||||
|
else |
||||
|
SB="$SB.sb" |
||||
|
fi |
||||
|
fi |
||||
|
|
||||
|
if [ "$SB" = "" -o ! -d "$BUNDLES/$SB" ]; then |
||||
|
die "can't find active slax bundle $1" |
||||
|
fi |
||||
|
|
||||
|
echo "Attempting to deactivate Slax bundle $SB..." |
||||
|
mount -t aufs -o remount,verbose,del:"$BUNDLES/$SB" aufs / 2>/dev/null |
||||
|
if [ $? -ne 0 ]; then |
||||
|
die "Unable to deactivate Slax Bundle - still in use. See dmesg for more." |
||||
|
fi |
||||
|
|
||||
|
# remember what loop device was the bundle mounted to, it may be needed later |
||||
|
LOOP="$(cat /proc/mounts | fgrep " $BUNDLES/$SB " | cut -d " " -f 1)" |
||||
|
LOOPFILE="$(losetup "$LOOP" | cut -d " " -f 3 | sed -r 's:^.|.$::g')" |
||||
|
|
||||
|
umount "$BUNDLES/$SB" 2>/dev/null |
||||
|
if [ $? -ne 0 ]; then |
||||
|
die "Unable to umount Slax bundle loop-mount $BUNDLES/$SB" |
||||
|
fi |
||||
|
rmdir "$BUNDLES/$SB" |
||||
|
|
||||
|
# free the loop device manually since umount fails to do that if the bundle was activated on boot |
||||
|
losetup -d "$LOOP" 2>/dev/null |
||||
|
|
||||
|
if echo "$LOOPFILE" | grep -q $RAMSTORE; then |
||||
|
rm -f $LOOPFILE |
||||
|
fi |
||||
|
|
||||
|
echo "Slax Bundle deactivated: $SB" |
||||
|
} |
||||
|
|
||||
|
|
||||
|
usage() |
||||
|
{ |
||||
|
echo "Usage: $0 [ activate | deactivate | list ] [ file.sb ]" >&2 |
||||
|
if [ "$1" != "" ]; then |
||||
|
echo "$1" >&2 |
||||
|
fi |
||||
|
} |
||||
|
|
||||
|
|
||||
|
if [ "$1" = "" ]; then |
||||
|
usage |
||||
|
die |
||||
|
fi |
||||
|
|
||||
|
if [ "$1" = "activate" ]; then |
||||
|
activate "$2" |
||||
|
fi |
||||
|
|
||||
|
if [ "$1" = "deactivate" ]; then |
||||
|
deactivate "$2" |
||||
|
fi |
||||
|
|
||||
|
if [ "$1" = "list" ]; then |
||||
|
print_branches |
||||
|
fi |
||||
|
|
||||
|
if [ "$1" = "savechanges" ]; then |
||||
|
shift |
||||
|
savechanges "$@" |
||||
|
fi |
@ -0,0 +1,11 @@ |
|||||
|
#!/bin/bash |
||||
|
if [ "$#" -lt 1 ]; then |
||||
|
echo "Usage: sudo [command] [arguments]" |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
if [ "$UID" = 0 ]; then |
||||
|
exec "$@" |
||||
|
fi |
||||
|
|
||||
|
echo "Sudo is not installed. Run the command as root or install sudo." |
@ -0,0 +1,38 @@ |
|||||
|
[Unit] |
||||
|
Description=Load AppArmor profiles |
||||
|
DefaultDependencies=no |
||||
|
Before=sysinit.target |
||||
|
After=local-fs.target |
||||
|
After=systemd-journald-audit.socket |
||||
|
RequiresMountsFor=/var/cache/apparmor |
||||
|
AssertPathIsReadWrite=/sys/kernel/security/apparmor/.load |
||||
|
ConditionSecurity=apparmor |
||||
|
Documentation=man:apparmor(7) |
||||
|
Documentation=https://gitlab.com/apparmor/apparmor/wikis/home/ |
||||
|
|
||||
|
# Don't start this unit on the Ubuntu Live CD |
||||
|
ConditionPathExists=!/rofs/etc/apparmor.d |
||||
|
|
||||
|
# Don't start this unit on the Debian Live CD when using overlayfs |
||||
|
ConditionPathExists=!/run/live/overlay/work |
||||
|
|
||||
|
# Don't start this unit on Slax Live CD |
||||
|
ConditionPathExists=!/run/initramfs/lib/livekitlib |
||||
|
|
||||
|
[Service] |
||||
|
Type=oneshot |
||||
|
ExecStart=/lib/apparmor/apparmor.systemd reload |
||||
|
ExecReload=/lib/apparmor/apparmor.systemd reload |
||||
|
|
||||
|
# systemd maps 'restart' to 'stop; start' which means removing AppArmor confinement |
||||
|
# from running processes (and not being able to re-apply it later). |
||||
|
# Upstream systemd developers refused to implement an option that allows overriding |
||||
|
# this behaviour, therefore we have to make ExecStop a no-op to error out on the |
||||
|
# safe side. |
||||
|
# |
||||
|
# If you really want to unload all AppArmor profiles, run aa-teardown |
||||
|
ExecStop=/bin/true |
||||
|
RemainAfterExit=yes |
||||
|
|
||||
|
[Install] |
||||
|
WantedBy=sysinit.target |
@ -0,0 +1,16 @@ |
|||||
|
[Unit] |
||||
|
Description=DHCP Client |
||||
|
Documentation=man:dhclient(8) |
||||
|
Wants=network.target |
||||
|
After=network-pre.target systemd-sysctl.service systemd-modules-load.service |
||||
|
Before=network.target shutdown.target network-online.target |
||||
|
ConditionPathExists=!/run/initramfs/net.up.flag |
||||
|
|
||||
|
[Service] |
||||
|
Type=forking |
||||
|
ExecStart=-/bin/sh -c 'udevadm settle && dhclient -nw' |
||||
|
PIDFile=/run/dhclient.pid |
||||
|
|
||||
|
[Install] |
||||
|
WantedBy=multi-user.target |
||||
|
WantedBy=network-online.target |
@ -0,0 +1,54 @@ |
|||||
|
# This file is part of systemd. |
||||
|
# |
||||
|
# systemd is free software; you can redistribute it and/or modify it |
||||
|
# under the terms of the GNU Lesser General Public License as published by |
||||
|
# the Free Software Foundation; either version 2.1 of the License, or |
||||
|
# (at your option) any later version. |
||||
|
|
||||
|
[Unit] |
||||
|
Description=Getty on %I |
||||
|
Documentation=man:agetty(8) man:systemd-getty-generator(8) |
||||
|
Documentation=http://0pointer.de/blog/projects/serial-console.html |
||||
|
After=systemd-user-sessions.service plymouth-quit-wait.service |
||||
|
After=rc-local.service |
||||
|
|
||||
|
# If additional gettys are spawned during boot then we should make |
||||
|
# sure that this is synchronized before getty.target, even though |
||||
|
# getty.target didn't actually pull it in. |
||||
|
Before=getty.target |
||||
|
IgnoreOnIsolate=yes |
||||
|
|
||||
|
# IgnoreOnIsolate causes issues with sulogin, if someone isolates |
||||
|
# rescue.target or starts rescue.service from multi-user.target or |
||||
|
# graphical.target. |
||||
|
Conflicts=rescue.service |
||||
|
Before=rescue.service |
||||
|
|
||||
|
# On systems without virtual consoles, don't start any getty. Note |
||||
|
# that serial gettys are covered by serial-getty@.service, not this |
||||
|
# unit. |
||||
|
ConditionPathExists=/dev/tty0 |
||||
|
|
||||
|
[Service] |
||||
|
# the VT is cleared by TTYVTDisallocate |
||||
|
ExecStart=-/sbin/agetty --noclear %I $TERM |
||||
|
Type=idle |
||||
|
Restart=always |
||||
|
RestartSec=0 |
||||
|
UtmpIdentifier=%I |
||||
|
TTYPath=/dev/%I |
||||
|
TTYReset=yes |
||||
|
TTYVHangup=yes |
||||
|
#TM do not clear VT: |
||||
|
TTYVTDisallocate=no |
||||
|
KillMode=process |
||||
|
IgnoreSIGPIPE=no |
||||
|
SendSIGHUP=yes |
||||
|
|
||||
|
# Unset locale for the console getty since the console has problems |
||||
|
# displaying some internationalized messages. |
||||
|
Environment=LANG= LANGUAGE= LC_CTYPE= LC_NUMERIC= LC_TIME= LC_COLLATE= LC_MONETARY= LC_MESSAGES= LC_PAPER= LC_NAME= LC_ADDRESS= LC_TELEPHONE= LC_MEASUREMENT= LC_IDENTIFICATION= |
||||
|
|
||||
|
[Install] |
||||
|
WantedBy=getty.target |
||||
|
DefaultInstance=tty1 |
@ -0,0 +1,18 @@ |
|||||
|
[Unit] |
||||
|
Description=OpenBSD Secure Shell server |
||||
|
After=network.target auditd.service |
||||
|
ConditionPathExists=!/etc/ssh/sshd_not_to_be_run |
||||
|
|
||||
|
[Service] |
||||
|
EnvironmentFile=-/etc/default/ssh |
||||
|
ExecStartPre=-/bin/sh -c 'if ! ls /etc/ssh/ssh_host_* >/dev/null 2>&1; then /usr/sbin/dpkg-reconfigure openssh-server; fi' |
||||
|
ExecStart=/usr/sbin/sshd -D $SSHD_OPTS |
||||
|
ExecReload=/bin/kill -HUP $MAINPID |
||||
|
KillMode=process |
||||
|
Restart=on-failure |
||||
|
RestartPreventExitStatus=255 |
||||
|
Type=notify |
||||
|
|
||||
|
[Install] |
||||
|
WantedBy=multi-user.target |
||||
|
Alias=sshd.service |
@ -0,0 +1,2 @@ |
|||||
|
# we don't care about loop* and ram* devices |
||||
|
KERNEL=="[!lr]*", SUBSYSTEM=="block", RUN+="/usr/sbin/slax-automount %r/%k" |
@ -0,0 +1,23 @@ |
|||||
|
#!/bin/bash |
||||
|
|
||||
|
LOCK=/run/lock/gtk-bookmark-update-lock |
||||
|
BOOKMARKS=/root/.gtk-bookmarks |
||||
|
|
||||
|
# make sure to avoid parallel execution by using mkdir as lock |
||||
|
while true; do |
||||
|
mkdir $LOCK 2>/dev/null |
||||
|
if [ $? = 0 ]; then |
||||
|
break |
||||
|
fi |
||||
|
done |
||||
|
|
||||
|
cat $BOOKMARKS | fgrep -v ///media/ | fgrep -v "file:/// /" | egrep -v '^$' > $BOOKMARKS.tmp 2>/dev/null |
||||
|
ls -1 /media | sort | while read LINE; do |
||||
|
echo "file:///media/$LINE $LINE" >> $BOOKMARKS.tmp |
||||
|
done |
||||
|
|
||||
|
echo "file:/// /" >> $BOOKMARKS.tmp # add root at the beginning |
||||
|
|
||||
|
mv -f $BOOKMARKS.tmp $BOOKMARKS |
||||
|
|
||||
|
rmdir $LOCK |
@ -0,0 +1,67 @@ |
|||||
|
#!/bin/bash |
||||
|
# Recreate fstab entries in /etc/fstab and make /media directories |
||||
|
# This script is called by udev rules, see /lib/udev/rules.d/ |
||||
|
# |
||||
|
# Author: Tomas M <http://slax.linux-live.org/> |
||||
|
|
||||
|
# Variables available in udev environment: |
||||
|
# $ACTION (eg: add, remove) |
||||
|
# $DEVNAME (full device node name including path) |
||||
|
# $DEVTYPE (eg: disk) |
||||
|
# $ID_FS_TYPE (eg: ext3) |
||||
|
# $MAJOR and $MINOR numbers |
||||
|
# $SUBSYSTEM (eg: block) |
||||
|
|
||||
|
PATH=$PATH:/usr/bin:/usr/sbin:/bin:/sbin |
||||
|
|
||||
|
BAS="$(basename "$DEVNAME")" |
||||
|
UNIT="media-$BAS.mount" |
||||
|
MNT="/media/$BAS" |
||||
|
TARGET="/etc/systemd/system/$UNIT" |
||||
|
|
||||
|
|
||||
|
# exit if noautomount boot parameter is present |
||||
|
if cat /proc/cmdline | grep -q noautomount; then |
||||
|
exit |
||||
|
fi |
||||
|
|
||||
|
# exit if 'automount' boot parameter is missing |
||||
|
if ! cat /proc/cmdline | grep -q automount; then |
||||
|
exit |
||||
|
fi |
||||
|
|
||||
|
|
||||
|
if [ "$ACTION" = "add" -o "$ACTION" = "change" ]; then |
||||
|
if [ ! -r "$TARGET" ]; then # skip if exists |
||||
|
|
||||
|
if [ "$ID_FS_TYPE" != "" -a "$(cat /proc/filesystems | grep "$ID_FS_TYPE")" != "" ]; then |
||||
|
|
||||
|
mkdir -p "$MNT" |
||||
|
|
||||
|
echo "[Unit]" >$TARGET |
||||
|
echo "Description=Disk $BAS" >>$TARGET |
||||
|
echo "" >>$TARGET |
||||
|
echo "[Mount]" >>$TARGET |
||||
|
echo "What=$DEVNAME" >>$TARGET |
||||
|
echo "Where=$MNT" >>$TARGET |
||||
|
echo "Type=$ID_FS_TYPE" >>$TARGET |
||||
|
echo "Options=defaults" >>$TARGET |
||||
|
echo "" >>$TARGET |
||||
|
echo "[Install]" >>$TARGET |
||||
|
echo "WantedBy=multi-user.target" >>$TARGET |
||||
|
|
||||
|
systemctl enable $UNIT |
||||
|
systemctl start $UNIT |
||||
|
|
||||
|
gtk-bookmarks-update |
||||
|
DISPLAY=:0.0 pcmanfm -n file://$MNT >/dev/null 2>&1 |
||||
|
fi |
||||
|
fi |
||||
|
fi |
||||
|
|
||||
|
if [ "$ACTION" = "remove" ]; then |
||||
|
systemctl disable $UNIT |
||||
|
rm "$TARGET" |
||||
|
rmdir "$MNT" |
||||
|
gtk-bookmarks-update |
||||
|
fi |
@ -0,0 +1,42 @@ |
|||||
|
UI vesamenu.c32 |
||||
|
|
||||
|
PROMPT 0 |
||||
|
TIMEOUT 40 |
||||
|
|
||||
|
MENU CLEAR |
||||
|
MENU HIDDEN |
||||
|
MENU HIDDENKEY Enter default |
||||
|
MENU BACKGROUND /minios/boot/bootlogo.png |
||||
|
|
||||
|
MENU WIDTH 80 |
||||
|
MENU MARGIN 20 |
||||
|
MENU ROWS 5 |
||||
|
MENU TABMSGROW 9 |
||||
|
MENU CMDLINEROW 9 |
||||
|
MENU HSHIFT 0 |
||||
|
MENU VSHIFT 19 |
||||
|
|
||||
|
MENU COLOR BORDER 30;40 #00000000 #00000000 none |
||||
|
MENU COLOR SEL 47;30 #FF000000 #FFFFFFFF none |
||||
|
MENU COLOR UNSEL 37;40 #FFFFFFFF #FF000000 none |
||||
|
MENU COLOR TABMSG 32;40 #FF60CA00 #FF000000 none |
||||
|
|
||||
|
F1 help.txt /minios/boot/zblack.png |
||||
|
|
||||
|
MENU AUTOBOOT Press Esc for options, automatic boot in # second{,s} ... |
||||
|
MENU TABMSG [F1] help [Tab] cmdline > |
||||
|
|
||||
|
LABEL default |
||||
|
MENU LABEL Run MiniOS Slax (Persistent changes) |
||||
|
KERNEL /minios/boot/vmlinuz |
||||
|
APPEND vga=normal initrd=/minios/boot/initrfs.img load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 consoleblank=0 slax.flags=perch,automount net.ifnames=0 biosdevname=0 |
||||
|
|
||||
|
LABEL live |
||||
|
MENU LABEL Run MiniOS Slax (Fresh start) |
||||
|
KERNEL /minios/boot/vmlinuz |
||||
|
APPEND vga=normal initrd=/minios/boot/initrfs.img load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 consoleblank=0 slax.flags=automount net.ifnames=0 biosdevname=0 |
||||
|
|
||||
|
LABEL toram |
||||
|
MENU LABEL Run MiniOS Slax (Copy to RAM) |
||||
|
KERNEL /minios/boot/vmlinuz |
||||
|
APPEND vga=normal initrd=/minios/boot/initrfs.img load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 consoleblank=0 slax.flags=toram net.ifnames=0 biosdevname=0 |
@ -0,0 +1,106 @@ |
|||||
|
#!/bin/sh |
||||
|
exec /bin/bash "$(dirname "$0")"/bootinst.sh |
||||
|
exec /bin/sh "$(dirname "$0")"/bootinst.sh |
||||
|
|
||||
|
@echo off |
||||
|
COLOR 2F |
||||
|
cls |
||||
|
echo =============================================================================== |
||||
|
echo. |
||||
|
echo ________.__ |
||||
|
echo / ____/^| ^| _____ ___ ___ |
||||
|
echo \____ \ ^| ^| \__ \ \ \/ / |
||||
|
echo / \^| ^|__/ __ \_^> ^< |
||||
|
echo /______ /^|____(____ /__/\_ \ |
||||
|
echo \/ \/ \/ |
||||
|
echo. |
||||
|
echo =============================================================================== |
||||
|
echo. |
||||
|
|
||||
|
set DISK=none |
||||
|
set BOOTFLAG=boot666s.tmp |
||||
|
|
||||
|
:checkPrivileges |
||||
|
mkdir "%windir%\AdminCheck" 2>nul |
||||
|
if '%errorlevel%' == '0' rmdir "%windir%\AdminCheck" & goto gotPrivileges else goto getPrivileges |
||||
|
|
||||
|
:getPrivileges |
||||
|
ECHO. |
||||
|
ECHO Administrator Rights are required |
||||
|
ECHO Invoking UAC for Privilege Escalation |
||||
|
ECHO. |
||||
|
runadmin.vbs %0 |
||||
|
goto end |
||||
|
|
||||
|
:gotPrivileges |
||||
|
CD /D "%~dp0" |
||||
|
|
||||
|
echo This file is used to determine current drive letter. It should be deleted. >\%BOOTFLAG% |
||||
|
if not exist \%BOOTFLAG% goto readOnly |
||||
|
|
||||
|
echo.|set /p=wait please |
||||
|
for %%d in ( C D E F G H I J K L M N O P Q R S T U V W X Y Z ) do echo.|set /p=. & if exist %%d:\%BOOTFLAG% set DISK=%%d |
||||
|
echo . . . . . . . . . . |
||||
|
del \%BOOTFLAG% |
||||
|
if %DISK% == none goto DiskNotFound |
||||
|
|
||||
|
wscript.exe samedisk.vbs %windir% %DISK% |
||||
|
if %ERRORLEVEL% == 99 goto refuseDisk |
||||
|
|
||||
|
echo Setting up boot record for %DISK%: ... |
||||
|
|
||||
|
if %OS% == Windows_NT goto setupNT |
||||
|
goto setup95 |
||||
|
|
||||
|
:setupNT |
||||
|
\slax\boot\syslinux.exe -maf -d /slax/boot/ %DISK%: |
||||
|
if %ERRORLEVEL% == 0 goto setupEFI |
||||
|
goto errorFound |
||||
|
|
||||
|
:setup95 |
||||
|
\slax\boot\syslinux.com -maf -d /slax/boot/ %DISK%: |
||||
|
if %ERRORLEVEL% == 0 goto setupEFI |
||||
|
goto errorFound |
||||
|
|
||||
|
:setupEFI |
||||
|
mkdir %DISK%:\EFI\Boot |
||||
|
copy \slax\boot\EFI\Boot\* %DISK%:\EFI\Boot |
||||
|
goto setupDone |
||||
|
|
||||
|
:setupDone |
||||
|
echo Installation finished. |
||||
|
goto pauseit |
||||
|
|
||||
|
:errorFound |
||||
|
color 4F |
||||
|
echo. |
||||
|
echo Error installing boot loader |
||||
|
goto pauseit |
||||
|
|
||||
|
:refuseDisk |
||||
|
color 4F |
||||
|
echo. |
||||
|
echo Directory %DISK%:\slax\boot\ seems to be on the same physical disk as your Windows. |
||||
|
echo Installing bootloader would harm your Windows and thus is disabled. |
||||
|
echo Please use different drive and try again. |
||||
|
goto pauseit |
||||
|
|
||||
|
:readOnly |
||||
|
color 4F |
||||
|
echo. |
||||
|
echo You're starting this installer from a read-only media, this will not work. |
||||
|
goto pauseit |
||||
|
|
||||
|
:DiskNotFound |
||||
|
color 4F |
||||
|
echo. |
||||
|
echo Error: can't discover current drive letter |
||||
|
|
||||
|
:pauseit |
||||
|
if "%1" == "auto" goto end |
||||
|
|
||||
|
echo. |
||||
|
echo Press any key... |
||||
|
pause > nul |
||||
|
|
||||
|
:end |
@ -0,0 +1,158 @@ |
|||||
|
#!/bin/sh |
||||
|
# |
||||
|
# This script will setup booting from disk (USB or harddrive) |
||||
|
# |
||||
|
# If you see this file in a text editor instead of getting it executed, |
||||
|
# then it is missing executable permissions (chmod). You can try to set |
||||
|
# exec permissions for this file by using: chmod a+x bootinst.sh |
||||
|
# Alternatively, you may try to run bootinst.bat file instead |
||||
|
# |
||||
|
# Scrolling down will reveal the actual code of this script. |
||||
|
# |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
# if we're running this from X, re-run the script in konsole or xterm |
||||
|
if [ "$DISPLAY" != "" ]; then |
||||
|
if [ "$1" != "--rex" -a "$2" != "--rex" ]; then |
||||
|
konsole --nofork -e /bin/sh $0 --rex 2>/dev/null || xterm -e /bin/sh $0 --rex 2>/dev/null || /bin/sh $0 --rex 2>/dev/null |
||||
|
exit |
||||
|
fi |
||||
|
fi |
||||
|
|
||||
|
# make sure I am root |
||||
|
if [ "$UID" != "0" -a "$UID" != "" ]; then |
||||
|
echo "" |
||||
|
echo "You are not root. You must run bootinst script as root." |
||||
|
echo "The bootinst script needs direct access to your boot device." |
||||
|
echo "Use sudo or kdesudo or similar wrapper to execute this." |
||||
|
read junk |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
# change working directory to dir from which we are started |
||||
|
CWD="$(pwd)" |
||||
|
BOOT="$(dirname "$0")" |
||||
|
BOOT="$(realpath "$BOOT" 2>/dev/null || echo $BOOT)" |
||||
|
cd "$BOOT" |
||||
|
|
||||
|
# find out device and mountpoint |
||||
|
PART="$(df . | tail -n 1 | tr -s " " | cut -d " " -f 1)" |
||||
|
DEV="$(echo "$PART" | sed -r "s:[0-9]+\$::" | sed -r "s:([0-9])[a-z]+\$:\\1:i")" #" |
||||
|
|
||||
|
# check if disk is already bootable. Mostly for Windows discovery |
||||
|
if [ "$(fdisk -l "$DEV" | fgrep "$DEV" | fgrep "*")" != "" ]; then |
||||
|
echo "" |
||||
|
echo "Partition $PART seems to be located on a physical disk," |
||||
|
echo "which is already bootable. If you continue, your drive $DEV" |
||||
|
echo "will boot only Slax by default." |
||||
|
echo "Press [Enter] to continue, or [Ctrl+C] to abort..." |
||||
|
read junk |
||||
|
fi |
||||
|
|
||||
|
ARCH=$(uname -m) |
||||
|
if [ "$ARCH" = "x86_64" ]; then ARCH=64; else ARCH=32; fi |
||||
|
EXTLINUX=extlinux.x$ARCH |
||||
|
|
||||
|
if [ ! -x ./$EXTLINUX ]; then |
||||
|
# extlinux is not executable. There are two possible reasons: |
||||
|
# either the fs is mounted with noexec, or file perms are wrong. |
||||
|
# Try to fix both, no fail on error yet |
||||
|
mount -o remount,exec $DEV |
||||
|
chmod a+x ./$EXTLINUX |
||||
|
fi |
||||
|
|
||||
|
if [ ! -x ./$EXTLINUX ]; then |
||||
|
# extlinux is still not executable. As a last try, copy it to .exe |
||||
|
# because the partition may be mounted with showexec option, from which |
||||
|
# we probably can't escape by remount |
||||
|
cp -f ./$EXTLINUX ./extlinux.exe |
||||
|
EXTLINUX=extlinux.exe |
||||
|
fi |
||||
|
|
||||
|
# install syslinux bootloader |
||||
|
echo "* attempting to install bootloader to $BOOT..." |
||||
|
|
||||
|
./"$EXTLINUX" --install "$BOOT" |
||||
|
|
||||
|
if [ $? -ne 0 ]; then |
||||
|
echo "Error installing boot loader." |
||||
|
echo "Read the errors above and press enter to exit..." |
||||
|
read junk |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
if [ "$DEV" != "$PART" ]; then |
||||
|
# Setup MBR on the first block |
||||
|
echo "* setup MBR on $DEV" |
||||
|
dd bs=440 count=1 conv=notrunc if="$BOOT/mbr.bin" of="$DEV" 2>/dev/null |
||||
|
|
||||
|
# Toggle bootable flags |
||||
|
echo "* set bootable flag for $PART" |
||||
|
PART="$(echo "$PART" | sed -r "s:.*[^0-9]::")" |
||||
|
( |
||||
|
fdisk -l "$DEV" | fgrep "*" | fgrep "$DEV" | cut -d " " -f 1 \ |
||||
|
| sed -r "s:.*[^0-9]::" | xargs -I '{}' echo -ne "a\n{}\n" |
||||
|
echo a |
||||
|
echo $PART |
||||
|
echo w |
||||
|
) | fdisk $DEV >/dev/null 2>&1 |
||||
|
fi |
||||
|
|
||||
|
# UEFI boot loader |
||||
|
mkdir -p "$BOOT/../../EFI" |
||||
|
mv "EFI/Boot" "$BOOT/../../EFI/" |
||||
|
|
||||
|
echo "Boot installation finished." |
||||
|
echo "Press Enter..." |
||||
|
read junk |
||||
|
cd "$CWD" |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 10 KiB |
@ -0,0 +1,19 @@ |
|||||
|
|
||||
|
Welcome |
||||
|
|
||||
|
If you need to edit boot command line (for advanced users), hit [Tab]. |
||||
|
When finished, press [Enter]. |
||||
|
|
||||
|
|
||||
|
Keep changes persistent |
||||
|
|
||||
|
Save all filesystem modifications to 'changes' directory and restore |
||||
|
those changes next time you boot. Only usable while running from a |
||||
|
writable media such as USB device or hard disk. |
||||
|
|
||||
|
|
||||
|
Copy to RAM |
||||
|
|
||||
|
Copies all data to memory during startup so you can eject the boot device. |
||||
|
Requires enough RAM to store all modules and to run the system. |
||||
|
|