parent
4d25c4e1ff
commit
22f7f75d8d
@ -0,0 +1,340 @@ |
||||
GNU GENERAL PUBLIC LICENSE |
||||
Version 2, June 1991 |
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc. |
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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 Lesser 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) <year> <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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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) year 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 Lesser General |
||||
Public License instead of this License. |
@ -0,0 +1,76 @@ |
||||
# umbrella mkimage-profiles makefile:
|
||||
# iterate over multiple goals/arches,
|
||||
# collect proceedings
|
||||
|
||||
# preferences
|
||||
-include $(HOME)/.mkimage/profiles.mk |
||||
|
||||
# for immediate assignment
|
||||
ifndef ARCH |
||||
ARCH := $(shell arch \
|
||||
| sed 's/i686/i586/; s/armv7.*/armh/; s/armv.*/arm/')
|
||||
endif |
||||
|
||||
ifndef ARCHES |
||||
ARCHES := $(ARCH)
|
||||
endif |
||||
|
||||
export ARCHES ARCH |
||||
|
||||
export PATH := $(CURDIR)/bin:$(PATH)
|
||||
|
||||
# recursive make considered useful for m-p
|
||||
MAKE += -r --no-print-directory
|
||||
|
||||
export DIRECT_TARGETS := help help/distro help/ve help/vm clean distclean check
|
||||
.PHONY: $(DIRECT_TARGETS) |
||||
|
||||
# these build nothing so no use of reports either
|
||||
$(DIRECT_TARGETS): |
||||
@$(MAKE) -f main.mk REPORT= $@
|
||||
|
||||
export NUM_TARGETS := $(words $(MAKECMDGOALS))
|
||||
|
||||
# for pipefail
|
||||
SHELL = /bin/bash
|
||||
|
||||
# don't even consider remaking a configuration file
|
||||
.PHONY: $(HOME)/.mkimage/profiles.mk |
||||
|
||||
# real targets need real work
|
||||
%: |
||||
@n=1; \
|
||||
set -o pipefail; \
|
||||
say() { echo "$$@" >&2; }; \
|
||||
if [ "$(NUM_TARGETS)" -gt 1 ]; then \
|
||||
n="`echo $(MAKECMDGOALS) \
|
||||
| tr '[[:space:]]' '\n' \
|
||||
| grep -nx "$@" \
|
||||
| cut -d: -f1`"; \
|
||||
say "** goal: $@ [$$n/$(NUM_TARGETS)]"; \
|
||||
else \
|
||||
say "** goal: $@"; \
|
||||
fi; \
|
||||
for ARCH in $(ARCHES); do \
|
||||
if [ -z "$(QUIET)" ]; then \
|
||||
if [ "$$ARCH" != "$(firstword $(ARCHES))" ]; then \
|
||||
say; \
|
||||
fi; \
|
||||
say "** ARCH: $$ARCH"; \
|
||||
fi; \
|
||||
if [ -n "$(REPORT)" ]; then \
|
||||
REPORT_PATH=$$(mktemp --tmpdir mkimage-profiles.report.XXXXXXX); \
|
||||
$(MAKE) -f main.mk ARCH=$$ARCH $@ | report-filter > $$REPORT_PATH || exit 1; \
|
||||
$(MAKE) -f reports.mk ARCH=$$ARCH REPORT=$(REPORT) REPORT_PATH=$$REPORT_PATH; \
|
||||
else \
|
||||
$(MAKE) -f main.mk ARCH=$$ARCH $@ || exit 1; \
|
||||
fi; \
|
||||
if [ -n "$(AUTOCLEAN)" ]; then $(MAKE) distclean; fi; \
|
||||
done; \
|
||||
if [ "$$n" -lt "$(NUM_TARGETS)" ]; then say; fi
|
||||
|
||||
docs: |
||||
@$(MAKE) -C doc
|
||||
|
||||
docs-publish: |
||||
@$(MAKE) -C doc publish
|
@ -0,0 +1,54 @@ |
||||
English quickstart: make syslinux.iso (after setting up |
||||
http://en.altlinux.org/Hasher; large tmpfs helps a lot). |
||||
|
||||
требуется |
||||
~~~~~~~~~ |
||||
- ALT 8.0 или выше (возможна адаптация "вниз", см. ветки) |
||||
- установленный mkimage (свежий, как и hasher) |
||||
- пользователь с правом запуска hasher и подключения /proc к нему |
||||
|
||||
полезно |
||||
~~~~~~~ |
||||
- смонтированный tmpfs на несколько гигабайт (или укажите BUILDDIR) |
||||
* например, в /tmp или /home/USER/hasher |
||||
* каталог из prefix в /etc/hasher-priv/system |
||||
- установленный git-core и настроенный ~/.gitconfig |
||||
|
||||
команды |
||||
~~~~~~~ |
||||
от имени root:: |
||||
---- |
||||
# apt-get install mkimage mkimage-preinstall hasher git-core |
||||
# hasher-useradd USER |
||||
---- |
||||
|
||||
от имени указанного пользователя (после повторного входа):: |
||||
---- |
||||
$ git config --global user.email "my@email" |
||||
$ git config --global user.name "My Name" |
||||
$ mkdir -p ~/out ~/tmp |
||||
---- |
||||
|
||||
тестовая сборка (в каталоге mkimage-profiles):: |
||||
---- |
||||
$ make syslinux.iso |
||||
---- |
||||
|
||||
список доступных целей:: |
||||
---- |
||||
$ make help |
||||
---- |
||||
|
||||
переменные, влияющие на результат (подробнее в doc/params.txt):: |
||||
--- |
||||
$ make ARCH=i586 APTCONF=~/apt/apt.conf.i586 REPORT=1 ve/generic.tar |
||||
--- |
||||
|
||||
ссылки |
||||
~~~~~~ |
||||
- http://www.altlinux.org/tmpfs |
||||
- http://www.altlinux.org/hasher |
||||
- http://www.altlinux.org/mkimage |
||||
- http://www.altlinux.org/m-p |
||||
- http://www.altlinux.org/m-p-howto ("как поправить под себя") |
||||
- http://www.altlinux.org/starterkits/builder (сборочный LiveCD) |
@ -0,0 +1,84 @@ |
||||
== Welcome to m-p! == |
||||
|
||||
*Brief summary* |
||||
|
||||
Configurables: ~/.mkimage/profiles.mk; |
||||
see doc/params.txt and conf.d/README |
||||
|
||||
License: GPLv2+, see COPYING |
||||
|
||||
Most docs are in Russian, welcome to learn it or ask for English. |
||||
|
||||
Задача: |
||||
|
||||
* конфигурирование и создание образов на базе ALT Linux |
||||
|
||||
Концепция: |
||||
|
||||
* конфигурация, как и образ -- объект постадийной сборки |
||||
* метапрофиль служит репозиторием для построения индивидуального |
||||
профиля, по которому создаётся итоговый образ |
||||
|
||||
Особенности: |
||||
|
||||
* метапрофиль при сборке может быть доступен только на чтение |
||||
* для сборки подыскивается предпочтительно tmpfs |
||||
* в профиль копируются только нужные объекты; |
||||
он автономен относительно метапрофиля |
||||
|
||||
Стадии работы: |
||||
|
||||
* инициализация сборочного профиля |
||||
* сборка конфигурации образа |
||||
* наполнение сборочного профиля |
||||
* сборка образа |
||||
|
||||
Объекты: |
||||
|
||||
* дистрибутивы и виртуальные среды/машины: |
||||
** описываются в conf.d/*.mk |
||||
** могут основываться на предшественниках, расширяя их |
||||
** дистрибутивы также включают один или более субпрофилей по надобности |
||||
** желательно избегать множественного наследования, см. тж. фичи |
||||
|
||||
* субпрофили: |
||||
** список собирается в $(SUBPROFILES) |
||||
** базовые комплекты помещены в подкаталогах под sub.in/; |
||||
их наборы скриптов могут расширяться фичами |
||||
|
||||
* фичи: |
||||
** законченные блоки функциональности (или наборы таковых) |
||||
** описываются в индивидуальных features.in/*/config.mk |
||||
** могут требовать другие фичи, а также субпрофили |
||||
** накопительный список собирается в $(FEATURES) |
||||
** при сборке $(BUILDDIR) содержимое фич добавляется в профиль |
||||
|
||||
* списки пакетов (*_LISTS): |
||||
** _внимание_: не надо создавать фичу, если достаточно списка пакетов! |
||||
** просьба по возможности избегать дублирования (см. bin/pkgdups) |
||||
|
||||
* индивидуальные пакеты (*_PACKAGES): см. тж. conf.d/README |
||||
|
||||
Результат: |
||||
|
||||
* при успешном завершении сборки образ называется по имени цели |
||||
и укладывается в $(IMAGEDIR): |
||||
** указанный явно, |
||||
** либо ~/out/ (если возможно), |
||||
** или $(BUILDDIR)/out/ иначе |
||||
* формируются отчёты, если запрошены (REPORT) |
||||
|
||||
См. тж.: |
||||
|
||||
* https://altlinux.org/mkimage-profiles: обзорная документация, в т.ч. howto |
||||
* doc/: |
||||
** params.txt: переменные, указываемые при запуске сборки |
||||
** pkglists.txt: формирование состава образа |
||||
** features.txt: обзор подключаемых особенностей |
||||
|
||||
Примечание: пути в документации задаются от каталога верхнего уровня, |
||||
если не указаны как относительные в явном виде (./) или по смыслу. |
||||
|
||||
Удачи; что не так -- пишите. |
||||
|
||||
Michael Shigorin <mike@altlinux.org>, Anton Midyukov <antohami@altlinux.org> |
@ -0,0 +1,8 @@ |
||||
// these must be unset to avoid picking up |
||||
// /etc/apt/{apt.conf.d,sources.list.d,}/ |
||||
Dir::Etc::main "/dev/null"; |
||||
Dir::Etc::parts "/var/empty"; |
||||
Dir::Etc::SourceParts "/var/empty"; |
||||
|
||||
// this is what caused the whole trouble |
||||
Dir::Etc::sourcelist "/home/tema/mkimage-profiles/myp10"; |
@ -0,0 +1,49 @@ |
||||
#!/bin/sh |
||||
# filter stdin or file for words related to |
||||
# the specified target architecture |
||||
# |
||||
# args: -a arch [-i file] |
||||
|
||||
if [ "$1" = "-a" -a -n "$2" ]; then |
||||
a="$2" |
||||
shift 2 |
||||
else |
||||
cat |
||||
exit |
||||
fi |
||||
|
||||
if [ "$1" = "-i" -a -w "$2" ]; then |
||||
f="$2" |
||||
t="`mktemp`" |
||||
fi |
||||
|
||||
# map meta-arches for prefiltering |
||||
# NB: biarch gets special expansion later |
||||
case "$a" in |
||||
i586) |
||||
A="(IA32|X86)";; |
||||
x86_64) |
||||
A="X86";; |
||||
e2k*) |
||||
A="E2K";; |
||||
aarch64|arm*) |
||||
A="ARM";; |
||||
*) |
||||
A=;; |
||||
esac |
||||
|
||||
# NB: pipe runs in parallel => faster than -e -e |
||||
cat ${f:+"$f"} | |
||||
sed -rn "s/\<([^@ ]*)\>|\<([^@ ]*)@$A\>/\1\2/pg" | |
||||
sed -rn "s/\<([^@ ]*)\>|\<[^@ ]*@\!$A\> */\1/pg" | |
||||
sed -r "s/\<([^@ ]*)@IA32\>/\1@i586 i586-\1@x86_64/g" | |
||||
sed -rn "s/\<([^@ ]*)\>|\<([^@ ]*)@$a\>/\1\2/pg" | |
||||
sed -rn "s/\<([^@ ]*)\>|\<[^@ ]*@\!$a\> */\1/pg" | |
||||
sed -r "s/\<([^@ ]*)@\![^@ ]+\>/\1/g" | |
||||
sed -r "s/\<([^@ ]*)@[^@ ]+\> *//g" | |
||||
sed -r "s/^ +//;s/ +$//" | |
||||
if [ -n "$f" ]; then |
||||
cat > "$t" && mv "$t" "$f" |
||||
else |
||||
cat |
||||
fi |
@ -0,0 +1,100 @@ |
||||
#!/bin/sh |
||||
# script based on initial implementation |
||||
# by Vitaly Gusach (http://gusach.org.ua) |
||||
# |
||||
# purpose: warn on those entries in given packagelists(s) |
||||
# which are definitely absent; the build might still bail out |
||||
# but at least 80% of failures can be predicted early now |
||||
# |
||||
# usage: check-pkg-list [-n pkgnames] [--aptbox $PATH/to/aptbox] pkglist ... |
||||
# (pkgnames file should contain `apt-cache pkgnames`) |
||||
# NB: -n pkgnames MUST go first, if given |
||||
|
||||
RET_ERROR= |
||||
|
||||
error() { echo `basename $0`: $* >&2; exit 1; } |
||||
|
||||
exit_handler() { |
||||
local rc=$? |
||||
trap - EXIT |
||||
rm -f -- "$ftemp" "$fpkgnames" "$fpkgwildcards" "$favaillist" "$fpkgerrors" |
||||
exit $rc |
||||
} |
||||
|
||||
# figure out apt.conf from recent aptbox or fallback to system one |
||||
dump_pkgnames() { |
||||
${APTBOX:+$APTBOX/}apt-cache pkgnames | sort -u > "$favaillist" |
||||
} |
||||
|
||||
check_pkglist() { |
||||
fprofilelist="$1" |
||||
[ -f "$fprofilelist" ] || error "invalid packagelist filename: $fprofilelist" |
||||
# cleaning pkg list from comments, empty lines, |
||||
# splitting several pkgnames on the same line |
||||
sed -e '/^#/d' -e '/^[ ]*$/d' -e 's/ \+$//' -e 's/[ ]\+/\n/g' \ |
||||
< "$fprofilelist" \ |
||||
| sed 's/-$//' \ |
||||
| sort -u \ |
||||
> "$ftemp" # got list of pkgnames we need |
||||
|
||||
# split pkgnames without wildcards and with wildcards |
||||
fgrep -v '*' "$ftemp" > "$fpkgnames" |
||||
fgrep '*' "$ftemp" > "$fpkgwildcards" |
||||
|
||||
# return unavailable packages |
||||
comm -23 "$fpkgnames" "$favaillist" > "$fpkgerrors" |
||||
|
||||
# return unavailable wildcards |
||||
while read i; do |
||||
# replacing * with regexp's \.+ |
||||
pattern="^`echo ${i#^} | sed -e 's/\*/.\\\\+/'`$" |
||||
grep -q "$pattern" "$favaillist" || echo "$i" >> "$fpkgerrors" |
||||
done < "$fpkgwildcards" |
||||
if [ -s "$fpkgerrors" ]; then |
||||
echo "Error: Packages are not available in $fprofilelist:" >&2 |
||||
RET_ERROR=1 |
||||
cat $fpkgerrors >&2 |
||||
fi |
||||
} |
||||
|
||||
[ "$#" -gt 0 ] || error "need at least one argument, a packagelist to check" |
||||
|
||||
# reusable temporary files with self-cleanup at exit |
||||
TEMP="${TMP:-/tmp}" |
||||
trap exit_handler HUP INT QUIT TERM EXIT |
||||
favaillist="`mktemp $TEMP/pkgchecker.avail.XXXXX`" |
||||
fpkgnames="`mktemp $TEMP/pkgchecker.names.XXXXX`" |
||||
fpkgwildcards="`mktemp $TEMP/pkgchecker.wildcards.XXXXX`" |
||||
fpkgerrors="`mktemp $TEMP/pkgchecker.error.XXXXX`" |
||||
ftemp="`mktemp $TEMP/pkgchecker.XXXXX`" |
||||
|
||||
# check args |
||||
while :; do |
||||
case "$1" in |
||||
# make sure pkgnames dump is handy |
||||
"-n"|"--pkgnames") |
||||
[ -f "$2" ] && { |
||||
sort "$2" > "$favaillist" |
||||
shift; shift |
||||
} || error "-n needs valid pkgnames filename" |
||||
;; |
||||
# PATH to aptbox |
||||
"--aptbox") |
||||
[ -d "$2" ] && { |
||||
APTBOX="$2" |
||||
shift; shift |
||||
} || error "--aptbox needs valid directory" |
||||
;; |
||||
*) |
||||
break |
||||
;; |
||||
esac |
||||
done |
||||
|
||||
[ -s "$favaillist" ] || dump_pkgnames |
||||
|
||||
for list in "$@"; do |
||||
check_pkglist "$list" |
||||
done |
||||
|
||||
[ -z "$RET_ERROR" ] || error "Some lists contain unavailable packages" |
@ -0,0 +1,14 @@ |
||||
#!/bin/sh |
||||
|
||||
# missing "; @:" for recipeless rules makes SHELL payload useless |
||||
# (see also ../lib/report.mk); this results in broken target graphs |
||||
# (so REPORT=1 gets crippled) |
||||
|
||||
sed 's/^[a-z]\+\/.*:.*$/\n&/' "$@" \ |
||||
| grep -vE '^(#|export|if|else|endif|define|endef)' \ |
||||
| sed ':loop /^[^#].*[^\\]\\$/N; s/\\\n//; t loop' \ |
||||
| grep -vE ':=| = | ?= | += |^\$' \ |
||||
| sed ':loop /^[a-z]\+\/.*:.*$/N; s/\n\t\+@*/\; /; t loop' \ |
||||
| grep -vE ';|^$' && exit 1 ||: |
||||
|
||||
# see also http://unix.stackexchange.com/questions/228547 |
@ -0,0 +1,24 @@ |
||||
#!/bin/sh |
||||
# try making build logs more diffable |
||||
# see also reports.mk |
||||
|
||||
[ -n "$BUILDDIR" ] || exit 1 |
||||
|
||||
sed -r \ |
||||
-e "s,$BUILDDIR,,g" \ |
||||
-e '/\/var\/lib\/apt\/lists/d' \ |
||||
-e 's/... .. ..:..:..//g' \ |
||||
-e 's/\[[0-9]+\]//g' \ |
||||
-e '/^(Reading Package Lists|Building Dependency Tree)/d' \ |
||||
-e '/^(Fetched|Need to get|After unpacking) /d' \ |
||||
-e '/^(Preparing packages for installation|Done\.)/d' \ |
||||
-e '/^hsh(|-(initroot|install|fakedev|(mk|rm)chroot|run)): /d' \ |
||||
-e '/^(hasher-priv|mkaptbox|(mk|rm)dir): /d' \ |
||||
-e '/^mki-((invalidate-|)cache|check-obsolete|prepare): /d' \ |
||||
-e '/^(mode of|changed (group|ownership)|removed) /d' \ |
||||
-e '/^chroot\/.in\//d' \ |
||||
-e '/ has started executing\.$/d' \ |
||||
-e '/\/var\/log\/apt\.log$/d' \ |
||||
-e '/\/usr\/share\/apt\/scripts\/log\.lua/d' \ |
||||
-e '/\.rpm$/d' \ |
||||
-e "/' -> '/d" |
@ -0,0 +1,36 @@ |
||||
#!/bin/bash |
||||
# columnize.sh |
||||
# Take a list of values and output them in a nicely formatted column view. |
||||
# Author: Loïc Cattani "Arko" <loic cattani at gmail com> |
||||
# https://github.com/Arko/Columnize |
||||
|
||||
values=($*) |
||||
longest_value=0 |
||||
|
||||
# Find the longest value |
||||
for value in ${values[@]}; do |
||||
if [[ ${#value} -gt $longest_value ]]; then |
||||
longest_value=${#value} |
||||
fi |
||||
done |
||||
|
||||
# Compute column span |
||||
term_width=${COLUMNS:-$(tput cols)} |
||||
(( columns = $term_width / ($longest_value + 2) )) |
||||
|
||||
# Print values with pretty column width |
||||
curr_col=0 |
||||
for value in ${values[@]}; do |
||||
value_len=${#value} |
||||
echo -n $value |
||||
(( spaces_missing = $longest_value - $value_len + 2 )) |
||||
printf "%*s" $spaces_missing |
||||
(( curr_col++ )) |
||||
if [[ $curr_col == $columns ]]; then |
||||
echo |
||||
curr_col=0 |
||||
fi |
||||
done |
||||
|
||||
# Make sure there is a newline at the end |
||||
if [[ $curr_col != 0 ]]; then echo; fi |
@ -0,0 +1,30 @@ |
||||
#!/bin/sh |
||||
# Expand metapackage dependenies |
||||
# |
||||
APT_CACHE=$1 |
||||
f=$2 |
||||
[ -n "$f" ] || exit 0 |
||||
|
||||
metapkgs="$(grep -e @META "$f" | grep -v '^#')" |
||||
[ -n "metapkgs" ] || exit 0 |
||||
|
||||
for metapkg in $metapkgs; do |
||||
metapkg=${metapkg%@META} |
||||
if ! "$APT_CACHE" show "$metapkg" > /dev/null 2>&1; then |
||||
echo "Warning: Metapackage $metapkg not available!!!" >&2 |
||||
continue |
||||
fi |
||||
t="`mktemp`" |
||||
LANG=C "$APT_CACHE" depends "$metapkg"| grep 'Depends:' | |
||||
cut -f4 -d ' ' |grep -v '<' > "$t" |
||||
if [ -s "$t" ]; then |
||||
sed -i -e "/$metapkg@META/r $t" -e "s/$metapkg@META/$metapkg/" "$f" |
||||
fi |
||||
sed -i "s/$metapkg@META/$metapkg/" "$f" |
||||
rm -f "$t" |
||||
done |
||||
|
||||
# Cleanup not available metapackages |
||||
sed -i "/@META/d" "$f" |
||||
|
||||
exit 0 |
@ -0,0 +1,97 @@ |
||||
#!/bin/sh |
||||
# analyze free space, preferring tmpfs over really many gigaz |
||||
# and taking into account configured hasher workdir prefices |
||||
|
||||
# NB: use BUILDDIR to override autodetection (see ../QUICKSTART) |
||||
|
||||
# hope there aren't spaces in RM's $HOME are they? |
||||
DIRS="$TMP $TMPDIR $HOME/hasher /tmp /var/tmp .." |
||||
MINSIZE=262144 # face control criterion |
||||
|
||||
# mkimage needs /proc among those, be clear about that |
||||
check_allowed_mountpoints() |
||||
{ |
||||
grep -wqs "^allowed_mountpoints=[^#]*/proc" \ |
||||
/etc/hasher-priv/system \ |
||||
`/usr/libexec/hasher-priv/getconf.sh` |
||||
} |
||||
|
||||
# poor man's SourceIfExists() |
||||
try_source() { [ -f "$1" ] && . "$1"; } |
||||
|
||||
# hasher accepted ones |
||||
get_prefices() |
||||
{ |
||||
try_source /etc/hasher-priv/system || exit 1 |
||||
try_source `/usr/libexec/hasher-priv/getconf.sh` |
||||
echo "$prefix" | tr ':' '\n' | while read i; do realpath "$i"; done |
||||
} |
||||
|
||||
# drop candidates that hasher won't handle anyways |
||||
# NB: doesn't take --number into account, |
||||
# prefix lists are defined by the primary configuration |
||||
contemplate_dirs() |
||||
{ |
||||
for d in "$@"; do |
||||
D="`realpath "$d"`"; |
||||
for p in `get_prefices`; do |
||||
[ "${D#$p}" = "$D" ] || echo "$D"; |
||||
done; |
||||
done \ |
||||
| uniq # _not_ sort -u |
||||
} |
||||
|
||||
# hasher emits no meaningful errors regarding those, sigh |
||||
check_options() |
||||
{ |
||||
! egrep -q "^$1 $2 .*no(dev|exec)" /proc/mounts |
||||
} |
||||
|
||||
# pick existing, writeable, >256M free space dirs |
||||
# rank them wrt type: tmpfs > realfs > rootfs |
||||
choose_tmpdir() { |
||||
for i in "$@"; do |
||||
[ -d "$i" -a -w "$i" ] || continue |
||||
echo -n "$i " |
||||
df -PT "$i" | tail -1 |
||||
done \ |
||||
| sort -unk5 \ |
||||
| while read dir dev fstype size used free percent mnt; do |
||||
check_options "$dev" "$mnt" || continue |
||||
[ "$free" -gt "$MINSIZE" ] || continue |
||||
[ "$fstype" = "tmpfs" ] && { echo "2 $dir $free"; continue; } |
||||
[ "$mnt" = "/" ] && { echo "0 $dir $free"; continue; } |
||||
echo "1 $dir $free" |
||||
done \ |
||||
| sort -n \ |
||||
| tail -1 \ |
||||
| cut -f2 -d' ' |
||||
} |
||||
|
||||
# bringing it all together |
||||
if ! check_allowed_mountpoints; then |
||||
echo "error: hasher's allowed_mountpoints do not include /proc;" |
||||
echo "please check hasher docs and /etc/hasher-priv/system" |
||||
exit 1 |
||||
fi >&2 |
||||
|
||||
TMPDIRS="`contemplate_dirs $DIRS`" |
||||
if [ -z "$TMPDIRS" ]; then |
||||
echo "error: no suitable directories found;" |
||||
echo "please check QUICKSTART, filesystem and hasher setup" |
||||
echo "(mount enough tmpfs into /tmp or fix hasher-priv prefix?)" |
||||
exit 1 |
||||
fi >&2 |
||||
|
||||
TEMP="`choose_tmpdir $TMPDIRS`" |
||||
if [ -z "$TEMP" ]; then |
||||
echo "error: no suitable directories found;" |
||||
echo "please check hasher docs and filesystem setup" |
||||
echo "(nodev and/or noexec on an otherwise suitable filesystem?)" |
||||
exit 1 |
||||
fi >&2 |
||||
|
||||
DIR="$TEMP/`dirname "$1"`" |
||||
NAME="`basename "${1:-tmpdir}"`" |
||||
mkdir -p "$DIR" # in case $1 contains slash(es) |
||||
mktemp -d "$NAME.XXXXXXX" --tmpdir="${DIR%/.}" |
@ -0,0 +1,27 @@ |
||||
#!/bin/sh |
||||
# commit the directory ($1) with a message ($2) to git |
||||
|
||||
. shell-error |
||||
|
||||
INIT= |
||||
if [ "$1" = "-i" ]; then |
||||
INIT=yes |
||||
shift |
||||
fi |
||||
|
||||
[ -d "$1" ] || fatal "$1 is not an existing directory" |
||||
|
||||
if type -t git >&/dev/null && pushd "$1" >/dev/null; then |
||||
if [ -z "$(git config --global user.name)" ]; then |
||||
exit 0 |
||||
fi |
||||
if [ -n "$INIT" -a ! -d .git ]; then |
||||
git init -q || fatal "git init failed" |
||||
fi |
||||
if [ -n "$(git status -s)" ]; then |
||||
git add . \ |
||||
&& git commit -anq -m "$2" \ |
||||
|| fatal "git add/commit failed" |
||||
fi |
||||
popd >/dev/null |
||||
fi |
@ -0,0 +1,11 @@ |
||||
#!/bin/sh |
||||
# report on git repo in the current directory |
||||
|
||||
if type -t git >&/dev/null; then |
||||
if pushd "$1" >/dev/null && [ -d .git ]; then |
||||
git show-ref --head -ds -- HEAD |
||||
git status -s |
||||
echo |
||||
popd >/dev/null |
||||
fi |
||||
fi |
@ -0,0 +1,20 @@ |
||||
#!/bin/sh |
||||
# a script to help weed out duplicate packages |
||||
# contained in package lists given as arguments |
||||
# |
||||
# Requires: libshell |
||||
|
||||
. /bin/shell-quote |
||||
|
||||
sort "$@" \ |
||||
| grep -v '^ *#' \ |
||||
| sed -s 's,[ ]\+, ,g' \ |
||||
| grep -v '^ *$' \ |
||||
| uniq -cd \ |
||||
| while read num str; do |
||||
echo -n "$str: $num "; |
||||
pattern="`quote_sed_regexp "$str"`" |
||||
grep -l "^$pattern$" "$@" | tr '\n' ' ' |
||||
echo |
||||
done \ |
||||
| sort -rn -t: -k2 |
@ -0,0 +1,4 @@ |
||||
#!/bin/sh |
||||
# filter worker make stdout for report scripts |
||||
|
||||
grep '^trace:building ' | uniq |
@ -0,0 +1,33 @@ |
||||
#!/bin/sh |
||||
|
||||
echo "digraph {" |
||||
echo " { node [fontname=Helvetica,fontsize=20];" |
||||
|
||||
while read first second third rest; do |
||||
FROM=; TO= |
||||
case "$first" in |
||||
"trace:building") |
||||
case "$third" in |
||||
"->") |
||||
FROM="$second"; TO="$rest";; |
||||
*) |
||||
continue;; |
||||
esac |
||||
;; |
||||
*) |
||||
continue;; |
||||
esac |
||||
[ -n "$FROM" -a -n "$TO" ] || continue |
||||
for to in $TO; do |
||||
out=" \"$FROM\" -> \"$to\"" |
||||
case $to in |
||||
*distro/*|*vm/*|*ve/*) |
||||
echo "$out [weight=10];";; |
||||
*) |
||||
echo "$out;";; |
||||
esac |
||||
done |
||||
done |
||||
|
||||
echo " }" |
||||
echo "}" |
@ -0,0 +1,52 @@ |
||||
#!/bin/sh |
||||
|
||||
DISTCFG=build/distcfg.mk |
||||
[ -s "$DISTCFG" ] || exit 1 |
||||
|
||||
VARIABLES= |
||||
|
||||
echo "graph { rankdir=LR;" |
||||
echo " { node [height=.1,width=.3,fontname=Helvetica,fontsize=10];" |
||||
|
||||
feat_vars() |
||||
{ |
||||
FEATURE= |
||||
while read first second rest; do |
||||
case "$first" in |
||||
\#[A-Z]*) |
||||
continue;; # overridden feature |
||||
\#) # feature mark |
||||
case "$second" in |
||||
profile/*) |
||||
FEATURE=;; |
||||
*) |
||||
FEATURE="$second";; |
||||
esac |
||||
;; |
||||
*) |
||||
case "$second" in |
||||
=|+=|?=) |
||||
case "$first" in |
||||
DISTCFG_MK|SUBPROFILES|FEATURES|IMAGE*|MKIMAGE_*) |
||||
continue;; |
||||
*) |
||||
VAR="$first" |
||||
VARIABLES="$VARIABLES; $VAR" |
||||
;; |
||||
esac |
||||
;; |
||||
*) |
||||
continue;; |
||||
esac |
||||
;; |
||||
esac |
||||
[ -n "$FEATURE" -a -n "$VAR" ] || continue |
||||
echo " \"$FEATURE\" -- \"$VAR\";" |
||||
done < "$DISTCFG" |
||||
echo " { node [shape=box]$VARIABLES; }" |
||||
} |
||||
|
||||
feat_vars | LC_COLLATE=C sort -ru |
||||
|
||||
echo " }" |
||||
echo "}" |
@ -0,0 +1,36 @@ |
||||
#!/bin/sh -f |
||||
# a script to transform a tag name, a list of tag names (ANDed then), |
||||
# or a complex boolean expression into a list of package list names. |
||||
# examples of expected stdin: |
||||
# |
||||
# kde |
||||
# live gnome |
||||
# (base && (kernel || apt || alterator)) |
||||
# |
||||
# NB: tags are processed using word boundaries, |
||||
# so avoid using "-" in tag names |
||||
|
||||
DIR="${1:?need base directory}" |
||||
|
||||
warn() { |
||||
echo "$0: WARNING: $*" >&2 |
||||
exit |
||||
} |
||||
|
||||
[ -d "$DIR" ] || warn "$DIR nonexistent" |
||||
cd "$DIR" || warn "cannot change to $DIR" |
||||
|
||||
# NB: care with quoting |
||||
transformed="$(sed \ |
||||
-e "s,\([^&|! ()']\+\),-regex ^.*\\\\<\1\\\\>.*$,g" \ |
||||
-e "s, *&& *, -a ,g" \ |
||||
-e "s, *|| *, -o ,g" \ |
||||
-e "s, *! *, ! ,g" \ |
||||
-e "s, *( *, ( ,g" \ |
||||
-e "s, *) *, ) ,g")" |
||||
|
||||
[ "$DEBUG" = 2 ] && echo "`basename $0`: transformed = \"$transformed\"" >&2 |
||||
[ -z "$transformed" ] || |
||||
find $transformed \ |
||||
| sed 's,^\./,,' \ |
||||
| egrep -v '(\.sw.|~)$' |
@ -0,0 +1,458 @@ |
||||
#!/bin/bash -ex |
||||
# usage: |
||||
# tar2fs chroot.tar image.raw [size_in_bytes [fstype]] |
||||
|
||||
. shell-error |
||||
export LANG=C |
||||
|
||||
if [ $# -lt 2 ]; then |
||||
fatal "error: tar2fs needs at least two arguments" |
||||
fi |
||||
|
||||
# this needs env_keep sudo setup to actually work |
||||
if [ -n "$GLOBAL_BUILDDIR" ]; then |
||||
WORKDIR="$GLOBAL_BUILDDIR/vmroot" |
||||
else |
||||
WORKDIR="$(mktemp --tmpdir -d vmroot-XXXXX)" |
||||
fi |
||||
|
||||
[ -n "$WORKDIR" ] || fatal "couldn't come up with suitable WORKDIR" |
||||
|
||||
[ -n "$GLOBAL_DEBUG" ] || message "WORKDIR: $WORKDIR" |
||||
|
||||
MB=1048576 # a parted's "megabyte" in bytes is *broken* |
||||
|
||||
SIZE_FACTOR=2 # multiply the sizes found by this value |
||||
BOOT_SIZE_FACTOR=2 # multiply /boot size by this value additionally |
||||
BOOTLOADERPARTSIZEM=0 # PReP partition size (ppc*) |
||||
|
||||
CUR_BOUNDARY=0 # align first partition at 1MB for performance (+1) |
||||
|
||||
BOOTFSTYPE= |
||||
BOOTPART= |
||||
EFIPARTFSTYPE= |
||||
EFIPART= |
||||
|
||||
BOOTLOADER="$5" |
||||
|
||||
if [ -n "$6" ]; then |
||||
ARCH="$6" |
||||
else |
||||
ARCH="$(arch)" |
||||
fi |
||||
|
||||
BOOTTYPE="$8" |
||||
|
||||
case "$ARCH" in |
||||
e2k*) |
||||
BOOTFSTYPE="ext2" # firmware knows it |
||||
BLOCKDEV="/dev/sda" # ...hopefully... |
||||
BOOTPART="1" |
||||
ROOTPART="2" |
||||
;; |
||||
ppc*) |
||||
BOOTFSTYPE="ext4" |
||||
BLOCKDEV="/dev/sda" |
||||
BOOTLOADERPART="1" |
||||
BOOTLOADERPARTSIZEM="8" |
||||
ROOTPART="2" |
||||
;; |
||||
arm*|aarch64) |
||||
ROOTPART="1" |
||||
BLOCKDEV="/dev/sda" |
||||
CUR_BOUNDARY=15 # offset 16 MiB for singleboard's |
||||
;; |
||||
*) |
||||
ROOTPART="1" |
||||
BLOCKDEV="/dev/sda" |
||||
;; |
||||
esac |
||||
|
||||
if [ "$BOOTLOADER" == grub-efi -o "$BOOTTYPE" == EFI ]; then |
||||
EFIPART="1" |
||||
EFIPARTSIZEM="256" |
||||
EFIPARTFSTYPE="fat" |
||||
ROOTPART="2" |
||||
fi |
||||
|
||||
PARTTABLE="$7" |
||||
if [ -z "$PARTTABLE" ]; then |
||||
if [ "$BOOTLOADER" == grub-efi ]; then |
||||
PARTTABLE=gpt |
||||
else |
||||
PARTTABLE=msdos |
||||
fi |
||||
fi |
||||
|
||||
# figure out the part taken by /boot in the given tarball |
||||
boot_size() { |
||||
if [ -n "$BOOTPART" ]; then |
||||
tar tvf "$1" \ |
||||
| awk ' \ |
||||
BEGIN { sum=0 } |
||||
/^-.* \.\/boot\// { sum=sum+$3 } |
||||
END { print sum }' |
||||
else |
||||
echo "0" |
||||
fi |
||||
} |
||||
|
||||
# parted wrapper for convenience |
||||
parting() { parted "$LOOPDEV" --align optimal --script -- "$@"; } |
||||
|
||||
# unfortunately parted is insane enough to lump alignment controls |
||||
# into unit controls so creating adjacent partitions sized in MiB |
||||
# is not as straightforward as it might be... thus "+1" padding; |
||||
# see also http://www.gnu.org/software/parted/manual/parted.html#unit |
||||
mkpart() { |
||||
# a bit different start/end semantics to handle end of device too |
||||
local start="$(($CUR_BOUNDARY + 1))" # yes, we lose a megabyte |
||||
if [ -n "$1" ]; then |
||||
CUR_BOUNDARY="$(($start + $1))" |
||||
local end="$CUR_BOUNDARY"MiB |
||||
else |
||||
local end="$OFFSET"MiB |
||||
fi |
||||
if [ -n "$2" ]; then |
||||
CUR_FS="$2" |
||||
else |
||||
CUR_FS=ext2 |
||||
fi |
||||
parting mkpart primary "$CUR_FS" "$start"MiB "$end" |
||||
} |
||||
|
||||
# a tarball containing chroot with a kernel |
||||
TAR="$1" |
||||
[ -s "$TAR" ] || fatal "source tarball doesn't really exist" |
||||
|
||||
# a path to the image to be generated |
||||
IMG="$2" |
||||
[ -d "$(dirname "$IMG")" ] || fatal "target directory doesn't exist" |
||||
|
||||
# 0 means auto; if a value is specified it holds (no /boot subtracted) |
||||
ROOTSIZE="$3" |
||||
[ -n "$ROOTSIZE" -a "$ROOTSIZE" != 0 ] || unset ROOTSIZE |
||||
|
||||
# image size in bytes |
||||
TARSIZE="$(stat -Lc %s "$TAR")" |
||||
# /boot size in that tarball |
||||
BOOTSIZE="$(boot_size "$TAR")" |
||||
DEFSIZE="$(($SIZE_FACTOR * ($TARSIZE - $BOOTSIZE)))" # (exact sizes) |
||||
ROOTSIZE="$((${ROOTSIZE:-$DEFSIZE} + $MB - 1))" # for ceil rounding to MB |
||||
# image and /boot sizes in megabytes |
||||
ROOTSIZEM="$(($ROOTSIZE / $MB))" |
||||
BOOTSIZEM="$((($SIZE_FACTOR * $BOOT_SIZE_FACTOR * $BOOTSIZE + $MB - 1) / $MB))" |
||||
|
||||
# tested to work: ext[234], jfs |
||||
# NB: xfs doesn't have a spare sector for the bootloader |
||||
ROOTFSTYPE="${4:-ext4}" |
||||
|
||||
# single root partition hardwired so far, |
||||
# add another image for home/data/swap if needed |
||||
ROOTDEV="$BLOCKDEV$ROOTPART" |
||||
|
||||
# last preparations... |
||||
MKFS="mkfs.$ROOTFSTYPE ${BOOTFSTYPE:+mkfs.$BOOTFSTYPE} \ |
||||
${EFIPARTFSTYPE:+mkfs.$EFIPARTFSTYPE}" |
||||
for i in losetup sfdisk parted kpartx $MKFS; do |
||||
if ! type -t "$i" >&/dev/null; then |
||||
fatal "$i required but not found in host system" |
||||
fi |
||||
done |
||||
|
||||
LOOPDEV="$(losetup --find)" # would be sad about non-binary megabytes too |
||||
ROOTFS="$WORKDIR/chroot" |
||||
|
||||
BOOTFS= |
||||
EFIPARTFS= |
||||
if [ -n "$BOOTPART" ]; then |
||||
BOOTFS="$ROOTFS/boot" |
||||
fi |
||||
if [ -n "$EFIPART" ]; then |
||||
EFIPARTFS="$ROOTFS/boot/efi" |
||||
fi |
||||
|
||||
exit_handler() { |
||||
rc=$? |
||||
cd / |
||||
if [ -n "$ROOTFS" ]; then |
||||
umount ${EFIPARTFS:+"$EFIPARTFS"} ${BOOTFS:+"$BOOTFS"} \ |
||||
"$ROOTFS"{/dev,/proc,/sys,} |
||||
|
||||
if [ -n "$LOOPDEV" ]; then |
||||
kpartx -d -s "$LOOPDEV" || { |
||||
sleep 10 |
||||
kpartx -d -s -v "$LOOPDEV" |
||||
} |
||||
losetup --detach "$LOOPDEV" |
||||
fi |
||||
rm -r -- "$ROOTFS" |
||||
rmdir -- "$WORKDIR" |
||||
fi |
||||
exit $rc |
||||
} |
||||
|
||||
# handle -e in shebang as well |
||||
trap exit_handler EXIT ERR |
||||
|
||||
# prepare disk image and a filesystem inside it |
||||
rm -f -- "$IMG" |
||||
OFFSET="$(($CUR_BOUNDARY + $EFIPARTSIZEM + $BOOTLOADERPARTSIZEM + $BOOTSIZEM + $ROOTSIZEM - 1))" |
||||
dd if=/dev/zero of="$IMG" conv=notrunc bs=$MB count=1 seek="$OFFSET" |
||||
losetup "$LOOPDEV" "$IMG" |
||||
|
||||
parting mklabel "$PARTTABLE" |
||||
|
||||
if [ -n "$BOOTLOADERPART" ] && [ -n "$BOOTLOADERPARTSIZEM" ]; then |
||||
case "$ARCH" in |
||||
ppc*) |
||||
parting mkpart primary ext2 $((CUR_BOUNDARY+1))MiB $((BOOTLOADERPARTSIZEM + 1))MiB |
||||
CUR_BOUNDARY="$BOOTLOADERPARTSIZEM" |
||||
parting set 1 prep on |
||||
parting set 1 boot on |
||||
;; |
||||
esac |
||||
fi |
||||
|
||||
if [ -n "$EFIPART" ]; then |
||||
EFIDEV="$EFIDEV$EFIPART" |
||||
if [ "$PARTTABLE" == gpt ]; then |
||||
parting mkpart fat32 $((CUR_BOUNDARY+1))MiB $(($EFIPARTSIZEM + 1))MiB |
||||
else |
||||
parting mkpart primary fat32 $((CUR_BOUNDARY+1))MiB $(($EFIPARTSIZEM + 1))MiB |
||||
fi |
||||
CUR_BOUNDARY="$EFIPARTSIZEM" |
||||
parting set 1 boot on |
||||
if [ "$PARTTABLE" == gpt ]; then |
||||
parting set 1 esp on |
||||
fi |
||||
fi |
||||
|
||||
if [ -n "$BOOTPART" ]; then |
||||
BOOTDEV="$BLOCKDEV$BOOTPART" |
||||
mkpart "$BOOTSIZEM" |
||||
fi |
||||
|
||||
# not ROOTSIZEM but "the rest"; somewhat non-trivial arithmetics lurk in parted |
||||
mkpart |
||||
|
||||
kpartx -a -s "$LOOPDEV" |
||||
LOOPROOT="/dev/mapper/$(basename "$LOOPDEV")p$ROOTPART" |
||||
|
||||
mkfs."$ROOTFSTYPE" "$LOOPROOT" |
||||
|
||||
if [ -n "$BOOTPART" ]; then |
||||
LOOPBOOT="/dev/mapper/$(basename "$LOOPDEV")p$BOOTPART" |
||||
mkfs."$BOOTFSTYPE" "$LOOPBOOT" |
||||
fi |
||||
|
||||
if [ -n "$BOOTLOADERPART" ] && [ -n "$BOOTLOADERPARTSIZEM" ]; then |
||||
LOOPBOOTLOADER="/dev/mapper/$(basename "$LOOPDEV")p$BOOTLOADERPART" |
||||
fi |
||||
|
||||
if [ -n "$EFIPART" ]; then |
||||
LOOPEFI="/dev/mapper/$(basename "$LOOPDEV")p$EFIPART" |
||||
mkfs.fat -F32 "$LOOPEFI" |
||||
fi |
||||
|
||||
ROOTUUID="$(blkid -s UUID -o value -c /dev/null "$LOOPROOT")" |
||||
if [ -n "$ROOTUUID" ]; then |
||||
ROOTDEV="UUID=$ROOTUUID" |
||||
else |
||||
ROOTDEV="$LOOPROOT" |
||||
fi |
||||
|
||||
if [ -n "$BOOTPART" ]; then |
||||
BOOTUUID="$(blkid -s UUID -o value -c /dev/null "$LOOPBOOT")" |
||||
if [ -n "$BOOTUUID" ]; then |
||||
BOOTDEV="UUID=$BOOTUUID" |
||||
fi |
||||
fi |
||||
|
||||
if [ -n "$EFIPART" ]; then |
||||
EFIUUID="$(blkid -s UUID -o value -c /dev/null "$LOOPEFI")" |
||||
if [ -n "$EFIUUID" ]; then |
||||
EFIDEV="UUID=$EFIUUID" |
||||
fi |
||||
fi |
||||
|
||||
# mount and populate it |
||||
mkdir -pm755 "$ROOTFS" |
||||
mount "$LOOPROOT" "$ROOTFS" |
||||
|
||||
if [ -n "$BOOTPART" ]; then |
||||
mkdir -pm700 "$BOOTFS" |
||||
mount "$LOOPBOOT" "$BOOTFS" |
||||
fi |
||||
|
||||
if [ -n "$EFIPART" ]; then |
||||
mkdir -pm751 "$EFIPARTFS" |
||||
mount "$LOOPEFI" "$EFIPARTFS" |
||||
fi |
||||
|
||||
tar -C "$ROOTFS" --numeric-owner -xf "$TAR" |
||||
for i in /dev /proc /sys; do mount --bind "$i" "$ROOTFS$i"; done |
||||
|
||||
# loop device so lilo could work... |
||||
if grep -qe "[[:space:]]/[[:space:]]" "$ROOTFS/etc/fstab"; then \ |
||||
sed -i "s/LABEL=ROOT/$ROOTDEV/" "$ROOTFS/etc/fstab" |
||||
else |
||||
echo "$ROOTDEV / $ROOTFSTYPE relatime 1 1" >> "$ROOTFS/etc/fstab" |
||||
fi |
||||
|
||||
# target device at once |
||||
if [ -n "$BOOTPART" ]; then |
||||
echo "$BOOTDEV /boot $BOOTFSTYPE defaults 1 2" >> "$ROOTFS/etc/fstab" |
||||
fi |
||||
if [ -n "$EFIPART" ]; then |
||||
echo "$EFIDEV /boot/efi vfat umask=0,quiet,showexec,iocharset=utf8,codepage=866 1 2" >> "$ROOTFS/etc/fstab" |
||||
fi |
||||
|
||||
# Query ARCH in chroot and redefine arch-dependent variable |
||||
ARCH="$(chroot "$ROOTFS" rpm --eval '%_host_cpu')" |
||||
|
||||
# NB: don't stick BOOTFS here, it has slightly different semantics |
||||
pushd $ROOTFS/boot |
||||
|
||||
# 4.9.76-elbrus-def-alt1.11.1 -> def |
||||
get_label() { echo "${1# *}" | sed -r 's,.*elbrus-([0-9a-z]+)-.*$,\1,'; } |
||||
|
||||
KVERSIONS= |
||||
KVERSIONS="$(chroot "$ROOTFS" rpm -qa 'kernel-image*' \ |
||||
--qf '%{installtime} %{version}-%{name}-%{release}\n' \ |
||||
| sort -n \ |
||||
| cut -f 2 -d ' ' \ |
||||
| sed 's/kernel-image-//')" |
||||
[ -n "$KVERSIONS" ] || fatal "unable to deduce kernel version" |
||||
rm -f .origver |
||||
|
||||
# clean fstab |
||||
sed -i "/LABEL=ROOT/d" "$ROOTFS/etc/fstab" |
||||
# ...target device too |
||||
sed -i "s,$LOOPROOT,$ROOTDEV," "$ROOTFS/etc/fstab" |
||||
|
||||
echo "** KVERSIONS=[$KVERSIONS]" >&2 |
||||
|
||||
if [ "`echo $KVERSIONS | wc -w`" = 1 ]; then # 2+ labels |
||||
echo -e "default=`get_label $KVERSIONS`\n" >> boot.conf |
||||
fi |
||||
|
||||
# FIXME: relies on particular (current) kernel package naming scheme |
||||
for v in $KVERSIONS; do |
||||
l="`get_label "$v"`" |
||||
cat >> boot.conf <<EOF |
||||
label=$l |
||||
partition=0 |
||||
image=/image-$v |
||||
initrd=/initrd-$v.img |
||||
cmdline=console=ttyS0,115200 console=tty0 consoleblank=0 hardreset root=UUID=$ROOTUUID |
||||
|
||||
EOF |
||||
done |
||||
|
||||
echo "** start of boot.conf" |
||||
cat boot.conf |
||||
echo "** end of boot.conf" |
||||
|
||||
popd |
||||
|
||||
# Update cmdline.txt for Raspberry Pi |
||||
[ -f "$ROOTFS/boot/efi/cmdline.txt" ] && |
||||
sed -i "s/LABEL=ROOT/$ROOTDEV/" "$ROOTFS/boot/efi/cmdline.txt" |
||||
|
||||
# Update extlinux.conf |
||||
if [ -f "$ROOTFS/boot/extlinux/extlinux.conf" ]; then |
||||
sed -i "s/LABEL=ROOT/$ROOTDEV/g" "$ROOTFS/boot/extlinux/extlinux.conf" |
||||
if [ "$PARTTABLE" == gpt ]; then |
||||
parting set "$ROOTPART" legacy_boot on |
||||
fi |
||||
if [ "$PARTTABLE" == msdos ]; then |
||||
parting set "$ROOTPART" boot on |
||||
fi |
||||
fi |
||||
|
||||
# Setup bootloader |
||||
case "$BOOTLOADER" in |
||||
lilo) |
||||
# configure and install bootloader |
||||
REGEXP='^.*: ([0-9]+) cylinders, ([0-9]+) heads, ([0-9]+) sectors/track*$' |
||||
set -- $(sfdisk -g "$LOOPDEV" | grep -E "$REGEXP" | sed -r "s@$REGEXP@\1 \2 \3@") |
||||
|
||||
LILO_COMMON="lba32 |
||||
delay=1 |
||||
vga=0 |
||||
image=/boot/vmlinuz |
||||
initrd=/boot/initrd.img |
||||
append=\"root=$ROOTDEV rootdelay=3 console=tty1 console=ttyS0,115200n8\" |
||||
label=linux" |
||||
|
||||
cat > "$ROOTFS"/etc/lilo-loop.conf <<-EOF |
||||
boot=$LOOPDEV |
||||
disk=$LOOPDEV |
||||
bios=0x80 |
||||
cylinders=$1 |
||||
heads=$2 |
||||
sectors=$3 |
||||
partition=$LOOPROOT |
||||
start=63 |
||||
$LILO_COMMON |
||||
EOF |
||||
|
||||
chroot "$ROOTFS" lilo -C /etc/lilo-loop.conf |
||||
|
||||
cat > "$ROOTFS"/etc/lilo.conf <<-EOF |
||||
boot=$BLOCKDEV |
||||
$LILO_COMMON |
||||
EOF |
||||
;; |
||||
grub-efi) |
||||
echo 'GRUB_DISABLE_OS_PROBER=true' >> "$ROOTFS"/etc/sysconfig/grub2 |
||||
chroot "$ROOTFS" grub-mkconfig -o /boot/grub/grub.cfg |
||||
case "$ARCH" in |
||||
x86_64) |
||||
chroot "$ROOTFS" grub-install --target=i386-efi --recheck \ |
||||
--removable --uefi-secure-boot |
||||
chroot "$ROOTFS" grub-install --target=x86_64-efi --recheck \ |
||||
--removable --uefi-secure-boot |
||||
sed -i 's/initrd16/initrdefi/g' "$ROOTFS/boot/grub/grub.cfg" |
||||
sed -i 's/linux16/linuxefi/g' "$ROOTFS/boot/grub/grub.cfg" |
||||
;; |
||||
aarch64) |
||||
chroot "$ROOTFS" grub-install --target=arm64-efi --recheck \ |
||||
--removable --no-uefi-secure-boot |
||||
;; |
||||
armh) |
||||
chroot "$ROOTFS" grub-install --target=arm-efi --recheck \ |
||||
--removable --no-uefi-secure-boot |
||||
;; |
||||
riscv64) |
||||
chroot "$ROOTFS" grub-install --target=riscv64-efi --recheck \ |
||||
--removable --no-uefi-secure-boot |
||||
esac |
||||
sed -i '/GRUB_DISABLE_OS_PROBER=true/d' "$ROOTFS/etc/sysconfig/grub2" |
||||
;; |
||||
grub) |
||||
echo 'GRUB_DISABLE_OS_PROBER=true' >> "$ROOTFS"/etc/sysconfig/grub2 |
||||
chroot "$ROOTFS" grub-mkconfig -o /boot/grub/grub.cfg |
||||
case "$ARCH" in |
||||
*86*) |
||||
chroot "$ROOTFS" grub-install --target=i386-pc "$LOOPDEV" |
||||
sed -i 's/initrdefi/initrd16/g' "$ROOTFS/boot/grub/grub.cfg" |
||||
sed -i 's/linuxefi/linux16/g' "$ROOTFS/boot/grub/grub.cfg" |
||||
;; |
||||
ppc*) |
||||
[ -z "$LOOPBOOTLOADER" ] || |
||||
chroot "$ROOTFS" grub-install --target=powerpc-ieee1275 \ |
||||
--no-nvram "$LOOPBOOTLOADER" |
||||
;; |
||||
esac |
||||
sed -i '/GRUB_DISABLE_OS_PROBER=true/d' "$ROOTFS/etc/sysconfig/grub2" |
||||
;; |
||||
esac |
||||
|
||||
if [ -n "$SUDO_USER" ]; then |
||||
chown "$SUDO_USER:$(id -g "$SUDO_USER")" "$IMG" ||: |
||||
fi |
||||
# maybe qemu interpreter was copied to chroot; |
||||
# this is no longer necessary, remove |
||||
rm -rf "$ROOTFS"/.host ||: |
@ -0,0 +1,125 @@ |
||||
# step 4: dive into mkimage
|
||||
|
||||
GLOBAL_BUILDDIR ?= $(shell pwd)
|
||||
CURRENT_LINK := mkimage-profiles
|
||||
OUT_LINK := out
|
||||
|
||||
# there were mkimage fixes induced by mkimage-profile development
|
||||
# - minimal version is bumped for critical bugfixes/features
|
||||
# - optimal one relates to the less universally relevant bits
|
||||
MKI_VER_MINIMAL = 0.1.7
|
||||
MKI_VER_OPTIMAL = 0.2.6
|
||||
|
||||
include distcfg.mk |
||||
include functions.mk |
||||
|
||||
# check the build environment
|
||||
ifeq (,$(realpath $(MKIMAGE_PREFIX)/config.mk)) |
||||
$(error please apt-get install mkimage and have a look at QUICKSTART as well) |
||||
endif |
||||
|
||||
include $(MKIMAGE_PREFIX)/config.mk |
||||
|
||||
ifeq (-,$(shell rpmvercmp $(MKI_VERSION) $(MKI_VER_MINIMAL) | tr -d [0-9])) |
||||
$(info error: mkimage-$(MKI_VERSION) is too old, please upgrade) |
||||
$(error mkimage is too old, $(MKI_VER_MINIMAL) is minimal supported version) |
||||
endif |
||||
ifeq (-,$(shell rpmvercmp $(MKI_VERSION) $(MKI_VER_OPTIMAL) | tr -d [0-9])) |
||||
$(info warning: mkimage-$(MKI_VERSION) is suboptimal, consider upgrading) |
||||
$(warning consider upgrading mkimage to $(MKI_VER_OPTIMAL) or better) |
||||
endif |
||||
|
||||
# glob it just in case
|
||||
IMAGEDIR := $(wildcard $(IMAGEDIR))
|
||||
|
||||
# additional means to reduce havoc in IMAGEDIR
|
||||
IMAGE_SORTDIR := $(wildcard $(SORTDIR))
|
||||
|
||||
# use distro version in image name if defined
|
||||
ifdef DISTRO_VERSION |
||||
IMAGE_VERSION := -$(DISTRO_VERSION)
|
||||
IMAGE_VER_LINK := $(IMAGE_NAME)$(IMAGE_VERSION)-latest-$(ARCH).$(IMAGE_TYPE)
|
||||
endif |
||||
|
||||
IMAGE_OUTNAME := $(IMAGE_NAME)$(IMAGE_VERSION)-$(STATUS)$(DATE)-$(ARCH)
|
||||
IMAGE_OUTFILE := $(IMAGE_OUTNAME).$(IMAGE_TYPE)
|
||||
IMAGE_OUTDIR := $(IMAGEDIR)$(IMAGE_SORTDIR:%=/%)
|
||||
IMAGE_OUTPATH := $(IMAGE_OUTDIR)/$(IMAGE_OUTFILE)
|
||||
IMAGE_RELPATH := $(IMAGE_SORTDIR:%=%/)$(IMAGE_OUTFILE)
|
||||
IMAGE_RELDIR := $(IMAGE_OUTDIR:$(GLOBAL_BUILDDIR)/%=%)
|
||||
IMAGE_LINK := $(IMAGE_NAME)-latest-$(ARCH).$(IMAGE_TYPE)
|
||||
IMAGE_LINKPATH := $(IMAGEDIR)/$(IMAGE_LINK)
|
||||
|
||||
### multi-pack can be useful (think netinst iso/tree)
|
||||
MKI_PACK_RESULTS = $(IMAGE_PACKTYPE):$(IMAGE_OUTFILE)
|
||||
|
||||
# these get copied over as is
|
||||
COPY_TREE = ./files
|
||||
|
||||
# outdir shouldn't be wiped clean before use
|
||||
CLEANUP_OUTDIR ?=
|
||||
|
||||
GLOBAL_TARGET := $(ARCH)
|
||||
GLOBAL_HSH_LANGS := $(INSTALL_LANGS)
|
||||
GLOBAL_HSH_APT_CONFIG := $(wildcard $(APTCONF))
|
||||
|
||||
# take the latter part for complex-specified subprofiles like stage2@live;
|
||||
# care to exclude non-directories holding no makefiles like rootfs
|
||||
SUBDIRS = $(dir $(wildcard $(addsuffix /Makefile,$(SUBPROFILE_DIRS))))
|
||||
|
||||
# the lib/build-*.mk comes from features.in/build-*/lib
|
||||
include $(sort $(wildcard lib/*.mk)) |
||||
include $(MKIMAGE_PREFIX)/targets.mk |
||||
|
||||
# specified only for the final image (target-specific)
|
||||
pack-image: OUTDIR = $(IMAGE_OUTDIR) |
||||
pack-image: imagedir |
||||
|
||||
copy-tree: $(SAVE_PROFILE:%=save-profile) |
||||
|
||||
save-profile: |
||||
@mkdir -p files/.disk; \
|
||||
git archive --prefix=mkimage-profile/ HEAD ":!.work" \
|
||||
| gzip -9 > files/.disk/profile.tgz
|
||||
|
||||
.PHONY: imagedir postprocess debug |
||||
|
||||
prep: imagedir |
||||
|
||||
imagedir: |
||||
@mkdir -p "$(IMAGE_OUTDIR)"
|
||||
|
||||
postprocess: | $(addprefix postprocess-,$(sort $(POSTPROCESS_TARGETS))) |
||||
@OUTSIZE="`ls -lh "$(IMAGE_OUTPATH)" | cut -f5 -d' '`"; \
|
||||
if [ ! -n "$$OUTSIZE" ]; then \
|
||||
echo "** error: $(IMAGE_OUTPATH) missing" >&2; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
if [ -n "$(VM_SAVE_TARBALL)" ]; then \
|
||||
echo "** tarball saved: $(IMAGE_OUTPATH)/$(IMAGE_OUTNAME).$(VM_SAVE_TARBALL)" >&2; \
|
||||
fi; \
|
||||
echo "** image: $(IMAGE_OUTPATH) [$$OUTSIZE]" >&2 && \
|
||||
echo "IMAGE_OUTPATH = $(IMAGE_OUTPATH)" && \
|
||||
echo "IMAGE_OUTFILE = $(IMAGE_OUTFILE)" && \
|
||||
if [ ! -n "$(NO_SYMLINK)" ]; then \
|
||||
ln -sf "$(IMAGE_RELPATH)" "$(IMAGE_LINKPATH)" && \
|
||||
ln -sf "$(IMAGE_RELDIR)" "$(OUT_LINK)" && \
|
||||
ln -sf "$(IMAGE_LINK)" "$(IMAGEDIR)/$(CURRENT_LINK).$(IMAGE_TYPE)"; \
|
||||
if [ -n "$(IMAGE_VER_LINK)" ]; then \
|
||||
ln -sf "$(IMAGE_RELPATH)" "$(IMAGEDIR)/$(IMAGE_VER_LINK)"; \
|
||||
fi; \
|
||||
fi; \
|
||||
if [ -n "$(GLOBAL_DEBUG)" ]; then \
|
||||
mkdir -p "$(LOGDIR)"; \
|
||||
cp -a build.log "$(LOGDIR)/$(IMAGE_OUTFILE).log"; \
|
||||
cp -a distcfg.mk "$(LOGDIR)/$(IMAGE_OUTFILE).cfg"; \
|
||||
fi
|
||||
|
||||
debug:: |
||||
@echo "TOPDIR=$(TOPDIR)"
|
||||
@echo "IMAGEDIR=$(IMAGEDIR)"
|
||||
@echo "ARCH=$(ARCH)"
|
||||
@echo "GLOBAL_TARGET=$(GLOBAL_TARGET)"
|
||||
@echo "GLOBAL_HSH_LANGS=$(GLOBAL_HSH_LANGS)"
|
||||
@echo "GLOBAL_HSH_APT_CONFIG=$(GLOBAL_HSH_APT_CONFIG)"
|
||||
@echo "GLOBAL_HSH_USE_QEMU=$(GLOBAL_HSH_USE_QEMU)"
|
@ -0,0 +1,21 @@ |
||||
== image.in == |
||||
|
||||
Этот каталог копируется из метапрофиля в профиль "как есть" |
||||
и формирует "заготовку" финальной стадии, собирающей собственно |
||||
образ из результатов работы индивидуальных субпрофилей |
||||
(для distro) либо непосредственно "на месте" (для ve, vm). |
||||
|
||||
Содержимое image.in/files/ копируется в корень образа. |
||||
|
||||
Соответственно для сборки также потребуется одна из фич |
||||
features.in/build-*. |
||||
|
||||
Пакетная база рабочего чрута минимальна (может чуть расширяться |
||||
фичами -- см. features.in/repo/lib/50-genbasedir.mk |
||||
в качестве примера). |
||||
|
||||
Если требуется какая-либо иная обработка чрута, следует |
||||
предпочитать scripts.d -- для универсальной обработки |
||||
скрипт можно добавить здесь, для специфичной -- в фичу. |
||||
|
||||
Результат -- готовый образ в $(IMAGEDIR)/. |
@ -0,0 +1,182 @@ |
||||
mkimage: Processing 'clean-current' ... |
||||
mkimage: Processing 'distclean-current' ... |
||||
/usr/share/mkimage/tools/mki-run-make "stage1/" make distclean all |
||||
make[1]: Entering directory '/home/tema/mkimage-profiles/bld/stage1' |
||||
mkimage: Processing 'clean-current' ... |
||||
mkimage: Processing 'distclean-current' ... |
||||
mkimage: Processing 'prepare' ... |
||||
mkimage: Processing 'prepare-workdir' ... |
||||
Updating fonts cache: [ DONE ] |
||||
WARNING: GRUB_AUTOUPDATE_DEVICE not set in /etc/sysconfig/grub2 |
||||
WARNING: so next boot may fail unless you have another bootloader; |
||||
WARNING: you might want to define it there and run grub-autoupdate |
||||
mkimage: Processing 'copy-tree' ... |
||||
mkimage: Processing 'run-scripts' ... |
||||
mkimage: Processing 'copy-subdirs' ... |
||||
mkimage: Processing 'pack-image' ... |
||||
make[1]: Leaving directory '/home/tema/mkimage-profiles/bld/stage1' |
||||
/usr/share/mkimage/tools/mki-run-make "live/" make distclean all |
||||
make[1]: Entering directory '/home/tema/mkimage-profiles/bld/live' |
||||
mkimage: Processing 'clean-current' ... |
||||
mkimage: Processing 'distclean-current' ... |
||||
mkimage: Processing 'prepare' ... |
||||
mkimage: Processing 'prepare-workdir' ... |
||||
mkimage: Processing 'prepare-image-workdir' ... |
||||
mkimage: Processing 'build-image' ... |
||||
Updating fonts cache: [ DONE ] |
||||
WARNING: GRUB_AUTOUPDATE_DEVICE not set in /etc/sysconfig/grub2 |
||||
WARNING: run grub-install /dev/sdX if needed |
||||
Not booted in EFI mode, unable to update EFI GRUB |
||||
|
||||
Updating mime database: OK |
||||
Adding loading ~/.kometa_env into PAM configs... |
||||
WARNING: GRUB_AUTOUPDATE_DEVICE not set in /etc/sysconfig/grub2 |
||||
WARNING: so next boot may fail unless you have another bootloader; |
||||
WARNING: you might want to define it there and run grub-autoupdate |
||||
mkimage: Processing 'run-image-scripts' ... |
||||
'/etc/group' -> '/etc/group.save' |
||||
/etc/fonts/conf.d/10-antialias.conf |
||||
/etc/fonts/conf.d/11-lcdfilter-default.conf |
||||
/etc/fonts/conf.d/10-hinting.conf |
||||
/etc/fonts/conf.d/10-sub-pixel-rgb.conf |
||||
systemd-sysvinit-249.7-alt4.noarch |
||||
systemd-sysvinit-249.7-alt4.noarch |
||||
mkimage: Processing 'copy-tree' ... |
||||
mkimage: Processing 'run-scripts' ... |
||||
mkimage: Processing 'copy-subdirs' ... |
||||
mkimage: Processing 'pack-image' ... |
||||
Parallel mksquashfs: Using 16 processors |
||||
Creating 4.0 filesystem on /.our/live, block size 262144. |
||||
[/ ] 0/38315 0%
[=- ] 8600/365401 2%
[===/ ] 22200/365401 6%
[====\ ] 30000/365401 8%
[========/ ] 56900/365401 15%
[====================- ] 129700/365401 35%
[=======================/ ] 149700/365401 40%
[=================================\ ] 211600/365401 57%
[==================================/ ] 222100/365401 60%
[==================================/ ] 222700/365401 60%
[====================================| ] 235000/365401 64%
[====================================\ ] 235800/365401 64%
[================================================- ] 308200/365401 84%
[==================================================\ ] 322500/365401 88%
[===================================================/ ] 329800/365401 90%
[=========================================================\] 365401/365401 100% |
||||
|
||||
Exportable Squashfs 4.0 filesystem, xz compressed, data block size 262144 |
||||
compressed data, compressed metadata, compressed fragments, |
||||
compressed xattrs, compressed ids |
||||
duplicates are removed |
||||
Filesystem size 3926693.69 Kbytes (3834.66 Mbytes) |
||||
28.57% of uncompressed filesystem size (13741828.30 Kbytes) |
||||
Inode table size 3015200 bytes (2944.53 Kbytes) |
||||
22.61% of uncompressed inode table size (13335604 bytes) |
||||
Directory table size 3670108 bytes (3584.09 Kbytes) |
||||
33.10% of uncompressed directory table size (11088421 bytes) |
||||
Number of duplicate files found 20585 |
||||
Number of inodes 389871 |
||||
Number of files 333467 |
||||
Number of fragments 20490 |
||||
Number of symbolic links 30021 |
||||
Number of device nodes 11 |
||||
Number of fifo nodes 0 |
||||
Number of socket nodes 0 |
||||
Number of directories 26372 |
||||
Number of ids (unique uids + gids) 70 |
||||
Number of uids 52 |
||||
root (0) |
||||
uucp (10) |
||||
unknown (488) |
||||
unknown (483) |
||||
unknown (491) |
||||
unknown (494) |
||||
unknown (480) |
||||
unknown (499) |
||||
unknown (493) |
||||
unknown (492) |
||||
unknown (497) |
||||
unknown (482) |
||||
unknown (496) |
||||
unknown (498) |
||||
adm (3) |
||||
apache (96) |
||||
bin (1) |
||||
unknown (489) |
||||
daemon (2) |
||||
exim (79) |
||||
unknown (484) |
||||
ftp (14) |
||||
games (12) |
||||
gdm (47) |
||||
unknown (485) |
||||
unknown (500) |
||||
ldap (55) |
||||
lp (4) |
||||
mail (8) |
||||
mailman (41) |
||||
unknown (495) |
||||
mysql (45) |
||||
named (25) |
||||
news (9) |
||||
unknown (479) |
||||
unknown (478) |
||||
nobody (99) |
||||
nscd (28) |
||||
unknown (477) |
||||
unknown (486) |
||||
unknown (476) |
||||
unknown (487) |
||||
popa3d (43) |
||||
postfix (42) |
||||
postgres (46) |
||||
rpc (32) |
||||
rpcuser (29) |
||||
squid (23) |
||||
unknown (481) |
||||
unknown (490) |
||||
xfs (44) |
||||
unknown (1001) |
||||
Number of gids 37 |
||||
root (0) |
||||
wheel (10) |
||||
unknown (488) |
||||
unknown (483) |
||||
lp (7) |
||||
unknown (491) |
||||
shadow (26) |
||||
unknown (463) |
||||
unknown (494) |
||||
unknown (480) |
||||
auth (27) |
||||
unknown (497) |
||||
unknown (484) |
||||
mail (12) |
||||
unknown (485) |
||||
unknown (500) |
||||
mysql (45) |
||||
nobody (99) |
||||
unknown (487) |
||||
rpc (32) |
||||
rpcuser (29) |
||||
unknown (490) |
||||
proc (19) |
||||
cdwriter (80) |
||||
unknown (470) |
||||
unknown (471) |
||||
tty (5) |
||||
chkpwd (24) |
||||
rpm (16) |
||||
utmp (72) |
||||
unknown (460) |
||||
unknown (459) |
||||
unknown (456) |
||||
unknown (468) |
||||
unknown (462) |
||||
unknown (1001) |
||||
unknown (474) |
||||
make[1]: Leaving directory '/home/tema/mkimage-profiles/bld/live' |
||||
mkimage: Processing 'prepare' ... |
||||
mkimage: Processing 'prepare-workdir' ... |
||||
Updating fonts cache: [ DONE ] |
||||
mkimage: Processing 'copy-subdirs' ... |
||||
mkimage: Processing 'copy-tree' ... |
||||
mkimage: Processing 'run-scripts' ... |
||||
removed '/.image/squashcfg.mk' |
||||
removed '/.image/initfs' |
||||
'./license.ru.html' -> '/.image/license.ru.html' |
||||
'./license.all.html' -> '/.image/license.all.html' |
||||
mkimage: Processing 'pack-image' ... |
||||
base=/syslinux |
||||
Not booted in EFI mode, unable to update EFI GRUB |
||||
WARNING: GRUB_AUTOUPDATE_DEVICE not set in /etc/sysconfig/grub2 |
||||
WARNING: so next boot may fail unless you have another bootloader; |
||||
WARNING: you might want to define it there and run grub-autoupdate |
||||
mkfs.fat 4.2 (2021-01-31) |
||||
IMAGE_OUTPATH = /home/tema/out/kometa-school-p10-20211224-x86_64.iso |
||||
IMAGE_OUTFILE = kometa-school-p10-20211224-x86_64.iso |
@ -0,0 +1,525 @@ |
||||
# profile/init
|
||||
ifndef DISTCFG_MK |
||||
DISTCFG_MK = 1
|
||||
# use/pkgpriorities
|
||||
FEATURES += pkgpriorities
|
||||
PIN_PRIORITY = Important
|
||||
# profile/bare
|
||||
MKIMAGE_PREFIX ?= /usr/share/mkimage
|
||||
IMAGEDIR ?= /home/tema/out
|
||||
LOGDIR ?= /home/tema/out
|
||||
BRANDING = kometa-school
|
||||
PINNED_PACKAGES += branding-$(BRANDING)-alterator:Essential
|
||||
PINNED_PACKAGES += branding-$(BRANDING)-bootsplash:Essential
|
||||
PINNED_PACKAGES += branding-$(BRANDING)-bootloader:Essential
|
||||
PINNED_PACKAGES += branding-$(BRANDING)-graphics:Essential
|
||||
PINNED_PACKAGES += branding-$(BRANDING)-indexhtml:Essential
|
||||
PINNED_PACKAGES += branding-$(BRANDING)-notes:Essential
|
||||
PINNED_PACKAGES += branding-$(BRANDING)-release:Essential
|
||||
PINNED_PACKAGES += branding-$(BRANDING)-slideshow:Essential
|
||||
WORK_INIT_LIST = +branding-$(BRANDING)-release
|
||||
IMAGE_INIT_LIST = +branding-$(BRANDING)-release
|
||||
export GLOBAL_ARCH = $(ARCH)
|
||||
# distro/.init
|
||||
META_PREPARER ?= mkimage-profiles
|
||||
META_APP_ID = kometa-school-p10
|
||||
META_PUBLISHER = Proskurnev Artem
|
||||
# boot/iso
|
||||
BOOTLOADER ?= isolinux
|
||||
IMAGE_PACKTYPE ?= boot
|
||||
# distro/.boot
|
||||
META_VOL_ID = KOMETA kometa-school-p10/x86_64
|
||||
META_VOL_SET = ALT
|
||||
GLOBAL_BOOT_LANG = ru_RU
|
||||
# use/kernel
|
||||
FEATURES += kernel
|
||||
KFLAVOURS ?= std-def
|
||||
export GLOBAL_KFLAVOURS = $(KFLAVOURS)
|
||||
# distro/.base
|
||||
META_SYSTEM_ID = LINUX
|
||||
# use/kernel/net
|
||||
THE_KMODULES += e1000e
|
||||
THE_KMODULES += r8125
|
||||
MAIN_KMODULES += r8168 rtl8168
|
||||
# use/docs
|
||||
FEATURES += docs
|
||||
# use/branding
|
||||
FEATURES += branding
|
||||
# use/branding/notes
|
||||
THE_BRANDING += notes
|
||||
# use/docs/license
|
||||
META_LICENSE_FILE = license.all.html
|
||||
# sub/stage1
|
||||
SUBPROFILES += stage1
|
||||
# use/stage2
|
||||
FEATURES += stage2
|
||||
STAGE1_PACKAGES += make-initrd file iproute2
|
||||
STAGE1_MODLISTS += $(FEATURES)
|
||||
export GLOBAL_STAGE1_PACKAGES = $(STAGE1_PACKAGES)
|
||||
export GLOBAL_STAGE1_KCONFIG = $(STAGE1_KCONFIG)
|
||||
HSH_PROC = 1
|
||||
GLOBAL_HSH_PROC = 1
|
||||
# use/uuid-iso
|
||||
FEATURES += uuid-iso
|
||||
#MKI_VER_OPTIMAL = 0.2.41 # overridden by use/efi
|
||||
UUID_ISO_SHRT = 2021120815104900
|
||||
UUID_ISO = 2021-12-08-15-10-49-00
|
||||
export GLOBAL_UUID_ISO = $(UUID_ISO)
|
||||
# use/initrd-propagator
|
||||
FEATURES += initrd-propagator
|
||||
STAGE1_PACKAGES += make-initrd-propagator propagator
|
||||
STAGE1_INITRD = initrd-propagator
|
||||
STAGE1_INITRD_TYPEARGS = changedisk automatic
|
||||
STAGE1_INITRD_BOOTMETHOD = method:cdrom,fuid:2021-12-08-15-10-49-00
|
||||
STAGE1_INITRD_STAGE2_OPTION = stagename
|
||||
# use/stage2/fs
|
||||
STAGE1_MODLISTS += stage2-fs
|
||||
# use/stage2/hid
|
||||
STAGE1_MODLISTS += stage2-hid
|
||||
# use/stage2/md
|
||||
STAGE1_MODLISTS += stage2-md
|
||||
# use/stage2/mmc
|
||||
STAGE1_MODLISTS += stage2-mmc
|
||||
# use/stage2/net
|
||||
STAGE1_MODLISTS += stage2-net
|
||||
# use/stage2/net-nfs
|
||||
STAGE1_MODLISTS += stage2-net-nfs
|
||||
# use/stage2/net-cifs
|
||||
STAGE1_MODLISTS += stage2-net-cifs
|
||||
# use/stage2/cifs
|
||||
STAGE1_PACKAGES += cifs-utils
|
||||
# use/stage2/rtc
|
||||
STAGE1_MODLISTS += stage2-rtc
|
||||
# use/stage2/scsi
|
||||
STAGE1_MODLISTS += stage2-scsi
|
||||
# use/stage2/usb
|
||||
STAGE1_MODLISTS += stage2-usb
|
||||
# distro/.regular-bare
|
||||
SAVE_PROFILE ?= yes
|
||||
# use/vmguest
|
||||
FEATURES += vmguest
|
||||
# use/syslinux
|
||||
FEATURES += syslinux
|
||||
STAGE1_PACKAGES += syslinux
|
||||
BOOTVGA ?= normal
|
||||
SYSLINUX_FILES += /usr/lib/syslinux/pxelinux.0
|
||||
META_SYSTEM_ID ?= SYSLINUX
|
||||
#RELNAME = ALT (alt-p10-kde5) # overridden by use/grub
|
||||
export GLOBAL_SYSLINUX_DEFAULT = $(SYSLINUX_DEFAULT)
|
||||
# use/grub
|
||||
FEATURES += grub
|
||||
BOOTVGA ?= normal
|
||||
RELNAME = KOMETA (kometa-school-p10)
|
||||
export GLOBAL_GRUB_DEFAULT = $(GRUB_DEFAULT)
|
||||
# use/memtest
|
||||
FEATURES += memtest
|
||||
SYSTEM_PACKAGES += memtest86+
|
||||
SYSLINUX_CFG += memtest
|
||||
GRUB_CFG += memtest_bios
|
||||
# use/efi
|
||||
FEATURES += efi
|
||||
MKI_VER_MINIMAL = 0.2.12
|
||||
MKI_VER_OPTIMAL = 0.2.17
|
||||
EFI_BOOTLOADER ?= grub-efi
|
||||
export GLOBAL_EFI_BOOTLOADER = $(EFI_BOOTLOADER)
|
||||
COMMON_LISTS += tagged/base+efi
|
||||
INSTALL2_PACKAGES += dosfstools fatresize
|
||||
STAGE1_KCONFIG += EFI EFI_PARTITION FB_EFI EFIVAR_FS
|
||||
EFI_BOOTARGS += $(STAGE2_BOOTARGS)
|
||||
RESCUE_PACKAGES += refind $(EFI_SHELL) $(EFI_BOOTLOADER)
|
||||
THE_PACKAGES += $(EFI_SHELL)
|
||||
# use/efi/signed
|
||||
EFI_CERT = altlinux
|
||||
COMMON_PACKAGES += shim-signed
|
||||
COMMON_PACKAGES += mokutil pesign
|
||||
RESCUE_PACKAGES += openssl
|
||||
# use/luks
|
||||
FEATURES += luks
|
||||
BASE_PACKAGES += make-initrd-luks
|
||||
THE_PACKAGES += alterator-luks
|
||||
THE_LISTS += tagged/security+luks
|
||||
RESCUE_LISTS += tagged/security+luks
|
||||
# use/volumes
|
||||
FEATURES += volumes
|
||||
INSTALL2_PACKAGES += $(STAGE2_VOLUMES_PROFILE)
|
||||
LIVE_PACKAGES += $(STAGE2_VOLUMES_PROFILE)
|
||||
# use/volumes/regular
|
||||
STAGE2_VOLUMES_PROFILE = volumes-profile-regular
|
||||
# use/browser
|
||||
FEATURES += browser
|
||||
THE_PACKAGES += $(THE_BROWSER)
|
||||
#THE_BROWSER ?= elinks # overridden by use/browser/firefox
|
||||
# use/browser/firefox
|
||||
#THE_BROWSER = firefox$(FX_FLAVOUR) # overridden by use/browser/falkon
|
||||
# use/kernel/disable-usb-autosuspend
|
||||
BASE_BOOTARGS += usbcore.autosuspend=-1
|
||||
STAGE2_BOOTARGS += usbcore.autosuspend=-1
|
||||
SYSTEM_PACKAGES += disable-usb-autosuspend
|
||||
# sub/rootfs
|
||||
SUBPROFILES += rootfs
|
||||
# use/services
|
||||
FEATURES += services
|
||||
export GLOBAL_DEFAULT_SERVICES_ENABLE = $(DEFAULT_SERVICES_ENABLE)
|
||||
export GLOBAL_DEFAULT_SERVICES_DISABLE = $(DEFAULT_SERVICES_DISABLE)
|
||||
export GLOBAL_SERVICES_ENABLE = $(SERVICES_ENABLE)
|
||||
export GLOBAL_SERVICES_DISABLE = $(SERVICES_DISABLE)
|
||||
export GLOBAL_SYSTEMD_SERVICES_ENABLE = $(SYSTEMD_SERVICES_ENABLE)
|
||||
export GLOBAL_SYSTEMD_SERVICES_DISABLE = $(SYSTEMD_SERVICES_DISABLE)
|
||||
# use/ntp
|
||||
FEATURES += ntp
|
||||
#THE_NTPD ?= openntpd # overridden by use/ntp/chrony
|
||||
THE_PACKAGES += $(THE_NTPD)
|
||||
PINNED_PACKAGES += $(THE_NTPD)
|
||||
#THE_NTPD_SERVICE ?= openntpd # overridden by use/ntp/chrony
|
||||
DEFAULT_SERVICES_ENABLE += $(THE_NTPD_SERVICE)
|
||||
# use/ntp/chrony
|
||||
THE_NTPD = chrony
|
||||
THE_NTPD_SERVICE = chronyd
|
||||
# use/services/lvm2-disable
|
||||
DEFAULT_SERVICES_DISABLE += lvm2-lvmetad
|
||||
DEFAULT_SERVICES_DISABLE += lvm2-lvmpolld
|
||||
DEFAULT_SERVICES_DISABLE += lvm2-monitor
|
||||
# mixin/regular-x11
|
||||
THE_LISTS += tagged/desktop+regular tagged/base+regular
|
||||
THE_PACKAGES += disable-usb-autosuspend
|
||||
THE_PACKAGES += btrfs-progs
|
||||
THE_PACKAGES += gpm
|
||||
DEFAULT_SERVICES_DISABLE += gpm powertop
|
||||
FX_FLAVOUR = -esr
|
||||
# use/x11
|
||||
FEATURES += x11
|
||||
THE_LISTS += tagged/base+xorg
|
||||
# use/x11/wacom
|
||||
THE_PACKAGES += xorg-drv-wacom
|
||||
# use/firmware
|
||||
FEATURES += firmware
|
||||
SYSTEM_PACKAGES += firmware-linux
|
||||
# use/x11/amdgpu
|
||||
THE_PACKAGES += xorg-drv-amdgpu
|
||||
# use/firmware/wireless
|
||||
THE_PACKAGES_REGEXP += firmware-prism.*
|
||||
THE_PACKAGES_REGEXP += firmware-ipw.*
|
||||
THE_PACKAGES_REGEXP += firmware-zd.*
|
||||
THE_PACKAGES_REGEXP += firmware-rt.*
|
||||
# use/kernel/wireless
|
||||
THE_KMODULES += bcmwl staging
|
||||
THE_KMODULES += rtl8188fu rtl8192eu rtl8723de rtl8812au
|
||||
THE_KMODULES += rtl8821ce rtl8821cu rtl88x2bu rtl8723bu
|
||||
THE_KMODULES += rtw89
|
||||
# use/wireless
|
||||
FEATURES += wireless
|
||||
THE_LISTS += tools/wireless
|
||||
# use/wireless/full
|
||||
RESCUE_LISTS += tools/wireless
|
||||
# sub/rootfs@live
|
||||
SUBPROFILES += rootfs@live
|
||||
# sub/stage2@live
|
||||
SUBPROFILES += stage2@live
|
||||
# use/grub/live.cfg
|
||||
GRUB_CFG += live
|
||||
# use/live
|
||||
FEATURES += live
|
||||
CLEANUP_BASE_PACKAGES += installer*
|
||||
DEFAULT_SERVICES_ENABLE += alteratord cpufreq-simple livecd-evms livecd-fstab livecd-hostname livecd-setauth livecd-setlocale livecd-timezone livecd-net-eth livecd-install-wmaker random rpcbind plymouth avahi-daemon
|
||||
DEFAULT_SERVICES_DISABLE += anacron blk-availability bridge clamd dhcpd dmeventd dnsmasq mdadm netfs o2cb ocfs2 openvpn postfix rawdevices slapd smartd sshd sysstat update_wms xinetd
|
||||
CONTROL += rpcbind:local
|
||||
export GLOBAL_LIVE_CLEANUP_KDRIVERS = $(LIVE_CLEANUP_KDRIVERS)
|
||||
# use/syslinux/ui/menu
|
||||
#SYSLINUX_UI = menu # overridden by use/syslinux/ui/gfxboot
|
||||
# use/live/.base
|
||||
LIVE_LISTS += tagged/base+desktop+live
|
||||
# use/net
|
||||
FEATURES += net
|
||||
THE_PACKAGES += $(THE_NET_SUBSYS)
|
||||
PINNED_PACKAGES += $(THE_NET_SUBSYS)
|
||||
#THE_NET_SUBSYS = network-config-subsystem # overridden by use/net/nm
|
||||
# use/deflogin
|
||||
FEATURES += deflogin
|
||||
THE_PACKAGES += shadow-utils passwd
|
||||
export GLOBAL_ROOTPW_EMPTY = $(ROOTPW_EMPTY)
|
||||
export GLOBAL_ROOTPW = $(ROOTPW)
|
||||
export GLOBAL_USERS = $(USERS)
|
||||
export GLOBAL_GROUPS = $(GROUPS)
|
||||
export GLOBAL_SPEC_USER = $(SPEC_USER)
|
||||
# use/deflogin/live
|
||||
ROOTPW_EMPTY = 1
|
||||
USERS += kometa::1:1
|
||||
# use/live/base
|
||||
LIVE_LISTS += tagged/base+network
|
||||
# use/deflogin/hardware
|
||||
GROUPS += cdwriter radio scanner lp uucp
|
||||
# use/deflogin/xgrp
|
||||
GROUPS += xgrp audio
|
||||
# use/deflogin/privileges
|
||||
GROUPS += fuse netadmin proc users
|
||||
# use/x11-autostart
|
||||
FEATURES += x11-autostart
|
||||
BASE_PACKAGES += installer-feature-runlevel5-stage3
|
||||
# use/x11-autologin
|
||||
FEATURES += x11-autologin
|
||||
THE_PACKAGES += shadow-groups
|
||||
# use/sound
|
||||
FEATURES += sound
|
||||
THE_LISTS += sound/base
|
||||
THE_LISTS += $(THE_SOUND)
|
||||
# use/fonts
|
||||
FEATURES += fonts
|
||||
FONTS ?= fonts-ttf-google-croscore-arimo
|
||||
THE_PACKAGES += $(FONTS)
|
||||
export GLOBAL_FONT_FEATURES_ENABLE = $(FONT_FEATURES_ENABLE)
|
||||
export GLOBAL_FONT_FEATURES_DISABLE = $(FONT_FEATURES_DISABLE)
|
||||
# use/fonts/otf/adobe
|
||||
FONTS += fonts-otf-adobe-source-code-pro
|
||||
FONTS += fonts-otf-adobe-source-sans-pro
|
||||
# use/fonts/otf/mozilla
|
||||
FONTS += fonts-otf-mozilla-fira
|
||||
# use/live/x11
|
||||
LIVE_LISTS += tagged/desktop+live tagged/base+desktop+live
|
||||
LIVE_LISTS += tagged/base+l10n
|
||||
LIVE_PACKAGES += pciutils
|
||||
# use/live/repo
|
||||
LIVE_REPO ?= http/yandex
|
||||
export GLOBAL_LIVE_REPO = $(LIVE_REPO)
|
||||
# use/live/suspend
|
||||
LIVE_PACKAGES += installer-feature-desktop-suspend-stage2
|
||||
# use/browser/firefox/live
|
||||
#THE_BROWSER += livecd-firefox # overridden by use/browser/falkon
|
||||
# use/syslinux/ui/gfxboot
|
||||
SYSLINUX_UI = gfxboot
|
||||
STAGE1_PACKAGES += gfxboot
|
||||
STAGE1_BRANDING += bootloader
|
||||
# use/grub/ui/gfxboot
|
||||
GRUB_UI = gfxboot
|
||||
STAGE1_BRANDING += bootloader
|
||||
STAGE1_PACKAGES += grub-common
|
||||
# distro/.regular-x11
|
||||
THE_BRANDING += bootloader
|
||||
THE_LISTS += tagged/base+regular+extra tagged/desktop+regular tagged/base+regular
|
||||
LIVE_LISTS += tagged/base+rescue
|
||||
LIVE_PACKAGES += gpm
|
||||
DEFAULT_SERVICES_DISABLE += gpm powertop
|
||||
# use/sound/alsa
|
||||
#THE_SOUND = sound/alsa # overridden by use/sound/pulse
|
||||
# use/power
|
||||
FEATURES += power
|
||||
# use/power/acpi
|
||||
COMMON_PACKAGES += acpid acpi
|
||||
DEFAULT_SERVICES_ENABLE += acpid
|
||||
# use/power/acpi/button
|
||||
COMMON_PACKAGES += acpid-events-power
|
||||
# use/net/nm/native
|
||||
NM_Native = yes
|
||||
# use/drm
|
||||
FEATURES += drm
|
||||
DRM_KMODULES += drm
|
||||
THE_KMODULES += $(DRM_KMODULES)
|
||||
# use/x11/intel
|
||||
THE_PACKAGES += xorg-drv-intel
|
||||
THE_PACKAGES += xorg-dri-intel
|
||||
# use/drm/nouveau
|
||||
NVIDIA_KMODULES ?= drm-nouveau
|
||||
DRM_KMODULES += $(NVIDIA_KMODULES)
|
||||
# use/x11/nouveau
|
||||
NVIDIA_PACKAGES ?= xorg-drv-nouveau
|
||||
THE_PACKAGES += $(NVIDIA_PACKAGES)
|
||||
# use/drm/radeon
|
||||
DRM_KMODULES += drm-radeon
|
||||
# use/x11/radeon
|
||||
RADEON_PACKAGES ?= xorg-drv-ati xorg-drv-radeon
|
||||
THE_PACKAGES += $(RADEON_PACKAGES)
|
||||
# use/drm/ancient
|
||||
DRM_KMODULES += drm-ancient
|
||||
# use/x11/xorg
|
||||
THE_LISTS += tagged/desktop+xorg
|
||||
# use/control
|
||||
FEATURES += control
|
||||
THE_PACKAGES += control
|
||||
export GLOBAL_CONTROL = $(CONTROL)
|
||||
# use/xdg-user-dirs
|
||||
FEATURES += xdg-user-dirs
|
||||
CONTROL += xdg-user-dirs:enabled
|
||||
THE_PACKAGES += xdg-user-dirs
|
||||
export GLOBAL_XDG_USER_DIRS = $(XDG_USER_DIRS)
|
||||
# use/l10n
|
||||
FEATURES += l10n
|
||||
THE_LISTS += tagged/base+l10n
|
||||
LOCALES += en_US
|
||||
XKB_KEYMAPS += us
|
||||
LOCALE ?= en_US
|
||||
# use/l10n/ru_RU
|
||||
LOCALES += ru_RU
|
||||
LOCALE = ru_RU
|
||||
XKB_KEYMAPS += ru
|
||||
KEYTABLE = ruwin_ct_sh-UTF-8
|
||||
|
||||
export GLOBAL_LOCALE = $(LOCALE)
|
||||
export GLOBAL_LOCALES = $(LOCALES)
|
||||
export GLOBAL_XKB_KEYMAPS = $(XKB_KEYMAPS)
|
||||
export GLOBAL_XKB_VARIANTS = $(XKB_VARIANTS)
|
||||
export GLOBAL_XKB_SWITCH = $(XKB_SWITCH)
|
||||
export GLOBAL_XKB_LED = $(XKB_LED)
|
||||
# mixin/regular-desktop
|
||||
THE_PACKAGES += pam-limits-desktop beesu polkit dvd+rw-tools
|
||||
THE_BRANDING += alterator graphics indexhtml
|
||||
THE_BRANDING += notes
|
||||
THE_PACKAGES += $(THE_IMAGEWRITER)
|
||||
THE_IMAGEWRITER = altmediawriter
|
||||
THE_PACKAGES += upower udev-rules-rfkill-uaccess
|
||||
DEFAULT_SERVICES_DISABLE += gssd idmapd krb5kdc rpcbind
|
||||
DEFAULT_SERVICES_ENABLE += cups sshd
|
||||
DEFAULT_SERVICES_ENABLE += alteratord
|
||||
# use/vmguest/kvm
|
||||
THE_PACKAGES += qemu-guest-agent
|
||||
# use/vmguest/vmware
|
||||
THE_KMODULES += vmware
|
||||
THE_KMODULES += scsi
|
||||
THE_PACKAGES += open-vm-tools
|
||||
# use/vmguest/vbox/x11
|
||||
THE_KMODULES += drm
|
||||
THE_PACKAGES += virtualbox-guest-additions
|
||||
# use/vmguest/vmware/x11
|
||||
THE_PACKAGES += xorg-drv-vmware xorg-drv-vmmouse
|
||||
THE_PACKAGES += open-vm-tools-desktop
|
||||
# use/vmguest/kvm/x11
|
||||
THE_PACKAGES += spice-vdagent xorg-drv-qxl xorg-drv-spiceqxl
|
||||
#THE_PACKAGES += xorg-dri-virtio
|
||||
# use/syslinux/live_rw.cfg
|
||||
SYSLINUX_CFG += live_rw
|
||||
# use/grub/live_rw.cfg
|
||||
GRUB_CFG += live_rw
|
||||
# use/metadata
|
||||
FEATURES += metadata
|
||||
# use/syslinux/localboot.cfg
|
||||
SYSLINUX_CFG += localboot
|
||||
# use/grub/localboot_bios.cfg
|
||||
GRUB_CFG += localboot_bios
|
||||
# use/bootloader
|
||||
FEATURES += bootloader
|
||||
#BASE_BOOTLOADER ?= grub # overridden by use/bootloader/grub
|
||||
export GLOBAL_BASE_BOOTLOADER = $(BASE_BOOTLOADER)
|
||||
BASE_LISTS += $(BASE_BOOTLOADER)
|
||||
export GLOBAL_BASE_BOOTARGS = $(BASE_BOOTARGS)
|
||||
BASE_PACKAGES += installer-feature-bootloader-$(BASE_BOOTLOADER)
|
||||
PINNED_PACKAGES += alterator-$(BASE_BOOTLOADER)
|
||||
PINNED_PACKAGES += installer-bootloader-$(BASE_BOOTLOADER)-stage2
|
||||
# use/bootloader/live
|
||||
LIVE_PACKAGES += alterator-$(BASE_BOOTLOADER)
|
||||
# use/bootloader/grub
|
||||
BASE_BOOTLOADER = grub
|
||||
# use/live/install
|
||||
LIVE_PACKAGES += livecd-install
|
||||
LIVE_PACKAGES += livecd-kometa-hack
|
||||
LIVE_PACKAGES += livecd-installer-features
|
||||
# distro/.regular-wm
|
||||
LIVE_PACKAGES += livecd-install-apt-cache
|
||||
# use/branding/full
|
||||
THE_BRANDING += alterator graphics
|
||||
THE_BRANDING += indexhtml slideshow
|
||||
THE_BRANDING += bootloader
|
||||
THE_BRANDING += bootsplash
|
||||
# use/firmware/cpu
|
||||
THE_PACKAGES += firmware-intel-ucode iucode_tool
|
||||
# use/firmware/laptop
|
||||
THE_KMODULES += acpi_call
|
||||
THE_PACKAGES += firmware-alsa-sof
|
||||
# use/init
|
||||
FEATURES += init
|
||||
THE_LISTS += $(INIT_TYPE)
|
||||
PINNED_PACKAGES += $(INIT_TYPE)
|
||||
# use/init/systemd
|
||||
INIT_TYPE = systemd
|
||||
# use/init/systemd/full
|
||||
THE_PACKAGES += chkconfig
|
||||
THE_PACKAGES += vconsole-setup-kludge
|
||||
# use/init/systemd/settings/enable-log-to-tty12
|
||||
THE_PACKAGES += systemd-settings-enable-log-to-tty12
|
||||
# use/init/systemd/settings/enable-showstatus
|
||||
THE_PACKAGES += systemd-settings-enable-showstatus
|
||||
# distro/.regular-desktop
|
||||
THE_PACKAGES += bluez
|
||||
DEFAULT_SERVICES_ENABLE += bluetoothd
|
||||
# use/net/nm
|
||||
THE_NET_SUBSYS = NetworkManager
|
||||
THE_LISTS += tagged/base+nm
|
||||
THE_LISTS += tagged/base+kde5
|
||||
THE_LISTS += tagged/base+kometa
|
||||
LIVE_PACKAGES += livecd-save-nfs
|
||||
DEFAULT_SERVICES_ENABLE += network
|
||||
DEFAULT_SERVICES_ENABLE += NetworkManager ModemManager
|
||||
DEFAULT_SERVICES_ENABLE += livecd-save-nfs
|
||||
export GLOBAL_NM_native = $(NM_native)
|
||||
# use/x11/kde/synaptic
|
||||
THE_PACKAGES += synaptic-kde synaptic-usermode-
|
||||
# use/x11/kde5
|
||||
#THE_PACKAGES += kde5-big
|
||||
# use/browser/falkon
|
||||
THE_BROWSER = chromium
|
||||
# use/x11/dm
|
||||
#THE_DISPLAY_MANAGER ?= xdm # overridden by use/x11/kde5-display-manager-lightdm
|
||||
THE_PACKAGES += $(THE_DISPLAY_MANAGER)
|
||||
PINNED_PACKAGES += $(THE_DISPLAY_MANAGER)
|
||||
DEFAULT_SERVICES_ENABLE += $(THE_DM_SERVICE)
|
||||
# use/x11/sddm
|
||||
THE_DISPLAY_MANAGER = sddm
|
||||
# use/x11/kde5-display-manager-lightdm
|
||||
#THE_DISPLAY_MANAGER = kde5-display-manager-lightdm
|
||||
#THE_DM_SERVICE = lightdm
|
||||
#PINNED_PACKAGES += kde5-display-manager-sddm:Extra
|
||||
# use/fonts/ttf/google
|
||||
FONTS += fonts-ttf-google-droid-sans
|
||||
FONTS += fonts-ttf-google-droid-sans-mono
|
||||
FONTS += fonts-ttf-google-droid-serif
|
||||
FONTS += fonts-ttf-google-croscore-arimo
|
||||
FONTS += fonts-ttf-google-croscore-cousine
|
||||
FONTS += fonts-ttf-google-croscore-tinos
|
||||
# use/fonts/ttf/redhat
|
||||
FONTS += fonts-ttf-liberation
|
||||
# use/fonts/zerg
|
||||
FONT_FEATURES_ENABLE = antialias lcdfilter-default hinting style-full sub-pixel-rgb
|
||||
FONT_FEATURES_DISABLE = no-antialias lcdfilter-none unhinted no-sub-pixel
|
||||
# use/sound/pulse
|
||||
THE_SOUND = sound/pulseaudio
|
||||
# mixin/regular-kde5
|
||||
#THE_PACKAGES += kde5-telepathy falkon-kde5
|
||||
# use/net/dhcp
|
||||
THE_PACKAGES += dhcpcd
|
||||
# use/domain-client
|
||||
FEATURES += domain-client
|
||||
THE_LISTS += domain-client
|
||||
# use/plymouth
|
||||
FEATURES += plymouth
|
||||
# use/stage2/drm
|
||||
STAGE1_MODLISTS += stage2-drm
|
||||
# use/drm/stage2
|
||||
STAGE1_DRM_KMODULES += drm
|
||||
STAGE1_KMODULES += $(STAGE1_DRM_KMODULES)
|
||||
# use/drm/stage2/ancient
|
||||
STAGE1_DRM_KMODULES += drm-ancient
|
||||
# use/drm/stage2/radeon
|
||||
STAGE1_DRM_KMODULES += drm-radeon
|
||||
# use/drm/stage2/nouveau
|
||||
STAGE1_DRM_KMODULES += drm-nouveau
|
||||
# use/plymouth/stage2
|
||||
STAGE1_PACKAGES_REGEXP += make-initrd-plymouth
|
||||
STAGE1_BRANDING += bootsplash
|
||||
STAGE2_BRANDING += bootsplash
|
||||
STAGE2_BOOTARGS += quiet splash
|
||||
# use/plymouth/base
|
||||
INSTALL2_PACKAGES += installer-feature-setup-plymouth
|
||||
BASE_PACKAGES_REGEXP += make-initrd-plymouth cpio
|
||||
THE_BRANDING += bootsplash
|
||||
THE_PACKAGES += make-initrd-plymouth
|
||||
BASE_BOOTARGS += splash
|
||||
# use/build-distro
|
||||
FEATURES += build-distro
|
||||
# config/name/alt-p10-kde5
|
||||
IMAGE_NAME = kometa-school-p10
|
||||
# use/pack
|
||||
FEATURES += pack
|
||||
# use/pack/iso
|
||||
IMAGE_PACKTYPE ?= isodata
|
||||
# config/pack/iso
|
||||
IMAGE_TYPE = iso
|
||||
# profile/finalize
|
||||
SUBPROFILE_DIRS = $(notdir $(subst @,/,$(SUBPROFILES)))
|
||||
endif |
@ -0,0 +1 @@ |
||||
x86_64 |
@ -0,0 +1 @@ |
||||
e8f8a56263ae690a4325e4fbdef5cabb111406e0 |
@ -0,0 +1 @@ |
||||
20211227 |
@ -0,0 +1 @@ |
||||
KOMETA kometa-school-p10/x86_64 build 2021-12-27 |
Binary file not shown.
Binary file not shown.
@ -0,0 +1,55 @@ |
||||
ifneq (clean,$(MAKECMDGOALS)) |
||||
ifneq (distclean,$(MAKECMDGOALS)) |
||||
|
||||
ifndef INCLUDED_FUNCTIONS_MK |
||||
INCLUDED_FUNCTIONS_MK = 1
|
||||
|
||||
# globals
|
||||
PKGDIR ?= $(GLOBAL_BUILDDIR)/pkg
|
||||
|
||||
# duplicated from metaprofile makefiles for the sake of "local" builds
|
||||
ARCH ?= $(shell arch | sed 's/i686/i586/; s/armv.*/arm/')
|
||||
DATE ?= $(shell date +%Y%m%d)
|
||||
|
||||
# prefix pkglist name with its directory to form a path (relative/absolute)
|
||||
rlist = $(1:%=lists/%)
|
||||
list = $(addprefix $(PKGDIR)/,$(call rlist,$(1)))
|
||||
|
||||
# prefix/suffix group name to form a path (relative/absolute)
|
||||
rgroup = $(1:%=groups/%.directory)
|
||||
group = $(addprefix $(PKGDIR)/,$(call rgroup,$(1)))
|
||||
|
||||
# prefix/suffix pkg profile name to form a path (relative/absolute)
|
||||
rprofile = $(1:%=profiles/%.directory)
|
||||
profile = $(addprefix $(PKGDIR)/,$(call rprofile,$(1)))
|
||||
|
||||
# map first argument (a function) onto second one (an argument list)
|
||||
map = $(foreach a,$(2),$(call $(1),$(a)))
|
||||
|
||||
# happens at least twice, and variables are the same by design
|
||||
groups2lists = $(shell $(groups2lists_body))
|
||||
define groups2lists_body |
||||
{ if [ -n "$(THE_GROUPS)$(MAIN_GROUPS)" ]; then \ |
||||
sed -rn 's,^X-Alterator-PackageList=(.*)$$,\1,p' \
|
||||
$(call map,group,$(THE_GROUPS) $(MAIN_GROUPS)); \
|
||||
fi; } |
||||
endef |
||||
|
||||
# kernel package list generation; see also #24669
|
||||
NULL :=
|
||||
SPACE := $(NULL) # the officially documented way of getting a space
|
||||
COMMA := ,
|
||||
|
||||
list2re = $(subst $(SPACE),|,$(strip $(1)))
|
||||
|
||||
# args: KFLAVOURS, KMODULES
|
||||
# NB: $(2) could be empty
|
||||
kpackages = $(and $(1), \
|
||||
^kernel-(image|modules-($(call list2re,$(2))))-($(call list2re,$(1)))$$)
|
||||
|
||||
# arg: branding subpackages
|
||||
branding = $(and $(1),^branding-$(BRANDING)-($(call list2re,$(1)))$$)
|
||||
|
||||
endif |
||||
endif |
||||
endif |
@ -0,0 +1,6 @@ |
||||
#!/bin/sh |
||||
# fixup chroot's toplevel directory permissions (use to become 1775) |
||||
|
||||
chmod 755 / |
||||
|
||||
rm -f /.gitignore |
@ -0,0 +1,5 @@ |
||||
#!/bin/sh -e |
||||
# drop intermediate files not needed in the image |
||||
# which receive broken permissions in fakeroot environment |
||||
|
||||
rm -f /etc/tcb/*/shadow{-,.lock} |
@ -0,0 +1,6 @@ |
||||
# step 4: build the distribution image
|
||||
# take care for kernel bits
|
||||
|
||||
DOT_BASE += $(call kpackages, \
|
||||
$(KFLAVOURS), \
|
||||
$(sort $(THE_KMODULES) $(BASE_KMODULES) $(BASE_KMODULES_REGEXP)))
|
@ -0,0 +1,9 @@ |
||||
# step 4: build the distribution image
|
||||
|
||||
DOT_BASE += $(call branding,$(THE_BRANDING))
|
||||
|
||||
# needed for refind only
|
||||
ifeq (,$(filter-out x86_64,$(ARCH))) |
||||
CHROOT_PACKAGES_REGEXP += $(call branding,bootloader)
|
||||
CHROOT_PACKAGES += ImageMagick-tools
|
||||
endif |
@ -0,0 +1,14 @@ |
||||
# step 4: build the distribution image
|
||||
|
||||
ifneq (,$(DOCS)) |
||||
DOT_BASE += docs-$(DOCS)
|
||||
CHROOT_PACKAGES += docs-$(DOCS)
|
||||
endif |
||||
|
||||
ifneq (,$(findstring notes,$(THE_BRANDING) $(INSTALL2_BRANDING))) |
||||
CHROOT_PACKAGES_REGEXP += $(call branding,notes)
|
||||
endif |
||||
|
||||
ifneq (,$(findstring indexhtml,$(THE_BRANDING))) |
||||
CHROOT_PACKAGES_REGEXP += $(call branding,indexhtml)
|
||||
endif |
@ -0,0 +1,46 @@ |
||||
# step 4: build the distribution image
|
||||
|
||||
# package lists are needed for installer and live-install images
|
||||
METADIR := files/Metadata
|
||||
|
||||
# preparation targets of features.in/build-distro/lib/build-distro.mk
|
||||
WHATEVER += metadata
|
||||
|
||||
# handle these too
|
||||
DOT_BASE += $(BASE_PACKAGES_REGEXP) $(THE_PACKAGES_REGEXP)
|
||||
|
||||
# args: type, name
|
||||
define dump |
||||
if [ -n "$($(2)_$(1))" ]; then \ |
||||
echo -e "\n## $(2)_$(1)"; \
|
||||
case "$(1)" in \
|
||||
PACKAGES) echo "$($(2)_$(1))";; \
|
||||
LISTS) echo -e "\n# $($(2)_$(1))"; cat $($(2)_$(1));; \
|
||||
esac; \
|
||||
fi; |
||||
endef |
||||
|
||||
# BASE_PACKAGES, BASE_LISTS and whatever else goes into base install;
|
||||
# thus construct requisite .base packagelist for alterator-pkg
|
||||
metadata-.base: |
||||
@cd $(call list,/); \
|
||||
{ \
|
||||
echo "## generated by features.in/metadata/lib/50-metadata.mk";\
|
||||
$(foreach p,SYSTEM COMMON THE BASE,$(call dump,PACKAGES,$(p))) \
|
||||
$(foreach l,COMMON THE BASE,$(call dump,LISTS,$(l))) \
|
||||
if [ -n "$(DOT_BASE)" ]; then \
|
||||
echo -e "\n## DOT_BASE\n$(DOT_BASE)"; \
|
||||
fi; \
|
||||
} | sed -re 's/^[[:space:]]+//' | sed -re '/^[^[:space:]#]/ s/[[:space:]]+/\n/g' > .base
|
||||
|
||||
# see also alterator-pkg (backend3/pkg-install);
|
||||
# we only tar up what's up to it (note that e.g.
|
||||
# LIVE_LISTS are needed in the generated profile
|
||||
# but not for alterator-pkg)
|
||||
metadata: metadata-.base |
||||
@mkdir -p $(METADIR); \
|
||||
tar -C $(PKGDIR) -cvf - \
|
||||
$(call rlist,.base $(call groups2lists)) \
|
||||
$(call rgroup,$(THE_GROUPS) $(MAIN_GROUPS)) \
|
||||
$(call rprofile,$(THE_PROFILES)) \
|
||||
> $(METADIR)/pkg-groups.tar
|
@ -0,0 +1,47 @@ |
||||
# step 4: build the distribution image
|
||||
|
||||
# proxy over the ISO metadata collected; see also genisoimagerc(5)
|
||||
BOOT_SYSI := $(META_SYSTEM_ID)
|
||||
BOOT_PUBL := $(META_PUBLISHER)
|
||||
BOOT_PREP := $(META_PREPARER)
|
||||
BOOT_APPI := $(META_APP_ID)
|
||||
BOOT_VOLI := $(shell echo $(META_VOL_ID) | cut -c1-32)
|
||||
BOOT_VOLS := $(META_VOL_SET)
|
||||
BOOT_BIBL := $(META_BIBLIO)
|
||||
BOOT_ABST := $(META_ABSTRACT)
|
||||
BOOT_COPY := $(META_LICENSE_FILE)
|
||||
|
||||
ISODATA_SYSI = $(BOOT_SYSI)
|
||||
ISODATA_PUBL = $(BOOT_PUBL)
|
||||
ISODATA_PREP = $(BOOT_PREP)
|
||||
ISODATA_APPI = $(BOOT_APPI)
|
||||
ISODATA_VOLI = $(BOOT_VOLI)
|
||||
ISODATA_VOLS = $(BOOT_VOLS)
|
||||
ISODATA_BIBL = $(BOOT_BIBL)
|
||||
ISODATA_ABST = $(BOOT_ABST)
|
||||
ISODATA_COPY = $(BOOT_COPY)
|
||||
|
||||
DATE_F := $(shell date +%F)
|
||||
|
||||
BOOT_TYPE := $(BOOTLOADER)
|
||||
|
||||
all: | $(GLOBAL_DEBUG) prep copy-subdirs copy-tree run-scripts pack-image \
|
||||
postprocess $(GLOBAL_CLEAN_WORKDIR)
|
||||
|
||||
prep: | $(GLOBAL_DEBUG) dot-disk $(WHATEVER) |
||||
|
||||
# can't use mp-showref which belongs to the metaprofile
|
||||
dot-disk: |
||||
@mkdir -p files/.disk
|
||||
@if [ -n "$(META_DISK_INFO)" ]; then \
|
||||
echo "$(META_DISK_INFO)" >files/.disk/info; \
|
||||
else \
|
||||
echo "$(META_VOL_ID) build $(DATE_F)" >files/.disk/info; \
|
||||
fi
|
||||
@echo "$(ARCH)" >files/.disk/arch
|
||||
@echo "$(DATE)" >files/.disk/date
|
||||
@if type -t git >&/dev/null; then \
|
||||
( cd $(TOPDIR) && test -d .git && \
|
||||
git show-ref --head -ds -- HEAD ||:) \
|
||||
>files/.disk/commit 2>/dev/null; \
|
||||
fi
|
@ -0,0 +1,77 @@ |
||||
# step 4: build a stage2 subprofile (custom livecd)
|
||||
|
||||
# NB: stage2 is not standalone but rather a common base
|
||||
# for all livecd images (installer, live, rescue)
|
||||
|
||||
ifndef GLOBAL_BUILDDIR |
||||
$(error GLOBAL_BUILDDIR not defined) |
||||
endif |
||||
|
||||
default: all |
||||
|
||||
include $(GLOBAL_BUILDDIR)/distcfg.mk |
||||
include $(GLOBAL_BUILDDIR)/functions.mk |
||||
include $(MKIMAGE_PREFIX)/config.mk |
||||
|
||||
COPY_TREE = ./files
|
||||
|
||||
# this might have been prepared
|
||||
# by features.in/stage2/stage1/scripts.d/03-test-kernel
|
||||
-include $(GLOBAL_BUILDDIR)/squashcfg.mk |
||||
|
||||
# this should be brought in by corresponding specific stage2 feature
|
||||
include stage2cfg.mk |
||||
|
||||
# requisite stuff
|
||||
IMAGE_PACKAGES += $(SYSTEM_PACKAGES) $(STAGE2_PACKAGES)
|
||||
|
||||
# here we try and come up with the installer kernel/modules, if any;
|
||||
# only for grub allowed multiple kernels, for other a single kernel
|
||||
# might be needed (STAGE1_KFLAVOURS sets explicitly);
|
||||
# kernel image copied from instrumental chroot into .work/boot/
|
||||
ifeq (grubpcboot,$(BOOTLOADER)) |
||||
STAGE1_KFLAVOURS ?= $(KFLAVOURS)
|
||||
endif |
||||
ifeq (grub-efi,$(EFI_BOOTLOADER)) |
||||
STAGE1_KFLAVOURS ?= $(KFLAVOURS)
|
||||
endif |
||||
ifeq (ieee1275boot,$(BOOTLOADER)) |
||||
STAGE1_KFLAVOURS ?= $(KFLAVOURS)
|
||||
endif |
||||
STAGE1_KFLAVOURS ?= $(lastword $(KFLAVOURS))
|
||||
|
||||
ifeq (,$(STAGE1_KFLAVOURS)) |
||||
$(error STAGE1_KFLAVOURS is utterly empty; cannot guess either) |
||||
endif |
||||
|
||||
# need kernel modules only (which require corresponding kernel-image);
|
||||
# these go into work chroot; NB: no vmlinuz there (unless live-install)
|
||||
IMAGE_PACKAGES_REGEXP += $(call kpackages, \
|
||||
$(STAGE1_KFLAVOURS), \
|
||||
$(STAGE1_KMODULES) $(STAGE1_KMODULES_REGEXP) \
|
||||
$(STAGE2_KMODULES) $(STAGE2_KMODULES_REGEXP))
|
||||
|
||||
-include $(sort $(wildcard lib/*.mk)) |
||||
|
||||
# see also ./scripts.d/99-elf-stats
|
||||
ifdef GLOBAL_SQUASHFS_SORT |
||||
ifeq (tight,$(SQUASHFS)) |
||||
CHROOT_PACKAGES += file
|
||||
pack-image: PACK_SQUASHFS_OPTS += -sort /.our/elf.lst |
||||
pack-image: CLEANUP_OUTDIR= |
||||
endif |
||||
endif |
||||
|
||||
GLOBAL_SQUASHFS := $(SQUASHFS)
|
||||
|
||||
include $(MKIMAGE_PREFIX)/targets.mk |
||||
|
||||
# NB: it's a collector variable, add()ing to a GLOBAL_ results in lost hair
|
||||
GLOBAL_CLEANUP_PACKAGES := $(CLEANUP_PACKAGES)
|
||||
|
||||
all: | $(GLOBAL_DEBUG) \
|
||||
build-image run-image-scripts copy-tree run-scripts pack-image \
|
||||
$(GLOBAL_CLEAN_WORKDIR)
|
||||
|
||||
# dummy
|
||||
debug:: ; |
@ -0,0 +1,16 @@ |
||||
=== sub.in/stage2 === |
||||
|
||||
Этот каталог содержит общий базовый субпрофиль "живой" второй стадии, |
||||
используемый для сборки образов install2, live, rescue (возможно, |
||||
нескольких одновременно в составе одного дистрибутива). |
||||
|
||||
Зависимость на него стоит прописывать в таких фичах; |
||||
сама по себе (без нужного stage2cfg.mk) смысла не имеет. |
||||
|
||||
Обратите внимание, что набор потенциально доступных в stage1 |
||||
модулей ядра для stage2 может быть расширен (STAGE2_KMODULES). |
||||
|
||||
Результат -- соответственно названный файл со squashfs, |
||||
подлежащий копированию в итоговый образ. |
||||
|
||||
NB: смонтированный образ доступен в такой системе как /image/. |
@ -0,0 +1,5 @@ |
||||
#!/bin/sh |
||||
|
||||
# propagator needs this, |
||||
# "FATAL ERROR IN INIT: overmounting /image" otherwise |
||||
mkdir -p /image |
@ -0,0 +1,6 @@ |
||||
#!/bin/sh |
||||
# fixup chroot's toplevel directory permissions (use to become 1775) |
||||
|
||||
chmod 755 / |
||||
|
||||
rm -f /.gitignore |
@ -0,0 +1,5 @@ |
||||
#!/bin/sh |
||||
# if we're configured for running live hooks, |
||||
# there should be a place for them either |
||||
|
||||
chkconfig livecd-run-hooks on >&/dev/null && mkdir /live.hooks ||: |
@ -0,0 +1,10 @@ |
||||
#!/bin/sh |
||||
|
||||
CONFIG=/etc/plymouth/plymouthd.conf |
||||
|
||||
if [ -f "$CONFIG" ]; then |
||||
grep -q '^Theme=' "$CONFIG" || sed -i 's/#\([T\[]\)/\1/' "$CONFIG" |
||||
fi |
||||
|
||||
cp -a /usr/share/plymouth/default-install-duration \ |
||||
/var/lib/plymouth/boot-duration ||: |
@ -0,0 +1,40 @@ |
||||
#!/bin/sh |
||||
# this script implements the services regulation |
||||
# according to what has been decided in the profile |
||||
|
||||
CHKCONFIG= |
||||
SYSTEMCTL= |
||||
|
||||
[ ! -x /sbin/chkconfig ] || CHKCONFIG=1 |
||||
[ ! -x /bin/systemctl ] || SYSTEMCTL=1 |
||||
|
||||
[ -n "$CHKCONFIG$SYSTEMCTL" ] || exit 0 |
||||
|
||||
switch() { |
||||
case "$2" in |
||||
on) |
||||
cc=on; sc=enable;; |
||||
off) |
||||
cc=off; sc=disable;; |
||||
esac |
||||
|
||||
{ |
||||
[ -z "$SYSTEMCTL" ] || /bin/systemctl --no-reload $sc $1 |
||||
[ -z "$CHKCONFIG" ] || /sbin/chkconfig $1 $cc |
||||
} # 2>/dev/null |
||||
} |
||||
|
||||
# defaults (most likely features.in ones) |
||||
for i in $GLOBAL_DEFAULT_SERVICES_ENABLE; do switch $i on; done |
||||
for i in $GLOBAL_DEFAULT_SERVICES_DISABLE; do switch $i off; done |
||||
|
||||
# explicitly specified behaviour (e.g. via conf.d) |
||||
for i in $GLOBAL_SERVICES_ENABLE; do switch $i on; done |
||||
for i in $GLOBAL_SERVICES_DISABLE; do switch $i off; done |
||||
|
||||
# systemd services |
||||
CHKCONFIG= |
||||
for i in $GLOBAL_SYSTEMD_SERVICES_ENABLE; do switch $i on; done |
||||
for i in $GLOBAL_SYSTEMD_SERVICES_DISABLE; do switch $i off; done |
||||
|
||||
: |
@ -0,0 +1,14 @@ |
||||
#!/bin/sh -efu |
||||
# if no means for locale setup are employed, |
||||
# it should still be at least marginally reasonable |
||||
# NB: keyboard layout not included! |
||||
|
||||
if [ -s /etc/sysconfig/i18n ]; then exit 0; fi |
||||
|
||||
mkdir -p /etc/sysconfig |
||||
cat >> /etc/sysconfig/i18n << _EOF_ |
||||
# mkimage-profiles live 20-locale hook |
||||
SYSFONT=UniCyr_8x16 |
||||
LANG=en_US.utf8 |
||||
_EOF_ |
||||
: |
@ -0,0 +1,13 @@ |
||||
#!/bin/sh -eu |
||||
|
||||
# ensure that all the necesary system groups exist |
||||
|
||||
echo '/usr/share/install3/default-groups |
||||
/etc/alterator/auth/user-groups |
||||
/etc/alterator/auth/admin-groups' \ |
||||
| while read LIST; do |
||||
[ -s "$LIST" ] || continue |
||||
for GROUP in $(cat "$LIST"); do |
||||
groupadd -r "$GROUP" &>/dev/null ||: |
||||
done |
||||
done |
@ -0,0 +1,15 @@ |
||||
#!/bin/sh |
||||
# tweak xdg-user-dirs defaults if told so |
||||
# using tuples like "PHOTOS:Documents/Pictures" |
||||
|
||||
. shell-config |
||||
|
||||
CONFIG="/etc/xdg/user-dirs.defaults" |
||||
|
||||
[ -z "$GLOBAL_XDG_USER_DIRS" ] || |
||||
echo "$GLOBAL_XDG_USER_DIRS" \ |
||||
| tr ' ' '\n' \ |
||||
| while IFS=':' read k v; do |
||||
[ -n "$k" -a -n "$v" ] || continue |
||||
shell_config_set "$CONFIG" "$k" "$v" |
||||
done |
@ -0,0 +1,212 @@ |
||||
#!/bin/sh |
||||
# see also http://www.enricozini.org/2008/tips/lightweight-autologin/ |
||||
|
||||
if [ ! -x /usr/bin/X ]; then |
||||
echo "SKIP autologin: X not installed" >&2 |
||||
exit 0 |
||||
fi |
||||
|
||||
USER=kometa |
||||
|
||||
add_nopasswdlogin_group() |
||||
{ |
||||
[ -f "/etc/pam.d/$1" ] && |
||||
egrep -qs '^auth.+user[[:blank:]]+ingroup[[:blank:]]+nopasswdlogin' "/etc/pam.d/$1" && |
||||
groupadd -r nopasswdlogin && |
||||
gpasswd -a "$USER" nopasswdlogin |
||||
} |
||||
|
||||
BAK=".save" |
||||
backup() { |
||||
[ -f "$1" -a ! -f "$1$BAK" ] || return 1 |
||||
cp -av "$1" "$1$BAK" |
||||
} |
||||
|
||||
## this is only relevant for installable livecd |
||||
### FIXME: this shouldn't proceed in other cases! |
||||
restore_later() { |
||||
[ -n "$1" ] || return 0 |
||||
|
||||
local prefix="/usr/lib/alterator/hooks/livecd-preinstall.d" |
||||
[ -d "$prefix" ] || mkdir -p "$prefix" |
||||
|
||||
local hook="$prefix/51-disable-autologin-again.sh" |
||||
[ -s "$hook" ] || cat >> "$hook" <<- EOF |
||||
#!/bin/sh |
||||
. livecd-functions |
||||
EOF |
||||
|
||||
echo mv -v "\$destdir$1$BAK" "\$destdir$1" >> "$hook" |
||||
chmod +x "$hook" |
||||
} |
||||
|
||||
## autologin^2 |
||||
AUTOLOGIN_CFG=/etc/sysconfig/autologin |
||||
if [ -x /usr/sbin/autologin ]; then |
||||
backup "$AUTOLOGIN_CFG" |
||||
cat >> "$AUTOLOGIN_CFG" <<- EOF |
||||
USER=$USER |
||||
AUTOLOGIN=yes |
||||
EOF |
||||
restore_later "$AUTOLOGIN_CFG" |
||||
fi |
||||
|
||||
## lightdm autologin |
||||
LIGHTDM_CONF=/etc/lightdm/lightdm.conf |
||||
if [ -f "$LIGHTDM_CONF" ]; then |
||||
mkdir -p /etc/lightdm/lightdm.conf.d |
||||
cat > /etc/lightdm/lightdm.conf.d/autologin.conf <<AUTOLOGIN_LIGHTDM |
||||
[Seat:*] |
||||
autologin-user=kometa |
||||
autologin-user-timeout=0 |
||||
AUTOLOGIN_LIGHTDM |
||||
default_session="$(ls -1 /usr/share/xsessions/*.desktop | sed -n 's/^.*\/\([^/]\+\)\.desktop$/\1/;1p')" |
||||
if [ -n "$default_session" ]; then |
||||
echo "autologin-session=$default_session" >> /etc/lightdm/lightdm.conf.d/autologin.conf |
||||
else |
||||
echo "** WARNING: no sessions found in /usr/share/xsessions/" >&2 |
||||
fi |
||||
backup "/etc/group" |
||||
add_nopasswdlogin_group lightdm ||: |
||||
|
||||
restore_later "/etc/group" |
||||
fi |
||||
|
||||
## gdm2 autologin |
||||
GDM_CONF=/etc/X11/gdm/custom.conf |
||||
if [ -f "$GDM_CONF" ]; then |
||||
backup "$GDM_CONF" |
||||
sed -i -e '/\[daemon\]/aAutomaticLoginEnable=true\nAutomaticLogin='$USER \ |
||||
"$GDM_CONF" |
||||
backup "/etc/group" |
||||
add_nopasswdlogin_group gdm ||: |
||||
|
||||
restore_later "$GDM_CONF" |
||||
restore_later "/etc/group" |
||||
fi |
||||
|
||||
|
||||
## lxdm autologin |
||||
LXDM_CONF=/etc/lxdm/lxdm.conf |
||||
if [ -f "$LXDM_CONF" ]; then |
||||
backup "$LXDM_CONF" |
||||
sed -i -e "s/\# autologin=dgod/autologin=$USER/" \ |
||||
"$LXDM_CONF" |
||||
backup "/etc/group" |
||||
add_nopasswdlogin_group lxdm ||: |
||||
|
||||
restore_later "$LXDM_CONF" |
||||
restore_later "/etc/group" |
||||
fi |
||||
|
||||
autologin_kdm() { |
||||
backup "$1" |
||||
sed -i \ |
||||
-e '/AutoLoginEnable/ s,^.*$,AutoLoginEnable=true,' \ |
||||
-e '/AutoLoginUser/ s,^.*$,AutoLoginUser='$USER',' \ |
||||
"$1" |
||||
restore_later "$1" |
||||
} |
||||
|
||||
## kdm3 autologin |
||||
# FIXME: tde packages have kdmrc in /usr via an absolute symlink :-( |
||||
KDM_ETC=/etc/X11/kdm |
||||
KDM_USR=/usr/share/kde/config/kdm |
||||
if [ "$(readlink "$KDM_ETC")" = "$KDM_USR" ]; then |
||||
rm -f "$KDM_ETC" |
||||
ln -s ../.."$KDM_USR" "$KDM_ETC" |
||||
fi |
||||
|
||||
KDMRC=/etc/X11/kdm/kdmrc |
||||
if [ -f "$KDMRC" ]; then autologin_kdm "$KDMRC"; fi |
||||
|
||||
## kdm4 autologin |
||||
KDMRC=/etc/X11/kdm4/kdmrc |
||||
if [ -f "$KDMRC" ]; then autologin_kdm "$KDMRC"; fi |
||||
|
||||
## sddm autologin |
||||
SDDM_RC=/etc/X11/sddm/sddm.conf |
||||
SDDM_SESSION= |
||||
if [ -f "$SDDM_RC" ]; then |
||||
backup "$SDDM_RC" |
||||
backup "/etc/group" |
||||
add_nopasswdlogin_group sddm ||: |
||||
sed -i "s,^User=$,&$USER," "$SDDM_RC" |
||||
if [ -f /usr/share/xsessions/lxqt.desktop ]; then |
||||
SDDM_SESSION=lxqt |
||||
elif [ -f /usr/share/xsessions/plasma.desktop ]; then |
||||
SDDM_SESSION=plasma |
||||
fi |
||||
if [ -n "$SDDM_SESSION" ]; then |
||||
sed -i "s,^Session=$,&$SDDM_SESSION," "$SDDM_RC" |
||||
fi |
||||
restore_later "$SDDM_RC" |
||||
restore_later "/etc/group" |
||||
fi |
||||
|
||||
## nodm autologin (the last since the most intrusive) |
||||
# FIXME nodm and xinitrc should be modified (also in p6) |
||||
# WARNING: check user PATH if things go weird! |
||||
NODM_RC=/etc/sysconfig/nodm |
||||
NODM_EXE=/usr/sbin/nodm |
||||
if [ -x "$NODM_EXE" ]; then |
||||
backup "$NODM_RC" |
||||
cat >> "$NODM_RC" <<- EOF |
||||
export NODM_USER=$USER |
||||
EOF |
||||
restore_later "$NODM_RC" |
||||
else |
||||
exit 0 |
||||
fi |
||||
|
||||
# FIXME: drop since #27449 is fixed |
||||
PREFDM=/etc/X11/prefdm |
||||
if [ -f "$PREFDM" ] && ! grep -q nodm "$PREFDM"; then |
||||
backup "$PREFDM" |
||||
sed -i \ |
||||
-e '/AUTOLOGIN_EXE=/ s,^.*$,AUTOLOGIN_EXE='$NODM_EXE',' \ |
||||
-e '/AUTOLOGIN_CFG=/ s,^.*$,AUTOLOGIN_CFG='$NODM_RC',' \ |
||||
"$PREFDM" |
||||
restore_later "$PREFDM" |
||||
fi |
||||
|
||||
# FIXME: drop when #27451 is fixed |
||||
NODM_PAM=/etc/pam.d/nodm |
||||
for module in pam_console.so pam_ck_connector.so; do |
||||
if [ -f /lib*/security/$module ]; then |
||||
str="-session optional $module" |
||||
grep -q "^$str$" "$NODM_PAM" || echo -e "$str" >> "$NODM_PAM" |
||||
fi |
||||
done |
||||
|
||||
NODM_POLKIT_CONFDIR=/etc/polkit-1/localauthority/50-local.d |
||||
NODM_POLKIT_CONF=org.freedesktop.NetworkManager.pkla |
||||
if [ -d "$NODM_POLKIT_CONFDIR" ]; then |
||||
cat > "$NODM_POLKIT_CONFDIR/$NODM_POLKIT_CONF" << _EOF_ |
||||
[nm-applet] |
||||
Identity=unix-group:users |
||||
Action=org.freedesktop.NetworkManager.* |
||||
ResultAny=yes |
||||
ResultInactive=no |
||||
ResultActive=yes |
||||
_EOF_ |
||||
fi |
||||
|
||||
NODM_DBUS_NM_CONF=/etc/dbus-1/system.d/nm-applet.conf |
||||
if [ -f "$NODM_DBUS_NM_CONF" ]; then |
||||
sed -i "s/at_console=\"true\"/user=\"$USER\"/" "$NODM_DBUS_NM_CONF" |
||||
fi |
||||
|
||||
NODM_G2KR_DIR=/etc/skel/.gnome2/keyrings |
||||
mkdir -p "$NODM_G2KR_DIR" |
||||
echo -n login > "$NODM_G2KR_DIR"/default |
||||
cat > "$NODM_G2KR_DIR"/login.keyring << _EOF_ |
||||
[keyring] |
||||
display-name=login |
||||
ctime=0 |
||||
mtime=0 |
||||
lock-on-idle=false |
||||
lock-after=false |
||||
_EOF_ |
||||
|
||||
: |
@ -0,0 +1,19 @@ |
||||
#!/bin/sh |
||||
|
||||
if [ ! -x /usr/bin/X ]; then |
||||
echo "SKIP autostart: X not installed" >&2 |
||||
exit 0 |
||||
fi |
||||
|
||||
## setup automated graphical session startup |
||||
INITTAB=/etc/inittab |
||||
if [ -f "$INITTAB" ]; then |
||||
[ -z "$runlevel" ] && runlevel=5 |
||||
sed -i "s,^\(id:\)\(.*\)\(:initdefault.*\),\\1$runlevel\\3," "$INITTAB" |
||||
fi |
||||
|
||||
## ...and systemd, if any |
||||
## NB: alterator-setup's backup file can present a nice catch if left around |
||||
rm -f /etc/systemd/system/default.target{,.bak} |
||||
|
||||
: |
@ -0,0 +1,11 @@ |
||||
#!/bin/sh -eu |
||||
|
||||
if [ -s /etc/sysconfig/grub2 ]; then |
||||
# Cleanup |
||||
sed -i "s/ splash//g" /etc/sysconfig/grub2 |
||||
if [ -n "${GLOBAL_BASE_BOOTARGS-}" ]; then |
||||
sed -Ei \ |
||||
"s/(GRUB_CMDLINE_LINUX_DEFAULT=)(.*)(['\"])/\1\2 $GLOBAL_BASE_BOOTARGS\3/" \ |
||||
/etc/sysconfig/grub2 |
||||
fi |
||||
fi |
@ -0,0 +1,11 @@ |
||||
#!/bin/sh |
||||
# setup control(8) states |
||||
|
||||
[ -z "$GLOBAL_CONTROL" ] || |
||||
echo "$GLOBAL_CONTROL" \ |
||||
| tr ' ' '\n' \ |
||||
| while IFS=':' read facility state; do |
||||
[ -z "$facility" -o -z "$state" ] || |
||||
control "$facility" "$state" |
||||
done |
||||
: |
@ -0,0 +1,33 @@ |
||||
#!/bin/sh |
||||
# fontconfig-config-config |
||||
|
||||
verbose="${GLOBAL_VERBOSE:+-v}" |
||||
verbose() { [ -z "$GLOBAL_VERBOSE" ] || echo "HOOK: 50-fontconfig: $@"; } |
||||
verbose "has started" |
||||
|
||||
CONF_DIR="/etc/fonts/conf.d" |
||||
AVAIL_DIR="/etc/fonts/conf.avail" |
||||
|
||||
list() { ls "$1"/??-"$2".conf 2>/dev/null; } |
||||
|
||||
enable() { |
||||
for i in "$@"; do |
||||
if ! list "$CONF_DIR" "$i"; then |
||||
AVAIL="$(list "$AVAIL_DIR" "$i" | head -1)" |
||||
if [ -n "$AVAIL" ]; then |
||||
ln -s $verbose "$AVAIL" "$CONF_DIR/$CONF_ADD" |
||||
fi |
||||
fi |
||||
done |
||||
} |
||||
|
||||
disable() { |
||||
for i in "$@"; do |
||||
$(list "$CONF_DIR" "$i") | xargs -r rm -f $verbose -- |
||||
done |
||||
} |
||||
|
||||
disable $GLOBAL_FONT_FEATURES_DISABLE |
||||
enable $GLOBAL_FONT_FEATURES_ENABLE |
||||
|
||||
: |
@ -0,0 +1,23 @@ |
||||
#!/bin/sh |
||||
# issue welcome message if there's a guest user |
||||
# (the first one configured with empty password) |
||||
|
||||
[ -n "$GLOBAL_USERS" ] || { |
||||
echo "** 50-issue: warning, no users created" >&1 |
||||
exit 0 |
||||
} |
||||
|
||||
guest= |
||||
for u in $GLOBAL_USERS; do |
||||
login="${u%%:*}" |
||||
[ -n "$login" ] || continue |
||||
rest="${u#*:}" |
||||
pass="${rest%%:*}" |
||||
[ -z "$pass" ] || continue |
||||
guest="$login" |
||||
break |
||||
done |
||||
|
||||
[ -n "$guest" ] || exit 0 |
||||
|
||||
echo "Hello friend, say \`$guest' to log in at \\l" >> /etc/issue |
@ -0,0 +1,17 @@ |
||||
#!/bin/sh |
||||
# partial port of livecd-setlocale (kbd bits) |
||||
|
||||
CONFIG=/etc/sysconfig/keyboard |
||||
|
||||
# Requires: console-scripts |
||||
if [ -s "$CONFIG" ]; then |
||||
echo "** l10n-kbd: expected $CONFIG to be an empty file" >&2 |
||||
exit 0 |
||||
fi |
||||
|
||||
if [ -z "$GLOBAL_KEYTABLE" ]; then |
||||
echo "** l10n-kbd: empty GLOBAL_KEYTABLE" >&2 |
||||
exit 0 |
||||
fi |
||||
|
||||
echo "KEYTABLE=$GLOBAL_KEYTABLE" > "$CONFIG" |
@ -0,0 +1,19 @@ |
||||
#!/bin/sh |
||||
# partial port of livecd-setlocale (xkb bits) |
||||
|
||||
PREFIX=/etc/X11/xinit |
||||
|
||||
# Requires: xinitrc |
||||
if [ ! -d "$PREFIX" ]; then |
||||
echo "** l10n-xkb: expected $PREFIX to exist (xinitrc)" >&2 |
||||
exit 0 |
||||
fi |
||||
|
||||
if [ -z "$GLOBAL_XKB_VARIANTS" -o -z "$GLOBAL_XKB_KEYMAPS" ]; then |
||||
echo "** l10n-xkb: empty GLOBAL_XKB_VARIANTS/GLOBAL_XKB_KEYMAPS" >&2 |
||||
exit 0 |
||||
fi |
||||
|
||||
echo "-option $GLOBAL_XKB_SWITCH${GLOBAL_XKB_LED:+,$GLOBAL_XKB_LED} \ |
||||
${GLOBAL_XKB_VARIANTS:+-variant $GLOBAL_XKB_VARIANTS} \ |
||||
-layout $GLOBAL_XKB_KEYMAPS" > "$PREFIX"/Xkbmap |
@ -0,0 +1,17 @@ |
||||
#!/bin/sh |
||||
|
||||
. shell-config |
||||
|
||||
defcfg=/etc/net/ifaces/default/options-eth |
||||
|
||||
[ -f defcfg ] || exit 0 |
||||
|
||||
if [ -x /usr/sbin/NetworkManager -o -x /usr/sbin/connmand ]; then |
||||
shell_config_set "$defcfg" NM_CONTROLLED yes |
||||
shell_config_set "$defcfg" DISABLED yes |
||||
if [ NM_Native = 'yes' ]; then |
||||
shell_config_set "$defcfg" BOOTPROTO static |
||||
else |
||||
shell_config_set "$defcfg" BOOTPROTO dhcp |
||||
fi |
||||
fi |
@ -0,0 +1,10 @@ |
||||
#!/bin/sh |
||||
# see also net-dns feature for actual nameserver control |
||||
|
||||
# purge hasher-provided files potentially disclosing |
||||
# build host's network configuration bits |
||||
find /var -name resolv.conf -or -name nsswitch.conf -delete |
||||
|
||||
# hasher might have carried host /etc/hosts over, need to overwrite |
||||
echo "127.0.0.1 localhost.localdomain localhost" > /etc/hosts |
||||
sed -ri "/^(search|nameserver|domain)/d" /etc/resolv.conf |
@ -0,0 +1,10 @@ |
||||
#!/bin/sh |
||||
# basic NTP client configuration |
||||
|
||||
. shell-config |
||||
|
||||
CONFIG="/etc/ntpd.conf" |
||||
[ -f "$CONFIG" ] || exit 0 |
||||
[ -n "$GLOBAL_NTP_SERVERS" ] || exit 0 |
||||
|
||||
shell_config_set "$CONFIG" 'servers' "$GLOBAL_NTP_SERVERS" '[[:space:]]\+' ' ' |
@ -0,0 +1,6 @@ |
||||
#!/bin/sh -efu |
||||
|
||||
# provide kernel interface for ACPI power button |
||||
if [ `arch` != e2k -a -x /etc/init.d/acpid ]; then |
||||
grep -qsx button /etc/modules || echo button >> /etc/modules |
||||
fi |
@ -0,0 +1,16 @@ |
||||
#!/bin/sh |
||||
|
||||
# explicitly requested empty root password |
||||
case "$GLOBAL_ROOTPW_EMPTY" in |
||||
1|y|Y|yes) |
||||
usermod -p "" root |
||||
exit 0 |
||||
;; |
||||
esac |
||||
|
||||
# set root password if any; no-op if it is empty |
||||
if [ -z "$GLOBAL_ROOTPW" ]; then |
||||
echo "** warning: no root password provided, skipping" >&2 |
||||
else |
||||
echo "$GLOBAL_ROOTPW" | passwd --stdin root |
||||
fi |
@ -0,0 +1,9 @@ |
||||
#!/bin/sh |
||||
|
||||
# for udev |
||||
ln -sf /proc/mounts /etc/mtab |
||||
|
||||
# pam_console_apply is harmful during install |
||||
find /etc/udev/rules.d/ -type f -print0 | |
||||
xargs -r0 fgrep -Zl pam_console_apply -- | |
||||
xargs -r0 rm -fv -- |
@ -0,0 +1,46 @@ |
||||
#!/bin/sh |
||||
# add regular user(s) assigning passwords and attributes of power |
||||
|
||||
# NB: care that the utilities exist; shadow-utils is warranted |
||||
|
||||
add_user() { |
||||
useradd -m "$1" && |
||||
usermod -p "" "$1" && |
||||
if [ -n "$GLOBAL_GROUPS" ]; then # some of them might be missing |
||||
for group in $GLOBAL_GROUPS; do |
||||
usermod -a --groups "$group" "$1" ||: |
||||
done |
||||
fi || |
||||
echo "*** failed to add user '$1'" |
||||
} |
||||
|
||||
set_password() { echo "$1:$2" | chpasswd; } |
||||
|
||||
set_admin() { usermod -a --groups "wheel" "$1"; } |
||||
|
||||
# NB: one must care to purge this from LiveCD if it's installed permanently |
||||
set_sudo() { |
||||
[ ! -w "/etc/sudoers" ] || |
||||
echo "$1 ALL=(ALL) ALL" >> "/etc/sudoers" |
||||
} |
||||
|
||||
# chpasswd is intended for batch use but that would be less comprehensible |
||||
[ -z "$GLOBAL_USERS" ] || |
||||
echo "$GLOBAL_USERS" \ |
||||
| tr ' ' '\n' \ |
||||
| while IFS=':' read login passwd admin sudo; do |
||||
add_user "$login" |
||||
[ -z "$passwd" ] || set_password "$login" "$passwd" |
||||
[ -z "$admin" ] || set_admin "$login" |
||||
[ -z "$sudo" ] || set_sudo "$login" |
||||
done |
||||
|
||||
# create special user |
||||
[ -z "$GLOBAL_SPEC_USER" ] || |
||||
echo "$GLOBAL_SPEC_USER" \ |
||||
| tr ' ' '\n' \ |
||||
| while IFS=':' read login group uid gid homedir shell; do |
||||
groupadd -g $gid $group >/dev/null 2>&1 || : |
||||
useradd -g $gid -u $uid -d $homedir -s $shell $login >/dev/null 2>&1 || : |
||||
usermod -G $group $login || : |
||||
done |
@ -0,0 +1,9 @@ |
||||
#!/bin/sh |
||||
|
||||
# this was a bunch of dirty complaints |
||||
sed -i 's,/var/run,/run,' /{etc,lib}/tmpfiles.d/*.conf ||: |
||||
|
||||
[ ! -L /var/run ] && rm -r /var/run && ln -s ../run /var/run |
||||
[ ! -L /var/lock ] && rm -r /var/lock && ln -s ../run/lock /var/lock |
||||
|
||||
: |
@ -0,0 +1,10 @@ |
||||
#!/bin/sh |
||||
# unconditionally enable online repository |
||||
|
||||
[ -n "$GLOBAL_LIVE_REPO" ] || exit 0 |
||||
|
||||
PROTO="${GLOBAL_LIVE_REPO%/*}" # http, ftp, rsync |
||||
MIRROR="${GLOBAL_LIVE_REPO#*/}" # alt, heanet, kiev, yandex, ... |
||||
|
||||
sed -i "s,^#\(rpm \[.*\] ${PROTO:-http}.*\),\1," \ |
||||
"/etc/apt/sources.list.d/${MIRROR:-yandex}.list" ||: |
@ -0,0 +1,15 @@ |
||||
#!/bin/sh |
||||
# Install /etc/*-release files if needed |
||||
rel_file= |
||||
for rel_file in altlinux-release os-release; do |
||||
if ! [ -e /etc/"$rel_file" ]; then |
||||
# in case it is dangling symlink |
||||
rm -f /etc/"$rel_file" |
||||
if [ -r /usr/share/branding-data-current/release/"$rel_file" ]; then |
||||
cp -at /etc -- \ |
||||
/usr/share/branding-data-current/release/"$rel_file" |
||||
elif [ -r /usr/lib/"$rel_file" ]; then |
||||
cp -a /usr/lib/"$rel_file" /etc/"$rel_file" |
||||
fi |
||||
fi |
||||
done |
@ -0,0 +1,10 @@ |
||||
#!/bin/sh -efu |
||||
|
||||
dhcpcd_conf="/etc/dhcpcd.conf" |
||||
|
||||
[ -f "$dhcpcd_conf" ] || exit 0 |
||||
|
||||
grep -q '^option[[:blank:]]\+vendor_encapsulated_options' "$dhcpcd_conf" || { |
||||
echo "# added by 70-network-shares-dhcpcd.sh" |
||||
echo "option vendor_encapsulated_options" |
||||
} >> "$dhcpcd_conf" |
@ -0,0 +1,6 @@ |
||||
#!/bin/sh |
||||
# bump name services caching time up |
||||
|
||||
[ -s /etc/nscd.conf ] || exit 0 |
||||
|
||||
sed -i 's/\(positive-time-to-live[^0-9]*\)[0-9]*$/\1 31536000/g' /etc/nscd.conf |
@ -0,0 +1,117 @@ |
||||
#!/bin/sh -efu |
||||
|
||||
## |
||||
# This script: |
||||
# 1) updates pam_mount configuration |
||||
# 2) updates pam configuration |
||||
# |
||||
# NB: network shares automounted only for a particular uid range |
||||
|
||||
. shell-error |
||||
|
||||
msg() { |
||||
printf "$* \n" |
||||
} |
||||
|
||||
pmconf="/etc/security/pam_mount.conf.xml" |
||||
pamconf="/etc/pam.d/system-auth-krb5" |
||||
|
||||
## |
||||
# Update pam_mount configuration file |
||||
# |
||||
update_pmconf() { |
||||
|
||||
local insert_at tmp_conf |
||||
|
||||
tmp_conf="${pmconf}.new" |
||||
|
||||
# no pam_mount: impossible(tm) |
||||
[ -w "$pmconf" ] || return 1 |
||||
|
||||
# already configured |
||||
grep -qs dnssd_lookup "$pmconf" 2>/dev/null && return 0 |
||||
|
||||
# configure pam_mount to use avahi |
||||
insert_at="$(sed -n '/<!-- Volume definitions -->/=' "$pmconf" \ |
||||
| head -n 1)" |
||||
|
||||
if [ -z "$insert_at" ]; then |
||||
msg "Can't find position for injection in $pmconf" |
||||
return 1 |
||||
fi |
||||
|
||||
# part 1 (head) |
||||
head -n $((insert_at-1)) "$pmconf" > "$tmp_conf" |
||||
|
||||
# part 2 (inserted text) |
||||
cat >> "$tmp_conf" <<'__EOF__' |
||||
|
||||
<!-- # inserted by 70-network-shares-samba.sh ##################### --> |
||||
|
||||
<volume uid="5000-10000" fstype="cifs" dnssd_lookup="1" mountpoint="/home/%(USER)/share" options="sec=krb5,cruid=%(USERUID)" /> |
||||
<cifsmount>/sbin/mount.cifs //%(SERVER)/%(VOLUME) %(MNTPT) -o %(OPTIONS)</cifsmount> |
||||
<cifsumount>/sbin/umount.cifs %(MNTPT)</cifsumount> |
||||
|
||||
<!-- ############################################################## --> |
||||
|
||||
__EOF__ |
||||
|
||||
# part 3 (tail) |
||||
sed -n "$insert_at,\$p" "$pmconf" >> "$tmp_conf" |
||||
|
||||
# update config |
||||
chown root:root "$tmp_conf" |
||||
chmod 644 "$tmp_conf" |
||||
mv -f "$tmp_conf" "$pmconf" |
||||
|
||||
# XXX: REMOVE FOR RELEASE |
||||
# sed -i -e '/debug enable/ s/0/1/' "$pmconf" |
||||
} |
||||
|
||||
## |
||||
# Update pam configuration |
||||
# |
||||
update_pam() { |
||||
local append_after |
||||
|
||||
# no pam-config: impossible(tm) |
||||
[ -w "$pamconf" ] || return 1 |
||||
|
||||
if [ -L "$pamconf" ]; then |
||||
pamconf="$(realpath "$pamconf")" |
||||
fi |
||||
|
||||
# already configured |
||||
grep -qs pam_mount "$pamconf" && return 0 |
||||
|
||||
append_after="$(sed -n '/^auth[[:space:]]\+required/=' "$pamconf" \ |
||||
| tail -n 1)" |
||||
[ -n "$append_after" ] && |
||||
sed -i \ |
||||
-e "$append_after a auth optional pam_mount.so" \ |
||||
"$pamconf" |
||||
|
||||
append_after="$(sed -n '/^session[[:space:]]\+required/=' "$pamconf" \ |
||||
| tail -n 1)" |
||||
[ -n "$append_after" ] && |
||||
sed -i \ |
||||
-e "$append_after a session optional pam_mount.so" \ |
||||
"$pamconf" |
||||
append_after="$(sed -n '/^auth[[:space:]]\+required/=' \ |
||||
"$pamconf"_ccreds | tail -n 1)" |
||||
|
||||
[ -n "$append_after" ] && |
||||
sed -i \ |
||||
-e "$append_after a auth optional pam_mount.so" \ |
||||
"$pamconf"_ccreds |
||||
|
||||
### set ccache to predicadable value (ouch!) |
||||
sed -i 's|pam_krb5.so use_first_pass$|pam_krb5.so use_first_pass ccache=/tmp/krb5cc_%u|' "$pamconf" |
||||
} |
||||
|
||||
## |
||||
# Start |
||||
# |
||||
update_pmconf && |
||||
update_pam |
||||
|
@ -0,0 +1,25 @@ |
||||
#!/bin/sh |
||||
|
||||
# don't cripple the image to be copied over |
||||
[ -x /usr/sbin/live-install -o -x /usr/sbin/livecd-install ] && exit 0 |
||||
|
||||
# remove unused fonts |
||||
cd /usr/share/fonts/bitmap/misc/ && |
||||
rm -f *ja.* *ko.* han* gb* jis* k14* rk* *rk.* *kana* cl* *JIS* |
||||
|
||||
# drop unneeded translations |
||||
cd /usr/share/qt?/translations/ && rm -f *_zh* *_ja* |
||||
|
||||
# l10n |
||||
cd /usr/share/X11/locale && rm -rf ja* ko* th* vi* zh* |
||||
|
||||
# xkb |
||||
cd /usr/share/X11/xkb/symbols && rm -rf jp kr th vn cn |
||||
|
||||
# locales |
||||
cd /usr/lib/locale && rm -rf ja_* ko_* th_* zh_* |
||||
|
||||
# gconv |
||||
cd /usr/lib*/gconv && rm -f JIS* T* |
||||
|
||||
: |
@ -0,0 +1,20 @@ |
||||
#!/bin/sh |
||||
|
||||
# don't cripple the image to be copied over |
||||
[ -x /usr/sbin/live-install -o -x /usr/sbin/livecd-install ] && exit 0 |
||||
|
||||
# remove unused legacy/tiny fonts |
||||
#cd /usr/share/fonts/bitmap/misc/ && rm -f *ISO* *KOI* [1456]* |
||||
cd /usr/share/fonts/bitmap/misc/ && rm -f [1456]* |
||||
|
||||
# l10n |
||||
cd /usr/share/X11/locale/ && rm -rf *[^C8]/ iso* |
||||
|
||||
# xkb |
||||
cd /usr/share/X11/xkb/symbols && rm -rf *_vndr |
||||
|
||||
# gconv |
||||
#cd /usr/lib*/gconv && rm -f CP* ISO* *JIS* KOI* HP* MAC* |
||||
cd /usr/lib*/gconv && rm -f CP* *JIS* HP* MAC* |
||||
|
||||
: |
@ -0,0 +1,10 @@ |
||||
#!/bin/sh |
||||
|
||||
# don't cripple the image to be copied over |
||||
[ -x /usr/sbin/live-install -o -x /usr/sbin/livecd-install ] && exit 0 |
||||
|
||||
# no sense in xorg-dri-* without kernel-modules-drm* |
||||
stat /lib/modules/*/kernel/drivers/gpu/drm >&/dev/null \ |
||||
|| rm -rf /usr/lib*/X11/modules/dri/ |
||||
|
||||
: |
@ -0,0 +1,3 @@ |
||||
#!/bin/sh |
||||
# Run scripts from /etc/firsttime.d at first start |
||||
[ -f "/etc/firsttime.flag" ] || touch "/etc/firsttime.flag" |
@ -0,0 +1,7 @@ |
||||
#!/bin/sh -e |
||||
|
||||
if [ -n "$GLOBAL_LIVE_CLEANUP_KDRIVERS" ]; then |
||||
for i in $GLOBAL_LIVE_CLEANUP_KDRIVERS; do |
||||
rm -rf /lib/modules/*/"$i" |
||||
done |
||||
fi |
@ -0,0 +1,21 @@ |
||||
#!/bin/sh |
||||
|
||||
# the part below relates to systemd as init specifically |
||||
rpm -q systemd-sysvinit || exit 0 |
||||
|
||||
# file str [str...] |
||||
# NB: str is also treated as a regex, |
||||
# be careful if you copy the function |
||||
sub() { |
||||
local file="$1" |
||||
shift |
||||
for i in "$@"; do |
||||
grep -q "^$i" "$file" || echo "$i" >> "$file" |
||||
done |
||||
} |
||||
|
||||
# tune make-initrd |
||||
sub /etc/initrd.mk 'MODULES_TRY_ADD += autofs4' |
||||
|
||||
# don't allow systemd to set LANG (see also #27408) |
||||
sub /etc/locale.conf 'LANG=' |
@ -0,0 +1,16 @@ |
||||
#!/bin/sh |
||||
|
||||
# the part below relates to systemd as init specifically |
||||
rpm -q systemd-sysvinit || exit 0 |
||||
|
||||
sub() { |
||||
local file="$1" |
||||
shift |
||||
for i in "$@"; do |
||||
grep -q "^$i" "$file" || echo "$i" >> "$file" |
||||
done |
||||
} |
||||
|
||||
# aufs2 root is rw in reality; but don't bother if there's a record already |
||||
grep -q '[[:space:]]/[[:space:]]' /etc/fstab || |
||||
sub /etc/fstab '/dev/root / auto defaults 0 0' |
@ -0,0 +1,12 @@ |
||||
#!/bin/sh |
||||
|
||||
# don't cripple the image to be copied over |
||||
[ -x /usr/sbin/live-install -o -x /usr/sbin/livecd-install ] && exit 0 |
||||
|
||||
# blacklisted kernel modules |
||||
sed -n 's/^blacklist[[:space:]]\+\([^[:space:]]\+\).*/\1/p' /etc/modprobe.d/* | |
||||
while read i; do |
||||
find /lib/modules/ -type f -name "$i.ko" -delete |
||||
done |
||||
|
||||
: |
@ -0,0 +1,12 @@ |
||||
#!/bin/sh |
||||
# regenerate module dependencies after pruning kernel modules |
||||
# (this script must run after anything touching /lib/modules) |
||||
|
||||
cd /lib/modules |
||||
for i in *.*; do |
||||
if [ "$i" = "*.*" ]; then |
||||
echo "** error: no valid KFLAVOURS installed, bailing out" >&2 |
||||
exit 1 |
||||
fi |
||||
depmod -a -F /boot/System.map-$i $i |
||||
done |
@ -0,0 +1,15 @@ |
||||
#!/bin/sh |
||||
|
||||
# don't cripple the image to be copied over |
||||
# NB: livecd-install has 50-restore-kernel.sh |
||||
[ -x /usr/sbin/live-install -o \ |
||||
-x /usr/sbin/homeros-install -o \ |
||||
-x /usr/sbin/luwrain-install ] && exit 0 |
||||
|
||||
# no need for the kernel in live root otherwise: it's been booted already |
||||
# NB: installkernel run by that livecd-install hook needs System.map |
||||
rm -f -- /boot/{initrd,vmlinuz}* |
||||
|
||||
[ -x /usr/sbin/livecd-install ] || rm -f -- /boot/* |
||||
|
||||
: |
@ -0,0 +1,10 @@ |
||||
#!/bin/sh |
||||
|
||||
[ -h /sbin/init ] || exit 0 |
||||
[ -n "$GLOBAL_SYSTEMD_RESOLVED" ] || exit 0 |
||||
|
||||
if [ "$GLOBAL_SYSTEMD_RESOLVED" = stub ]; then |
||||
ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf |
||||
else |
||||
ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf |
||||
fi |
@ -0,0 +1,5 @@ |
||||
#!/bin/sh -e |
||||
# drop intermediate files not needed in the image |
||||
# which receive broken permissions in fakeroot environment |
||||
|
||||
rm -f /etc/tcb/*/shadow{-,.lock} |
@ -0,0 +1,4 @@ |
||||
#!/bin/sh |
||||
# URW fonts are responsible for sub-par website text rendering usually... |
||||
|
||||
rm -f /etc/X11/fontpath.d/type1-urw:pri=40 |
@ -0,0 +1,7 @@ |
||||
#!/bin/sh |
||||
|
||||
[ -f /etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml ] || exit 0 |
||||
|
||||
# fixup the default which broke after p8 |
||||
sed -i 's,name="IconThemeName" type="empty",name="IconThemeName" type="string" value="gnome",' /etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml ||: |
||||
|
@ -0,0 +1,15 @@ |
||||
# supplement live with keyboard layout setup
|
||||
|
||||
XKB_KEYMAPS := $(subst $(SPACE),$(COMMA),$(XKB_KEYMAPS))
|
||||
|
||||
# handle the layouts with a specific variant in the wild
|
||||
XKB_VARIANTS := $(subst ru,winkeys, \
|
||||
$(subst ua,winkeys, \
|
||||
$(subst be,winkeys, \
|
||||
$(subst us,,$(XKB_KEYMAPS)))))
|
||||
|
||||
debug:: |
||||
@echo "** live: LOCALES: $(LOCALES)"
|
||||
@echo "** live: LOCALE: $(LOCALE)"
|
||||
@echo "** live: XKB_KEYMAPS: $(XKB_KEYMAPS)"
|
||||
@echo "** live: XKB_VARIANTS: $(XKB_VARIANTS)"
|
@ -0,0 +1,26 @@ |
||||
_IMAGE_APTBOX_ = $(WORKDIR)/chroot/$(WORKDIRNAME)/aptbox
|
||||
|
||||
# Add prerequisite to the build-image target of
|
||||
# $(MKIMAGE_PREFIX)/targets.mk.
|
||||
build-image: $(_IMAGE_APTBOX_)/etc/apt/pkgpriorities |
||||
|
||||
_PINNED_PACKAGES_ = $(foreach pp,$(PINNED_PACKAGES),$(if $(findstring :,$(pp)),$(pp),$(pp):$(PIN_PRIORITY)))
|
||||
_PIN_PRIORITIES_ = $(sort $(foreach pp,$(_PINNED_PACKAGES_),$(lastword $(subst :, ,$(pp)))))
|
||||
_PKGPRIORITIES_ = $(subst \n ,\n,$(foreach pri,$(_PIN_PRIORITIES_),$(pri):$(patsubst %:$(pri),\n %,$(filter %:$(pri),$(_PINNED_PACKAGES_)))\n))
|
||||
|
||||
$(_IMAGE_APTBOX_)/etc/apt/pkgpriorities: prepare-image-workdir |
||||
@echo -e '$(_PKGPRIORITIES_)' | sed -e 's,[[:space:]]\+$$,,' >$@
|
||||
@if [ -s $@ ]; then \
|
||||
if grep -q '^\(APT::\)\?Dir::Etc::pkgpriorities[[:space:]]' \
|
||||
$(_IMAGE_APTBOX_)/etc/apt/apt.conf; \
|
||||
then \
|
||||
sed -i -e 's,\(Dir::Etc::pkgpriorities\)[[:space:]].*$$,\1 "$@";,g' \
|
||||
$(_IMAGE_APTBOX_)/etc/apt/apt.conf; \
|
||||
else \
|
||||
echo 'Dir::Etc::pkgpriorities "$@";' \
|
||||
>>$(_IMAGE_APTBOX_)/etc/apt/apt.conf; \
|
||||
fi; \
|
||||
echo "--- Package priorities ---" >&2; \
|
||||
cat $@ >&2; \
|
||||
echo "---" >&2; \
|
||||
fi
|
@ -0,0 +1,2 @@ |
||||
IMAGE_PACKAGES_REGEXP += $(call branding, \
|
||||
$(THE_BRANDING) $(STAGE2_BRANDING))
|
@ -0,0 +1,48 @@ |
||||
#!/bin/sh -e |
||||
# tally up sizes of chroot's ELF binaries for squashfs tuning |
||||
|
||||
# NB: it's unclear so far whether mksquashfs -sort is beneficial |
||||
if [ -z "$GLOBAL_SQUASHFS_SORT" -o "$GLOBAL_SQUASHFS" != "tight" ]; then |
||||
echo "SKIP elf-stats: looks like it's not needed" >&2 |
||||
exit 0 |
||||
fi |
||||
|
||||
exit_handler() |
||||
{ |
||||
local rc=$1 |
||||
rm -f -- "$TMPFILE" |
||||
exit $rc |
||||
} |
||||
|
||||
# it's controlled environment |
||||
TMPFILE="$(mktemp)" |
||||
|
||||
trap 'exit_handler $?' EXIT HUP PIPE INT QUIT TERM |
||||
|
||||
# a list of ELF binaries (both executables and shared libraries) |
||||
ELFLIST=/.our/elf.lst |
||||
|
||||
cd "$WORKDIR" |
||||
|
||||
# let's parallelize a bit, chroot should be on tmpfs or just-cached |
||||
du -bsx | cut -f1 > "$TMPFILE" & |
||||
|
||||
elf="$(find {,usr/}{lib*,{,s}bin} \ |
||||
-path lib/modules -prune -o \ |
||||
-path usr/lib/locale -prune -o \ |
||||
-type f \ |
||||
| file -nN -e ascii -e compress -e tar -e elf -f - \ |
||||
| sed -n "/: ELF /s/: .*$//p" \ |
||||
| tee "$ELFLIST.in" \ |
||||
| tr '\n' '\0' \ |
||||
| du -cb --files0-from=- \ |
||||
| tail -1 \ |
||||
| cut -f1)" |
||||
|
||||
wait |
||||
read root < "$TMPFILE" |
||||
|
||||
echo "** live chroot ELF ratio: $((100*$elf/$root))% ($elf/$root)" >&2 |
||||
|
||||
# add priorities |
||||
sed 's,^.*$,& 1,' < "$ELFLIST.in" > "$ELFLIST" |
@ -0,0 +1,18 @@ |
||||
# stage2 mod: livecd
|
||||
|
||||
STAGE2_KMODULES = $(LIVE_KMODULES) $(THE_KMODULES)
|
||||
|
||||
IMAGE_PACKAGES_REGEXP = $(LIVE_PACKAGES_REGEXP) $(THE_PACKAGES_REGEXP)
|
||||
|
||||
IMAGE_PACKAGES = $(COMMON_PACKAGES) $(LIVE_PACKAGES) $(THE_PACKAGES) \
|
||||
$(call map,list, \
|
||||
$(LIVE_LISTS) $(LIVE_GROUPS) \
|
||||
$(THE_LISTS) $(THE_GROUPS) \
|
||||
$(COMMON_LISTS)) \
|
||||
interactivesystem
|
||||
|
||||
MKI_PACK_RESULTS = squash:live
|
||||
|
||||
debug:: |
||||
@echo "** live: IMAGE_PACKAGES: $(IMAGE_PACKAGES)"
|
||||
@echo "** live: IMAGE_PACKAGES_REGEXP: $(IMAGE_PACKAGES_REGEXP)"
|
@ -0,0 +1,3 @@ |
||||
#!/bin/sh |
||||
#make distclean all |
||||
make HSH_PROC=1 APTCONF=/home/tema/mkimage-profiles/apt.conf DEBUG=1 distclean all |
@ -0,0 +1,556 @@ |
||||
## generated by features.in/metadata/lib/50-metadata.mk |
||||
|
||||
## SYSTEM_PACKAGES |
||||
memtest86+ |
||||
disable-usb-autosuspend |
||||
firmware-linux |
||||
|
||||
## COMMON_PACKAGES |
||||
shim-signed |
||||
mokutil |
||||
pesign |
||||
acpid |
||||
acpi |
||||
acpid-events-power |
||||
|
||||
## THE_PACKAGES |
||||
alterator-luks |
||||
chromium |
||||
chrony |
||||
disable-usb-autosuspend |
||||
btrfs-progs |
||||
gpm |
||||
xorg-drv-wacom |
||||
xorg-drv-amdgpu |
||||
NetworkManager |
||||
shadow-utils |
||||
passwd |
||||
shadow-groups |
||||
fonts-ttf-google-croscore-arimo |
||||
fonts-otf-adobe-source-code-pro |
||||
fonts-otf-adobe-source-sans-pro |
||||
fonts-otf-mozilla-fira |
||||
fonts-ttf-google-droid-sans |
||||
fonts-ttf-google-droid-sans-mono |
||||
fonts-ttf-google-droid-serif |
||||
fonts-ttf-google-croscore-arimo |
||||
fonts-ttf-google-croscore-cousine |
||||
fonts-ttf-google-croscore-tinos |
||||
fonts-ttf-liberation |
||||
xorg-drv-intel |
||||
xorg-dri-intel |
||||
xorg-drv-nouveau |
||||
xorg-drv-ati |
||||
xorg-drv-radeon |
||||
control |
||||
xdg-user-dirs |
||||
pam-limits-desktop |
||||
beesu |
||||
polkit |
||||
dvd+rw-tools |
||||
altmediawriter |
||||
upower |
||||
udev-rules-rfkill-uaccess |
||||
qemu-guest-agent |
||||
open-vm-tools |
||||
virtualbox-guest-additions |
||||
xorg-drv-vmware |
||||
xorg-drv-vmmouse |
||||
open-vm-tools-desktop |
||||
spice-vdagent |
||||
xorg-drv-qxl |
||||
xorg-drv-spiceqxl |
||||
firmware-intel-ucode |
||||
iucode_tool |
||||
firmware-alsa-sof |
||||
chkconfig |
||||
vconsole-setup-kludge |
||||
systemd-settings-enable-log-to-tty12 |
||||
systemd-settings-enable-showstatus |
||||
bluez |
||||
synaptic-kde |
||||
synaptic-usermode- |
||||
kde5-display-manager-lightdm |
||||
dhcpcd |
||||
make-initrd-plymouth |
||||
|
||||
## BASE_PACKAGES |
||||
make-initrd-luks |
||||
installer-feature-runlevel5-stage3 |
||||
installer-feature-bootloader-grub |
||||
|
||||
## COMMON_LISTS |
||||
|
||||
# tagged/base+efi |
||||
gdisk |
||||
parted |
||||
fatresize |
||||
dosfstools |
||||
grub2-efi |
||||
efibootmgr |
||||
|
||||
## THE_LISTS |
||||
|
||||
# tagged/security+luks tagged/desktop+regular tagged/base+regular tagged/base+xorg tools/wireless sound/base sound/pulseaudio tagged/base+regular+extra tagged/desktop+regular tagged/base+regular tagged/desktop+xorg tagged/base+l10n systemd tagged/base+nm tagged/base+kde5 tagged/base+kometa domain-client |
||||
make-initrd-luks |
||||
cryptsetup |
||||
synaptic |
||||
synaptic-usermode |
||||
userpasswd |
||||
xdg-user-dirs |
||||
alterator-browser-qt |
||||
alterator-standalone |
||||
alterator-root |
||||
alterator-users |
||||
alterator-groups |
||||
alterator-net-general |
||||
alterator-net-pppoe |
||||
rp-pppoe-client |
||||
alterator-net-pptp |
||||
alterator-net-openvpn |
||||
alterator-net-eth |
||||
alterator-net-wifi |
||||
alterator-datetime |
||||
alterator-proxy |
||||
alterator-services |
||||
alterator-x11 |
||||
alterator-xkb |
||||
alterator-update-kernel |
||||
glxinfo |
||||
glxgears |
||||
xorg-conf-synaptics |
||||
cpu-x |
||||
exfatprogs |
||||
hdparm |
||||
inxi |
||||
lcdtest |
||||
lm_sensors3 |
||||
lsblk |
||||
sdparm |
||||
ntpdate |
||||
fonts-bitmap-terminus |
||||
ldd-requires |
||||
alt-rootfs-installer |
||||
gparted |
||||
gpart |
||||
x11-ssh-askpass |
||||
sysfsutils |
||||
mc |
||||
apf |
||||
udev-extras |
||||
librsvg |
||||
# icons |
||||
gnome-icon-theme |
||||
gnome-icon-theme-symbolic |
||||
# unicode fonts |
||||
fonts-ttf-gnu-freefont-mono |
||||
fonts-ttf-gnu-freefont-sans |
||||
fonts-ttf-gnu-freefont-serif |
||||
htop |
||||
# firmware update utils |
||||
#fwupd |
||||
blacklist-pcspkr |
||||
glibc-locales |
||||
xfsprogs |
||||
jfsprogs |
||||
ntfs-3g |
||||
dosfstools |
||||
fatresize |
||||
make-initrd-ucode |
||||
shadow-change |
||||
openssh |
||||
openssh-blacklist |
||||
net-tools |
||||
nfs-utils |
||||
smartmontools |
||||
system-report |
||||
ps_mem |
||||
strace |
||||
powertop |
||||
pciutils |
||||
usbutils |
||||
acpi |
||||
dmidecode |
||||
|
||||
apt-repo |
||||
apt-rsync |
||||
apt-scripts |
||||
aptitude |
||||
update-kernel |
||||
eepm |
||||
bash-completion |
||||
cpufreq-simple |
||||
eject |
||||
bc |
||||
ncdu |
||||
tree |
||||
zsh |
||||
xorg-server |
||||
xorg-drv-evdev |
||||
xorg-drv-synaptics |
||||
xorg-drv-libinput |
||||
xorg-drv-vesa |
||||
xorg-drv-fbdev |
||||
xauth |
||||
xorg-utils |
||||
x-cursor-theme-jimmac |
||||
menu-icons-default |
||||
wireless-tools |
||||
ath_info |
||||
rfkill |
||||
crda |
||||
iw |
||||
amixer |
||||
alsa-utils |
||||
aplay |
||||
test-audio |
||||
alsa-set-initial-options |
||||
pulseaudio-daemon |
||||
pulseaudio-utils |
||||
alsa-plugins-pulse |
||||
lvm2 |
||||
make-initrd-lvm |
||||
mdadm |
||||
make-initrd-mdadm |
||||
synaptic |
||||
synaptic-usermode |
||||
userpasswd |
||||
xdg-user-dirs |
||||
alterator-browser-qt |
||||
alterator-standalone |
||||
alterator-root |
||||
alterator-users |
||||
alterator-groups |
||||
alterator-net-general |
||||
alterator-net-pppoe |
||||
rp-pppoe-client |
||||
alterator-net-pptp |
||||
alterator-net-openvpn |
||||
alterator-net-eth |
||||
alterator-net-wifi |
||||
alterator-datetime |
||||
alterator-proxy |
||||
alterator-services |
||||
alterator-x11 |
||||
alterator-xkb |
||||
alterator-update-kernel |
||||
glxinfo |
||||
glxgears |
||||
xorg-conf-synaptics |
||||
cpu-x |
||||
exfatprogs |
||||
hdparm |
||||
inxi |
||||
lcdtest |
||||
lm_sensors3 |
||||
lsblk |
||||
sdparm |
||||
ntpdate |
||||
fonts-bitmap-terminus |
||||
ldd-requires |
||||
alt-rootfs-installer |
||||
gparted |
||||
gpart |
||||
x11-ssh-askpass |
||||
sysfsutils |
||||
mc |
||||
apf |
||||
udev-extras |
||||
librsvg |
||||
# icons |
||||
gnome-icon-theme |
||||
gnome-icon-theme-symbolic |
||||
# unicode fonts |
||||
fonts-ttf-gnu-freefont-mono |
||||
fonts-ttf-gnu-freefont-sans |
||||
fonts-ttf-gnu-freefont-serif |
||||
htop |
||||
# firmware update utils |
||||
#fwupd |
||||
blacklist-pcspkr |
||||
glibc-locales |
||||
xfsprogs |
||||
jfsprogs |
||||
ntfs-3g |
||||
dosfstools |
||||
fatresize |
||||
make-initrd-ucode |
||||
shadow-change |
||||
openssh |
||||
openssh-blacklist |
||||
net-tools |
||||
nfs-utils |
||||
smartmontools |
||||
system-report |
||||
ps_mem |
||||
strace |
||||
powertop |
||||
pciutils |
||||
usbutils |
||||
acpi |
||||
dmidecode |
||||
|
||||
apt-repo |
||||
apt-rsync |
||||
apt-scripts |
||||
aptitude |
||||
update-kernel |
||||
eepm |
||||
bash-completion |
||||
cpufreq-simple |
||||
eject |
||||
bc |
||||
ncdu |
||||
tree |
||||
zsh |
||||
xorg-drv-ati |
||||
xorg-drv-cirrus |
||||
#xorg-drv-mga |
||||
xorg-drv-modesetting |
||||
#xorg-drv-nv |
||||
xorg-drv-qxl |
||||
#xorg-drv-s3 |
||||
#xorg-drv-s3virge |
||||
#xorg-drv-savage |
||||
#xorg-drv-sis |
||||
glibc-locales |
||||
glibc-gconv-modules |
||||
systemd |
||||
systemd-units |
||||
systemd-services |
||||
systemd-sysvinit |
||||
systemd-analyze |
||||
chkconfig |
||||
NetworkManager |
||||
NetworkManager-vpnc |
||||
NetworkManager-openvpn |
||||
NetworkManager-pptp |
||||
NetworkManager-l2tp |
||||
NetworkManager-openconnect |
||||
usb-modeswitch |
||||
systemd-sysvinit |
||||
###systemd-presets-kdesktop |
||||
|
||||
kde5-mini |
||||
kde5-small |
||||
|
||||
#####kde5 |
||||
gtk2-theme-breeze |
||||
gtk3-theme-breeze |
||||
kde5-filelight |
||||
kde5-kamera |
||||
kde5-kcharselect |
||||
kde5-kfind |
||||
kde5-kgpg |
||||
kde5-khelpcenter |
||||
kde5-kio-audiocd |
||||
kde5-kio-zeroconf |
||||
kde5-kolourpaint |
||||
kde5-krdc |
||||
kde5-kteatime |
||||
kde5-ktimer |
||||
kde5-network-filesharing |
||||
kde5-network-manager |
||||
kde5-plasma-applet-places-widget |
||||
kde5-spectacle |
||||
kde5-sweeper |
||||
kf5-baloo |
||||
kf5-kdbusaddons |
||||
kf5-qqc2-desktop-style |
||||
kf5-solid |
||||
plasma5-addons |
||||
plasma5-bluedevil |
||||
plasma5-kde-gtk-config |
||||
plasma5-kgamma |
||||
plasma5-khotkeys |
||||
plasma5-kinfocenter |
||||
plasma5-kmenuedit |
||||
plasma5-kscreen |
||||
plasma5-ksshaskpass |
||||
plasma5-browser-integration |
||||
plasma5-disks |
||||
|
||||
##big |
||||
kde5-connect |
||||
kde5-graphics-thumbnailers |
||||
kde5-pim |
||||
kde5-ffmpegthumbs |
||||
kde5-kate |
||||
kde5-kcron |
||||
kde5-kdf |
||||
kde5-kipi-plugins-core |
||||
###kde5-konversation |
||||
###kde5-messenger-client |
||||
kde5-krfb |
||||
kde5-kruler |
||||
kde5-ksystemlog |
||||
###kde5-pim-addons |
||||
kid3-ui-kde5 |
||||
plasma5-kwrited |
||||
plasma5-user-manager |
||||
plasma5-workspace-wallpapers |
||||
plasma5-xdg-desktop-portal-kde |
||||
|
||||
###kde5-maxi |
||||
kde5-digikam |
||||
kde5-k3b |
||||
kde5-keditbookmarks |
||||
kde5-kipi-plugins |
||||
kde5-kmag |
||||
kde5-kmousetool |
||||
kde5-kmouth |
||||
kde5-kwave |
||||
kde5-kfloppy |
||||
kde5-edu |
||||
kde5-printing |
||||
kde5-scanning |
||||
kde5-dolphin-plugins |
||||
#plasma5-discover-maxi |
||||
|
||||
|
||||
xorg-conf-synaptics |
||||
###xdg-user-dirs |
||||
###installer-feature-xdg-user-dirs |
||||
altlinux-freedesktop-menu-nested-menu |
||||
sane |
||||
sane-frontends |
||||
system-config-printer |
||||
rpminstall |
||||
kernel-modules-virtualbox-std-def |
||||
icon-theme-oxygen |
||||
vconsole-setup-kludge |
||||
pam-limits-desktop |
||||
installer-feature-kometa-kde5 |
||||
installer-feature-kometa-school-kde5 |
||||
kometa-os-release |
||||
kometa-std-desktop |
||||
kometa-xdg-core |
||||
kometa-xdg-plasma5-classic |
||||
kometa-xdg-pam-env |
||||
kometa-icons-core-classic |
||||
kometa-icons-theme-classic |
||||
|
||||
####Fonts |
||||
fonts-ttf-ms |
||||
fonts-ttf-PT |
||||
fonts-console-terminus |
||||
fonts-ttf-paratype-pt-sans-caption |
||||
fonts-ttf-paratype-pt-serif-caption |
||||
fonts-ttf-unifont |
||||
fonts-ttf-google-crosextra-carlito |
||||
fonts-ttf-PTAstra |
||||
|
||||
####soft |
||||
gimp |
||||
gimp-help-ru |
||||
xsane |
||||
xsane-doc-ru |
||||
xsane-gimp2 |
||||
simple-scan |
||||
vlc-maxi |
||||
simplescreenrecorder |
||||
git |
||||
xsensors |
||||
chromium |
||||
firefox |
||||
LibreOffice |
||||
LibreOffice-langpack-ru |
||||
LibreOffice-kde5 |
||||
kde5-menu-new-odf-files |
||||
cheese |
||||
kamoso |
||||
guvcview |
||||
kdenlive |
||||
shotcut |
||||
openshot |
||||
avidemux-qt |
||||
lmms |
||||
synfigstudio |
||||
#pdfmod |
||||
tesseract-langpack-ru |
||||
gimagereader-qt5 |
||||
eepm |
||||
darktable |
||||
ksnip |
||||
v4l-utils |
||||
|
||||
codeblocks |
||||
codeblocks-contrib |
||||
converseen |
||||
inkscape |
||||
kumir2 |
||||
audacity |
||||
audacity-manual |
||||
blender |
||||
scratch-full |
||||
scratch-help-en |
||||
wxMaxima |
||||
bluefish |
||||
lazarus |
||||
qt-creator |
||||
klatexformula |
||||
krita |
||||
gcompris-qt |
||||
gcompris-qt-data |
||||
gcompris-qt-voices-ru |
||||
###xorg-96dpi |
||||
OpenBoard |
||||
python3-module-pylint |
||||
python3-module-pytest-pylint |
||||
python3-module-pocketlint |
||||
python3-module-pyflakes |
||||
###libxcb-devel |
||||
nmap |
||||
python3-tools |
||||
python3-tools-pep8 |
||||
sympy |
||||
python3-module-sympy |
||||
python3-module-sympy-examples |
||||
ipython3 |
||||
alterator-update-kernel |
||||
###touchegg |
||||
hplip-hpcups-PPDs |
||||
hplip-hpijs-PPDs |
||||
hplip-PPDs |
||||
hplip-ps-PPDs |
||||
hplip-recommends |
||||
|
||||
#Для ноутбуков HP у которых не работает микрофон |
||||
#firmware-alsa-sof |
||||
appinstall |
||||
pam-config |
||||
pam_mount |
||||
pam_ccreds |
||||
samba-client |
||||
cifs-utils |
||||
keyutils |
||||
nfs-clients |
||||
autofs |
||||
libnss-fallback |
||||
libnss-mdns |
||||
settime-rfc867 |
||||
#krb5-ticket-watcher |
||||
alterator-browser-qt |
||||
alterator-standalone |
||||
alterator-auth |
||||
alterator-net-shares |
||||
|
||||
## BASE_LISTS |
||||
|
||||
# grub |
||||
grub-pc |
||||
grub-efi |
||||
|
||||
|
||||
# should be R: in grub-ieee1275 |
||||
|
||||
|
||||
## DOT_BASE |
||||
^kernel-(image|modules-(acpi_call|bcmwl|drm|drm-ancient|drm-nouveau|drm-radeon|e1000e|r8125|rtl8188fu|rtl8192eu|rtl8723bu|rtl8723de|rtl8812au|rtl8821ce|rtl8821cu|rtl88x2bu|rtw89|scsi|staging|vmware))-(std-def)$ |
||||
^branding-kometa-school-(notes|bootloader|alterator|graphics|indexhtml|notes|alterator|graphics|indexhtml|slideshow|bootloader|bootsplash|bootsplash)$ |
||||
make-initrd-plymouth |
||||
cpio |
||||
firmware-prism.* |
||||
firmware-ipw.* |
||||
firmware-zd.* |
||||
firmware-rt.* |
@ -0,0 +1,16 @@ |
||||
pam-config |
||||
pam_mount |
||||
pam_ccreds |
||||
samba-client |
||||
cifs-utils |
||||
keyutils |
||||
nfs-clients |
||||
autofs |
||||
libnss-fallback |
||||
libnss-mdns |
||||
settime-rfc867 |
||||
#krb5-ticket-watcher |
||||
alterator-browser-qt |
||||
alterator-standalone |
||||
alterator-auth |
||||
alterator-net-shares |
@ -0,0 +1,6 @@ |
||||
grub-pc |
||||
grub-efi |
||||
|
||||
|
||||
# should be R: in grub-ieee1275 |
||||
|
@ -0,0 +1,5 @@ |
||||
amixer |
||||
alsa-utils |
||||
aplay |
||||
test-audio |
||||
alsa-set-initial-options |
@ -0,0 +1,3 @@ |
||||
pulseaudio-daemon |
||||
pulseaudio-utils |
||||
alsa-plugins-pulse |
@ -0,0 +1,6 @@ |
||||
systemd |
||||
systemd-units |
||||
systemd-services |
||||
systemd-sysvinit |
||||
systemd-analyze |
||||
chkconfig |
@ -0,0 +1,10 @@ |
||||
wget |
||||
curl |
||||
rsync |
||||
apt |
||||
fdisk |
||||
vim-console |
||||
nano |
||||
mc |
||||
nfs-utils |
||||
system-backup |
@ -0,0 +1,6 @@ |
||||
gdisk |
||||
parted |
||||
fatresize |
||||
dosfstools |
||||
grub2-efi |
||||
efibootmgr |
@ -0,0 +1,92 @@ |
||||
systemd-sysvinit |
||||
###systemd-presets-kdesktop |
||||
|
||||
kde5-mini |
||||
kde5-small |
||||
|
||||
#####kde5 |
||||
gtk2-theme-breeze |
||||
gtk3-theme-breeze |
||||
kde5-filelight |
||||
kde5-kamera |
||||
kde5-kcharselect |
||||
kde5-kfind |
||||
kde5-kgpg |
||||
kde5-khelpcenter |
||||
kde5-kio-audiocd |
||||
kde5-kio-zeroconf |
||||
kde5-kolourpaint |
||||
kde5-krdc |
||||
kde5-kteatime |
||||
kde5-ktimer |
||||
kde5-network-filesharing |
||||
kde5-network-manager |
||||
kde5-plasma-applet-places-widget |
||||
kde5-spectacle |
||||
kde5-sweeper |
||||
kf5-baloo |
||||
kf5-kdbusaddons |
||||
kf5-qqc2-desktop-style |
||||
kf5-solid |
||||
plasma5-addons |
||||
plasma5-bluedevil |
||||
plasma5-kde-gtk-config |
||||
plasma5-kgamma |
||||
plasma5-khotkeys |
||||
plasma5-kinfocenter |
||||
plasma5-kmenuedit |
||||
plasma5-kscreen |
||||
plasma5-ksshaskpass |
||||
plasma5-browser-integration |
||||
plasma5-disks |
||||
|
||||
##big |
||||
kde5-connect |
||||
kde5-graphics-thumbnailers |
||||
kde5-pim |
||||
kde5-ffmpegthumbs |
||||
kde5-kate |
||||
kde5-kcron |
||||
kde5-kdf |
||||
kde5-kipi-plugins-core |
||||
###kde5-konversation |
||||
###kde5-messenger-client |
||||
kde5-krfb |
||||
kde5-kruler |
||||
kde5-ksystemlog |
||||
###kde5-pim-addons |
||||
kid3-ui-kde5 |
||||
plasma5-kwrited |
||||
plasma5-user-manager |
||||
plasma5-workspace-wallpapers |
||||
plasma5-xdg-desktop-portal-kde |
||||
|
||||
###kde5-maxi |
||||
kde5-digikam |
||||
kde5-k3b |
||||
kde5-keditbookmarks |
||||
kde5-kipi-plugins |
||||
kde5-kmag |
||||
kde5-kmousetool |
||||
kde5-kmouth |
||||
kde5-kwave |
||||
kde5-kfloppy |
||||
kde5-edu |
||||
kde5-printing |
||||
kde5-scanning |
||||
kde5-dolphin-plugins |
||||
#plasma5-discover-maxi |
||||
|
||||
|
||||
xorg-conf-synaptics |
||||
###xdg-user-dirs |
||||
###installer-feature-xdg-user-dirs |
||||
altlinux-freedesktop-menu-nested-menu |
||||
sane |
||||
sane-frontends |
||||
system-config-printer |
||||
rpminstall |
||||
kernel-modules-virtualbox-std-def |
||||
icon-theme-oxygen |
||||
vconsole-setup-kludge |
||||
pam-limits-desktop |
@ -0,0 +1,118 @@ |
||||
installer-feature-kometa-kde5 |
||||
installer-feature-kometa-school-kde5 |
||||
installer-feature-desktop-other-fs-stage2 |
||||
kometa-os-release |
||||
kometa-std-desktop |
||||
kometa-xdg-core |
||||
kometa-xdg-plasma5-classic |
||||
kometa-xdg-pam-env |
||||
kometa-icons-core-classic |
||||
kometa-icons-theme-classic |
||||
polkit-rule-gparted-as-root |
||||
eepm-add-r7-office |
||||
|
||||
####R7 |
||||
fonts-ttf-dejavu |
||||
fonts-ttf-google-crosextra-carlito |
||||
fonts-ttf-liberation |
||||
glibc gst-libav |
||||
gst-plugins-ugly1.0 |
||||
libX11 |
||||
libXScrnSaver |
||||
libcairo |
||||
libgcc1 |
||||
libgtk+2 |
||||
libgtkglext |
||||
r7-office |
||||
|
||||
####Myoffice |
||||
myoffice-standard-documents |
||||
|
||||
####Fonts |
||||
fonts-ttf-ms |
||||
fonts-ttf-PT |
||||
fonts-console-terminus |
||||
fonts-ttf-paratype-pt-sans-caption |
||||
fonts-ttf-paratype-pt-serif-caption |
||||
fonts-ttf-unifont |
||||
fonts-ttf-google-crosextra-carlito |
||||
fonts-ttf-PTAstra |
||||
|
||||
####soft |
||||
gimp |
||||
gimp-help-ru |
||||
xsane |
||||
xsane-doc-ru |
||||
xsane-gimp2 |
||||
simple-scan |
||||
vlc-maxi |
||||
simplescreenrecorder |
||||
git |
||||
xsensors |
||||
chromium |
||||
firefox |
||||
LibreOffice |
||||
LibreOffice-langpack-ru |
||||
LibreOffice-kde5 |
||||
kde5-menu-new-odf-files |
||||
cheese |
||||
kamoso |
||||
guvcview |
||||
kdenlive |
||||
shotcut |
||||
openshot |
||||
avidemux-qt |
||||
lmms |
||||
synfigstudio |
||||
#pdfmod |
||||
tesseract-langpack-ru |
||||
gimagereader-qt5 |
||||
eepm |
||||
darktable |
||||
ksnip |
||||
v4l-utils |
||||
|
||||
codeblocks |
||||
codeblocks-contrib |
||||
converseen |
||||
inkscape |
||||
kumir2 |
||||
audacity |
||||
audacity-manual |
||||
blender |
||||
scratch-full |
||||
scratch-help-en |
||||
wxMaxima |
||||
bluefish |
||||
lazarus |
||||
qt-creator |
||||
klatexformula |
||||
krita |
||||
gcompris-qt |
||||
gcompris-qt-data |
||||
gcompris-qt-voices-ru |
||||
###xorg-96dpi |
||||
OpenBoard |
||||
python3-module-pylint |
||||
python3-module-pytest-pylint |
||||
python3-module-pocketlint |
||||
python3-module-pyflakes |
||||
###libxcb-devel |
||||
nmap |
||||
python3-tools |
||||
python3-tools-pep8 |
||||
sympy |
||||
python3-module-sympy |
||||
python3-module-sympy-examples |
||||
ipython3 |
||||
alterator-update-kernel |
||||
###touchegg |
||||
hplip-hpcups-PPDs |
||||
hplip-hpijs-PPDs |
||||
hplip-PPDs |
||||
hplip-ps-PPDs |
||||
hplip-recommends |
||||
|
||||
#Для ноутбуков HP у которых не работает микрофон |
||||
firmware-alsa-sof |
||||
appinstall |
@ -0,0 +1,2 @@ |
||||
glibc-locales |
||||
glibc-gconv-modules |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue