[Merge] fix conflicts
This commit is contained in:
commit
99fd0b76c2
@ -185,6 +185,50 @@ set( CALAMARES_LIBRARIES calamares )
|
|||||||
|
|
||||||
set( THIRDPARTY_DIR "${CMAKE_SOURCE_DIR}/thirdparty" )
|
set( THIRDPARTY_DIR "${CMAKE_SOURCE_DIR}/thirdparty" )
|
||||||
|
|
||||||
|
### Example Distro
|
||||||
|
#
|
||||||
|
# For testing purposes Calamares includes a very, very, limited sample
|
||||||
|
# distro called "Generic". The root filesystem of "Generic" lives in
|
||||||
|
# data/example-root and can be squashed up as part of the build, so
|
||||||
|
# that a pure-upstream run of ./calamares -d from the build directory
|
||||||
|
# (with all the default settings and configurations) can actually
|
||||||
|
# do an complete example run.
|
||||||
|
#
|
||||||
|
# Some binaries from the build host (e.g. /bin and /lib) are also
|
||||||
|
# squashed into the example filesystem.
|
||||||
|
#
|
||||||
|
# To build the example distro (for use by the default, example,
|
||||||
|
# unsquashfs module), build the target 'example-distro', eg.:
|
||||||
|
#
|
||||||
|
# make example-distro
|
||||||
|
#
|
||||||
|
find_program( mksquashfs_PROGRAM mksquashfs )
|
||||||
|
macro_log_feature( mksquashfs_PROGRAM "mksquashfs" "Create example distro" "http://tldp.org/HOWTO/SquashFS-HOWTO/creatingandusing.html")
|
||||||
|
if( mksquashfs_PROGRAM )
|
||||||
|
set( src_fs ${CMAKE_SOURCE_DIR}/data/example-root/ )
|
||||||
|
set( dst_fs ${CMAKE_BINARY_DIR}/example.sqfs )
|
||||||
|
if( EXISTS ${src_fs} )
|
||||||
|
# Collect directories needed for a minimal binary distro,
|
||||||
|
# based on the build host. If /lib64 exists, assume it is needed.
|
||||||
|
# Note that the last path component is added to the root, so
|
||||||
|
# if you add /usr/sbin here, it will be put into /sbin_1.
|
||||||
|
# Add such paths to /etc/profile under ${src_fs}.
|
||||||
|
set( candidate_fs /sbin /bin /lib /lib64 )
|
||||||
|
set( host_fs "" )
|
||||||
|
foreach( c_fs ${candidate_fs} )
|
||||||
|
if( EXISTS ${c_fs} )
|
||||||
|
list( APPEND host_fs ${c_fs} )
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
add_custom_command(
|
||||||
|
OUTPUT ${dst_fs}
|
||||||
|
COMMAND ${mksquashfs_PROGRAM} ${src_fs} ${dst_fs} -all-root
|
||||||
|
COMMAND ${mksquashfs_PROGRAM} ${host_fs} ${dst_fs} -all-root
|
||||||
|
)
|
||||||
|
add_custom_target(example-distro DEPENDS ${dst_fs})
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
add_subdirectory( thirdparty )
|
add_subdirectory( thirdparty )
|
||||||
add_subdirectory( src )
|
add_subdirectory( src )
|
||||||
|
|
||||||
|
10
ci/txpush.sh
10
ci/txpush.sh
@ -47,11 +47,7 @@ tx push --source --no-interactive -r calamares.fdo
|
|||||||
# - python modules without lang/, which use one shared catalog
|
# - python modules without lang/, which use one shared catalog
|
||||||
#
|
#
|
||||||
|
|
||||||
# Arch
|
PYGETTEXT="xgettext --keyword=_n:1,2 -L python"
|
||||||
# PYGETTEXT=/usr/lib/python3.5/Tools/i18n/pygettext.py
|
|
||||||
|
|
||||||
# Ubuntu
|
|
||||||
PYGETTEXT=pygettext3
|
|
||||||
|
|
||||||
SHARED_PYTHON=""
|
SHARED_PYTHON=""
|
||||||
for MODULE_DIR in $(find src/modules -maxdepth 1 -mindepth 1 -type d) ; do
|
for MODULE_DIR in $(find src/modules -maxdepth 1 -mindepth 1 -type d) ; do
|
||||||
@ -59,7 +55,7 @@ for MODULE_DIR in $(find src/modules -maxdepth 1 -mindepth 1 -type d) ; do
|
|||||||
if test -n "$FILES" ; then
|
if test -n "$FILES" ; then
|
||||||
MODULE_NAME=$(basename ${MODULE_DIR})
|
MODULE_NAME=$(basename ${MODULE_DIR})
|
||||||
if [ -d ${MODULE_DIR}/lang ]; then
|
if [ -d ${MODULE_DIR}/lang ]; then
|
||||||
${PYGETTEXT} -p ${MODULE_DIR}/lang -d ${MODULE_NAME} ${MODULE_DIR}/*.py
|
${PYGETTEXT} -p ${MODULE_DIR}/lang -d ${MODULE_NAME} -o ${MODULE_NAME}.pot ${MODULE_DIR}/*.py
|
||||||
if [ -f ${MODULE_DIR}/lang/${MODULE_NAME}.pot ]; then
|
if [ -f ${MODULE_DIR}/lang/${MODULE_NAME}.pot ]; then
|
||||||
tx set -r calamares.${MODULE_NAME} --source -l en ${MODULE_DIR}/lang/${MODULE_NAME}.pot
|
tx set -r calamares.${MODULE_NAME} --source -l en ${MODULE_DIR}/lang/${MODULE_NAME}.pot
|
||||||
tx push --source --no-interactive -r calamares.${MODULE_NAME}
|
tx push --source --no-interactive -r calamares.${MODULE_NAME}
|
||||||
@ -71,7 +67,7 @@ for MODULE_DIR in $(find src/modules -maxdepth 1 -mindepth 1 -type d) ; do
|
|||||||
done
|
done
|
||||||
|
|
||||||
if test -n "$SHARED_PYTHON" ; then
|
if test -n "$SHARED_PYTHON" ; then
|
||||||
${PYGETTEXT} -p lang -d python $SHARED_PYTHON
|
${PYGETTEXT} -p lang -d python -o python.pot $SHARED_PYTHON
|
||||||
tx set -r calamares.python --source -l en lang/python.pot
|
tx set -r calamares.python --source -l en lang/python.pot
|
||||||
tx push --source --no-interactive -r calamares.python
|
tx push --source --no-interactive -r calamares.python
|
||||||
fi
|
fi
|
||||||
|
11
data/example-root/README.md
Normal file
11
data/example-root/README.md
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# Example Filesystem
|
||||||
|
|
||||||
|
This is a filesystem that will be used as / in an example distro,
|
||||||
|
*if* you build the `example-distro` target and use the default
|
||||||
|
unpackfs configuration. It should hold files and configuration
|
||||||
|
bits that need to be on the target system for example purposes.
|
||||||
|
|
||||||
|
It should *not* have a bin/, lib/, sbin/ or lib64/ directory,
|
||||||
|
since those are copied into the example-distro filesystem
|
||||||
|
from the build host.
|
||||||
|
|
2
data/example-root/etc/bash.bashrc
Normal file
2
data/example-root/etc/bash.bashrc
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
# Global .profile -- add /sbin_1
|
||||||
|
PATH=$PATH:/sbin_1:/xbin
|
1
data/example-root/etc/group
Normal file
1
data/example-root/etc/group
Normal file
@ -0,0 +1 @@
|
|||||||
|
root:x:0:
|
1
data/example-root/etc/issue
Normal file
1
data/example-root/etc/issue
Normal file
@ -0,0 +1 @@
|
|||||||
|
This is an example /etc/issue file.
|
486
data/example-root/etc/locale.gen
Normal file
486
data/example-root/etc/locale.gen
Normal file
@ -0,0 +1,486 @@
|
|||||||
|
# This file lists locales that you wish to have built. You can find a list
|
||||||
|
# of valid supported locales at /usr/share/i18n/SUPPORTED, and you can add
|
||||||
|
# user defined locales to /usr/local/share/i18n/SUPPORTED. If you change
|
||||||
|
# this file, you need to rerun locale-gen.
|
||||||
|
|
||||||
|
|
||||||
|
# aa_DJ ISO-8859-1
|
||||||
|
# aa_DJ.UTF-8 UTF-8
|
||||||
|
# aa_ER UTF-8
|
||||||
|
# aa_ER@saaho UTF-8
|
||||||
|
# aa_ET UTF-8
|
||||||
|
# af_ZA ISO-8859-1
|
||||||
|
# af_ZA.UTF-8 UTF-8
|
||||||
|
# ak_GH UTF-8
|
||||||
|
# am_ET UTF-8
|
||||||
|
# an_ES ISO-8859-15
|
||||||
|
# an_ES.UTF-8 UTF-8
|
||||||
|
# anp_IN UTF-8
|
||||||
|
# ar_AE ISO-8859-6
|
||||||
|
# ar_AE.UTF-8 UTF-8
|
||||||
|
# ar_BH ISO-8859-6
|
||||||
|
# ar_BH.UTF-8 UTF-8
|
||||||
|
# ar_DZ ISO-8859-6
|
||||||
|
# ar_DZ.UTF-8 UTF-8
|
||||||
|
# ar_EG ISO-8859-6
|
||||||
|
# ar_EG.UTF-8 UTF-8
|
||||||
|
# ar_IN UTF-8
|
||||||
|
# ar_IQ ISO-8859-6
|
||||||
|
# ar_IQ.UTF-8 UTF-8
|
||||||
|
# ar_JO ISO-8859-6
|
||||||
|
# ar_JO.UTF-8 UTF-8
|
||||||
|
# ar_KW ISO-8859-6
|
||||||
|
# ar_KW.UTF-8 UTF-8
|
||||||
|
# ar_LB ISO-8859-6
|
||||||
|
# ar_LB.UTF-8 UTF-8
|
||||||
|
# ar_LY ISO-8859-6
|
||||||
|
# ar_LY.UTF-8 UTF-8
|
||||||
|
# ar_MA ISO-8859-6
|
||||||
|
# ar_MA.UTF-8 UTF-8
|
||||||
|
# ar_OM ISO-8859-6
|
||||||
|
# ar_OM.UTF-8 UTF-8
|
||||||
|
# ar_QA ISO-8859-6
|
||||||
|
# ar_QA.UTF-8 UTF-8
|
||||||
|
# ar_SA ISO-8859-6
|
||||||
|
# ar_SA.UTF-8 UTF-8
|
||||||
|
# ar_SD ISO-8859-6
|
||||||
|
# ar_SD.UTF-8 UTF-8
|
||||||
|
# ar_SS UTF-8
|
||||||
|
# ar_SY ISO-8859-6
|
||||||
|
# ar_SY.UTF-8 UTF-8
|
||||||
|
# ar_TN ISO-8859-6
|
||||||
|
# ar_TN.UTF-8 UTF-8
|
||||||
|
# ar_YE ISO-8859-6
|
||||||
|
# ar_YE.UTF-8 UTF-8
|
||||||
|
# as_IN UTF-8
|
||||||
|
# ast_ES ISO-8859-15
|
||||||
|
# ast_ES.UTF-8 UTF-8
|
||||||
|
# ayc_PE UTF-8
|
||||||
|
# az_AZ UTF-8
|
||||||
|
# be_BY CP1251
|
||||||
|
# be_BY.UTF-8 UTF-8
|
||||||
|
# be_BY@latin UTF-8
|
||||||
|
# bem_ZM UTF-8
|
||||||
|
# ber_DZ UTF-8
|
||||||
|
# ber_MA UTF-8
|
||||||
|
# bg_BG CP1251
|
||||||
|
# bg_BG.UTF-8 UTF-8
|
||||||
|
# bhb_IN.UTF-8 UTF-8
|
||||||
|
# bho_IN UTF-8
|
||||||
|
# bn_BD UTF-8
|
||||||
|
# bn_IN UTF-8
|
||||||
|
# bo_CN UTF-8
|
||||||
|
# bo_IN UTF-8
|
||||||
|
# br_FR ISO-8859-1
|
||||||
|
# br_FR.UTF-8 UTF-8
|
||||||
|
# br_FR@euro ISO-8859-15
|
||||||
|
# brx_IN UTF-8
|
||||||
|
# bs_BA ISO-8859-2
|
||||||
|
# bs_BA.UTF-8 UTF-8
|
||||||
|
# byn_ER UTF-8
|
||||||
|
# ca_AD ISO-8859-15
|
||||||
|
# ca_AD.UTF-8 UTF-8
|
||||||
|
# ca_ES ISO-8859-1
|
||||||
|
# ca_ES.UTF-8 UTF-8
|
||||||
|
# ca_ES.UTF-8@valencia UTF-8
|
||||||
|
# ca_ES@euro ISO-8859-15
|
||||||
|
# ca_ES@valencia ISO-8859-15
|
||||||
|
# ca_FR ISO-8859-15
|
||||||
|
# ca_FR.UTF-8 UTF-8
|
||||||
|
# ca_IT ISO-8859-15
|
||||||
|
# ca_IT.UTF-8 UTF-8
|
||||||
|
# ce_RU UTF-8
|
||||||
|
# ckb_IQ UTF-8
|
||||||
|
# cmn_TW UTF-8
|
||||||
|
# crh_UA UTF-8
|
||||||
|
# cs_CZ ISO-8859-2
|
||||||
|
# cs_CZ.UTF-8 UTF-8
|
||||||
|
# csb_PL UTF-8
|
||||||
|
# cv_RU UTF-8
|
||||||
|
# cy_GB ISO-8859-14
|
||||||
|
# cy_GB.UTF-8 UTF-8
|
||||||
|
# da_DK ISO-8859-1
|
||||||
|
# da_DK.UTF-8 UTF-8
|
||||||
|
# de_AT ISO-8859-1
|
||||||
|
# de_AT.UTF-8 UTF-8
|
||||||
|
# de_AT@euro ISO-8859-15
|
||||||
|
# de_BE ISO-8859-1
|
||||||
|
# de_BE.UTF-8 UTF-8
|
||||||
|
# de_BE@euro ISO-8859-15
|
||||||
|
# de_CH ISO-8859-1
|
||||||
|
# de_CH.UTF-8 UTF-8
|
||||||
|
# de_DE ISO-8859-1
|
||||||
|
# de_DE.UTF-8 UTF-8
|
||||||
|
# de_DE@euro ISO-8859-15
|
||||||
|
# de_LI.UTF-8 UTF-8
|
||||||
|
# de_LU ISO-8859-1
|
||||||
|
# de_LU.UTF-8 UTF-8
|
||||||
|
# de_LU@euro ISO-8859-15
|
||||||
|
# doi_IN UTF-8
|
||||||
|
# dv_MV UTF-8
|
||||||
|
# dz_BT UTF-8
|
||||||
|
# el_CY ISO-8859-7
|
||||||
|
# el_CY.UTF-8 UTF-8
|
||||||
|
# el_GR ISO-8859-7
|
||||||
|
# el_GR.UTF-8 UTF-8
|
||||||
|
# en_AG UTF-8
|
||||||
|
# en_AU ISO-8859-1
|
||||||
|
# en_AU.UTF-8 UTF-8
|
||||||
|
# en_BW ISO-8859-1
|
||||||
|
# en_BW.UTF-8 UTF-8
|
||||||
|
# en_CA ISO-8859-1
|
||||||
|
en_CA.UTF-8 UTF-8
|
||||||
|
# en_DK ISO-8859-1
|
||||||
|
# en_DK.ISO-8859-15 ISO-8859-15
|
||||||
|
# en_DK.UTF-8 UTF-8
|
||||||
|
# en_GB ISO-8859-1
|
||||||
|
# en_GB.ISO-8859-15 ISO-8859-15
|
||||||
|
# en_GB.UTF-8 UTF-8
|
||||||
|
# en_HK ISO-8859-1
|
||||||
|
# en_HK.UTF-8 UTF-8
|
||||||
|
# en_IE ISO-8859-1
|
||||||
|
# en_IE.UTF-8 UTF-8
|
||||||
|
# en_IE@euro ISO-8859-15
|
||||||
|
# en_IN UTF-8
|
||||||
|
# en_NG UTF-8
|
||||||
|
# en_NZ ISO-8859-1
|
||||||
|
# en_NZ.UTF-8 UTF-8
|
||||||
|
# en_PH ISO-8859-1
|
||||||
|
# en_PH.UTF-8 UTF-8
|
||||||
|
# en_SG ISO-8859-1
|
||||||
|
# en_SG.UTF-8 UTF-8
|
||||||
|
# en_US ISO-8859-1
|
||||||
|
# en_US.ISO-8859-15 ISO-8859-15
|
||||||
|
en_US.UTF-8 UTF-8
|
||||||
|
# en_ZA ISO-8859-1
|
||||||
|
# en_ZA.UTF-8 UTF-8
|
||||||
|
# en_ZM UTF-8
|
||||||
|
# en_ZW ISO-8859-1
|
||||||
|
# en_ZW.UTF-8 UTF-8
|
||||||
|
# eo ISO-8859-3
|
||||||
|
# eo.UTF-8 UTF-8
|
||||||
|
# eo_US.UTF-8 UTF-8
|
||||||
|
# es_AR ISO-8859-1
|
||||||
|
# es_AR.UTF-8 UTF-8
|
||||||
|
# es_BO ISO-8859-1
|
||||||
|
# es_BO.UTF-8 UTF-8
|
||||||
|
# es_CL ISO-8859-1
|
||||||
|
# es_CL.UTF-8 UTF-8
|
||||||
|
# es_CO ISO-8859-1
|
||||||
|
# es_CO.UTF-8 UTF-8
|
||||||
|
# es_CR ISO-8859-1
|
||||||
|
# es_CR.UTF-8 UTF-8
|
||||||
|
# es_CU UTF-8
|
||||||
|
# es_DO ISO-8859-1
|
||||||
|
# es_DO.UTF-8 UTF-8
|
||||||
|
# es_EC ISO-8859-1
|
||||||
|
# es_EC.UTF-8 UTF-8
|
||||||
|
# es_ES ISO-8859-1
|
||||||
|
# es_ES.UTF-8 UTF-8
|
||||||
|
# es_ES@euro ISO-8859-15
|
||||||
|
# es_GT ISO-8859-1
|
||||||
|
# es_GT.UTF-8 UTF-8
|
||||||
|
# es_HN ISO-8859-1
|
||||||
|
# es_HN.UTF-8 UTF-8
|
||||||
|
# es_MX ISO-8859-1
|
||||||
|
# es_MX.UTF-8 UTF-8
|
||||||
|
# es_NI ISO-8859-1
|
||||||
|
# es_NI.UTF-8 UTF-8
|
||||||
|
# es_PA ISO-8859-1
|
||||||
|
# es_PA.UTF-8 UTF-8
|
||||||
|
# es_PE ISO-8859-1
|
||||||
|
# es_PE.UTF-8 UTF-8
|
||||||
|
# es_PR ISO-8859-1
|
||||||
|
# es_PR.UTF-8 UTF-8
|
||||||
|
# es_PY ISO-8859-1
|
||||||
|
# es_PY.UTF-8 UTF-8
|
||||||
|
# es_SV ISO-8859-1
|
||||||
|
# es_SV.UTF-8 UTF-8
|
||||||
|
# es_US ISO-8859-1
|
||||||
|
# es_US.UTF-8 UTF-8
|
||||||
|
# es_UY ISO-8859-1
|
||||||
|
# es_UY.UTF-8 UTF-8
|
||||||
|
# es_VE ISO-8859-1
|
||||||
|
# es_VE.UTF-8 UTF-8
|
||||||
|
# et_EE ISO-8859-1
|
||||||
|
# et_EE.ISO-8859-15 ISO-8859-15
|
||||||
|
# et_EE.UTF-8 UTF-8
|
||||||
|
# eu_ES ISO-8859-1
|
||||||
|
# eu_ES.UTF-8 UTF-8
|
||||||
|
# eu_ES@euro ISO-8859-15
|
||||||
|
# eu_FR ISO-8859-1
|
||||||
|
# eu_FR.UTF-8 UTF-8
|
||||||
|
# eu_FR@euro ISO-8859-15
|
||||||
|
# fa_IR UTF-8
|
||||||
|
# ff_SN UTF-8
|
||||||
|
# fi_FI ISO-8859-1
|
||||||
|
# fi_FI.UTF-8 UTF-8
|
||||||
|
# fi_FI@euro ISO-8859-15
|
||||||
|
# fil_PH UTF-8
|
||||||
|
# fo_FO ISO-8859-1
|
||||||
|
# fo_FO.UTF-8 UTF-8
|
||||||
|
# fr_BE ISO-8859-1
|
||||||
|
# fr_BE.UTF-8 UTF-8
|
||||||
|
# fr_BE@euro ISO-8859-15
|
||||||
|
# fr_CA ISO-8859-1
|
||||||
|
# fr_CA.UTF-8 UTF-8
|
||||||
|
# fr_CH ISO-8859-1
|
||||||
|
# fr_CH.UTF-8 UTF-8
|
||||||
|
# fr_FR ISO-8859-1
|
||||||
|
# fr_FR.UTF-8 UTF-8
|
||||||
|
# fr_FR@euro ISO-8859-15
|
||||||
|
# fr_LU ISO-8859-1
|
||||||
|
# fr_LU.UTF-8 UTF-8
|
||||||
|
# fr_LU@euro ISO-8859-15
|
||||||
|
# fur_IT UTF-8
|
||||||
|
# fy_DE UTF-8
|
||||||
|
# fy_NL UTF-8
|
||||||
|
# ga_IE ISO-8859-1
|
||||||
|
# ga_IE.UTF-8 UTF-8
|
||||||
|
# ga_IE@euro ISO-8859-15
|
||||||
|
# gd_GB ISO-8859-15
|
||||||
|
# gd_GB.UTF-8 UTF-8
|
||||||
|
# gez_ER UTF-8
|
||||||
|
# gez_ER@abegede UTF-8
|
||||||
|
# gez_ET UTF-8
|
||||||
|
# gez_ET@abegede UTF-8
|
||||||
|
# gl_ES ISO-8859-1
|
||||||
|
# gl_ES.UTF-8 UTF-8
|
||||||
|
# gl_ES@euro ISO-8859-15
|
||||||
|
# gu_IN UTF-8
|
||||||
|
# gv_GB ISO-8859-1
|
||||||
|
# gv_GB.UTF-8 UTF-8
|
||||||
|
# ha_NG UTF-8
|
||||||
|
# hak_TW UTF-8
|
||||||
|
# he_IL ISO-8859-8
|
||||||
|
# he_IL.UTF-8 UTF-8
|
||||||
|
# hi_IN UTF-8
|
||||||
|
# hne_IN UTF-8
|
||||||
|
# hr_HR ISO-8859-2
|
||||||
|
# hr_HR.UTF-8 UTF-8
|
||||||
|
# hsb_DE ISO-8859-2
|
||||||
|
# hsb_DE.UTF-8 UTF-8
|
||||||
|
# ht_HT UTF-8
|
||||||
|
# hu_HU ISO-8859-2
|
||||||
|
# hu_HU.UTF-8 UTF-8
|
||||||
|
# hy_AM UTF-8
|
||||||
|
# hy_AM.ARMSCII-8 ARMSCII-8
|
||||||
|
# ia_FR UTF-8
|
||||||
|
# id_ID ISO-8859-1
|
||||||
|
# id_ID.UTF-8 UTF-8
|
||||||
|
# ig_NG UTF-8
|
||||||
|
# ik_CA UTF-8
|
||||||
|
# is_IS ISO-8859-1
|
||||||
|
# is_IS.UTF-8 UTF-8
|
||||||
|
# it_CH ISO-8859-1
|
||||||
|
# it_CH.UTF-8 UTF-8
|
||||||
|
# it_IT ISO-8859-1
|
||||||
|
# it_IT.UTF-8 UTF-8
|
||||||
|
# it_IT@euro ISO-8859-15
|
||||||
|
# iu_CA UTF-8
|
||||||
|
# iw_IL ISO-8859-8
|
||||||
|
# iw_IL.UTF-8 UTF-8
|
||||||
|
# ja_JP.EUC-JP EUC-JP
|
||||||
|
# ja_JP.UTF-8 UTF-8
|
||||||
|
# ka_GE GEORGIAN-PS
|
||||||
|
# ka_GE.UTF-8 UTF-8
|
||||||
|
# kk_KZ PT154
|
||||||
|
# kk_KZ RK1048
|
||||||
|
# kk_KZ.UTF-8 UTF-8
|
||||||
|
# kl_GL ISO-8859-1
|
||||||
|
# kl_GL.UTF-8 UTF-8
|
||||||
|
# km_KH UTF-8
|
||||||
|
# kn_IN UTF-8
|
||||||
|
# ko_KR.EUC-KR EUC-KR
|
||||||
|
# ko_KR.UTF-8 UTF-8
|
||||||
|
# kok_IN UTF-8
|
||||||
|
# ks_IN UTF-8
|
||||||
|
# ks_IN@devanagari UTF-8
|
||||||
|
# ku_TR ISO-8859-9
|
||||||
|
# ku_TR.UTF-8 UTF-8
|
||||||
|
# kw_GB ISO-8859-1
|
||||||
|
# kw_GB.UTF-8 UTF-8
|
||||||
|
# ky_KG UTF-8
|
||||||
|
# lb_LU UTF-8
|
||||||
|
# lg_UG ISO-8859-10
|
||||||
|
# lg_UG.UTF-8 UTF-8
|
||||||
|
# li_BE UTF-8
|
||||||
|
# li_NL UTF-8
|
||||||
|
# lij_IT UTF-8
|
||||||
|
# ln_CD UTF-8
|
||||||
|
# lo_LA UTF-8
|
||||||
|
# lt_LT ISO-8859-13
|
||||||
|
# lt_LT.UTF-8 UTF-8
|
||||||
|
# lv_LV ISO-8859-13
|
||||||
|
# lv_LV.UTF-8 UTF-8
|
||||||
|
# lzh_TW UTF-8
|
||||||
|
# mag_IN UTF-8
|
||||||
|
# mai_IN UTF-8
|
||||||
|
# mg_MG ISO-8859-15
|
||||||
|
# mg_MG.UTF-8 UTF-8
|
||||||
|
# mhr_RU UTF-8
|
||||||
|
# mi_NZ ISO-8859-13
|
||||||
|
# mi_NZ.UTF-8 UTF-8
|
||||||
|
# mk_MK ISO-8859-5
|
||||||
|
# mk_MK.UTF-8 UTF-8
|
||||||
|
# ml_IN UTF-8
|
||||||
|
# mn_MN UTF-8
|
||||||
|
# mni_IN UTF-8
|
||||||
|
# mr_IN UTF-8
|
||||||
|
# ms_MY ISO-8859-1
|
||||||
|
# ms_MY.UTF-8 UTF-8
|
||||||
|
# mt_MT ISO-8859-3
|
||||||
|
# mt_MT.UTF-8 UTF-8
|
||||||
|
# my_MM UTF-8
|
||||||
|
# nan_TW UTF-8
|
||||||
|
# nan_TW@latin UTF-8
|
||||||
|
# nb_NO ISO-8859-1
|
||||||
|
# nb_NO.UTF-8 UTF-8
|
||||||
|
# nds_DE UTF-8
|
||||||
|
# nds_NL UTF-8
|
||||||
|
# ne_NP UTF-8
|
||||||
|
# nhn_MX UTF-8
|
||||||
|
# niu_NU UTF-8
|
||||||
|
# niu_NZ UTF-8
|
||||||
|
# nl_AW UTF-8
|
||||||
|
# nl_BE ISO-8859-1
|
||||||
|
# nl_BE.UTF-8 UTF-8
|
||||||
|
# nl_BE@euro ISO-8859-15
|
||||||
|
# nl_NL ISO-8859-1
|
||||||
|
# nl_NL.UTF-8 UTF-8
|
||||||
|
# nl_NL@euro ISO-8859-15
|
||||||
|
# nn_NO ISO-8859-1
|
||||||
|
# nn_NO.UTF-8 UTF-8
|
||||||
|
# nr_ZA UTF-8
|
||||||
|
# nso_ZA UTF-8
|
||||||
|
# oc_FR ISO-8859-1
|
||||||
|
# oc_FR.UTF-8 UTF-8
|
||||||
|
# om_ET UTF-8
|
||||||
|
# om_KE ISO-8859-1
|
||||||
|
# om_KE.UTF-8 UTF-8
|
||||||
|
# or_IN UTF-8
|
||||||
|
# os_RU UTF-8
|
||||||
|
# pa_IN UTF-8
|
||||||
|
# pa_PK UTF-8
|
||||||
|
# pap_AN UTF-8
|
||||||
|
# pap_AW UTF-8
|
||||||
|
# pap_CW UTF-8
|
||||||
|
# pl_PL ISO-8859-2
|
||||||
|
# pl_PL.UTF-8 UTF-8
|
||||||
|
# ps_AF UTF-8
|
||||||
|
# pt_BR ISO-8859-1
|
||||||
|
# pt_BR.UTF-8 UTF-8
|
||||||
|
# pt_PT ISO-8859-1
|
||||||
|
# pt_PT.UTF-8 UTF-8
|
||||||
|
# pt_PT@euro ISO-8859-15
|
||||||
|
# quz_PE UTF-8
|
||||||
|
# raj_IN UTF-8
|
||||||
|
# ro_RO ISO-8859-2
|
||||||
|
# ro_RO.UTF-8 UTF-8
|
||||||
|
# ru_RU ISO-8859-5
|
||||||
|
# ru_RU.CP1251 CP1251
|
||||||
|
# ru_RU.KOI8-R KOI8-R
|
||||||
|
# ru_RU.UTF-8 UTF-8
|
||||||
|
# ru_UA KOI8-U
|
||||||
|
# ru_UA.UTF-8 UTF-8
|
||||||
|
# rw_RW UTF-8
|
||||||
|
# sa_IN UTF-8
|
||||||
|
# sat_IN UTF-8
|
||||||
|
# sc_IT UTF-8
|
||||||
|
# sd_IN UTF-8
|
||||||
|
# sd_IN@devanagari UTF-8
|
||||||
|
# sd_PK UTF-8
|
||||||
|
# se_NO UTF-8
|
||||||
|
# shs_CA UTF-8
|
||||||
|
# si_LK UTF-8
|
||||||
|
# sid_ET UTF-8
|
||||||
|
# sk_SK ISO-8859-2
|
||||||
|
# sk_SK.UTF-8 UTF-8
|
||||||
|
# sl_SI ISO-8859-2
|
||||||
|
# sl_SI.UTF-8 UTF-8
|
||||||
|
# so_DJ ISO-8859-1
|
||||||
|
# so_DJ.UTF-8 UTF-8
|
||||||
|
# so_ET UTF-8
|
||||||
|
# so_KE ISO-8859-1
|
||||||
|
# so_KE.UTF-8 UTF-8
|
||||||
|
# so_SO ISO-8859-1
|
||||||
|
# so_SO.UTF-8 UTF-8
|
||||||
|
# sq_AL ISO-8859-1
|
||||||
|
# sq_AL.UTF-8 UTF-8
|
||||||
|
# sq_MK UTF-8
|
||||||
|
# sr_ME UTF-8
|
||||||
|
# sr_RS UTF-8
|
||||||
|
# sr_RS@latin UTF-8
|
||||||
|
# ss_ZA UTF-8
|
||||||
|
# st_ZA ISO-8859-1
|
||||||
|
# st_ZA.UTF-8 UTF-8
|
||||||
|
# sv_FI ISO-8859-1
|
||||||
|
# sv_FI.UTF-8 UTF-8
|
||||||
|
# sv_FI@euro ISO-8859-15
|
||||||
|
# sv_SE ISO-8859-1
|
||||||
|
# sv_SE.ISO-8859-15 ISO-8859-15
|
||||||
|
# sv_SE.UTF-8 UTF-8
|
||||||
|
# sw_KE UTF-8
|
||||||
|
# sw_TZ UTF-8
|
||||||
|
# szl_PL UTF-8
|
||||||
|
# ta_IN UTF-8
|
||||||
|
# ta_LK UTF-8
|
||||||
|
# tcy_IN.UTF-8 UTF-8
|
||||||
|
# te_IN UTF-8
|
||||||
|
# tg_TJ KOI8-T
|
||||||
|
# tg_TJ.UTF-8 UTF-8
|
||||||
|
# th_TH TIS-620
|
||||||
|
# th_TH.UTF-8 UTF-8
|
||||||
|
# the_NP UTF-8
|
||||||
|
# ti_ER UTF-8
|
||||||
|
# ti_ET UTF-8
|
||||||
|
# tig_ER UTF-8
|
||||||
|
# tk_TM UTF-8
|
||||||
|
# tl_PH ISO-8859-1
|
||||||
|
# tl_PH.UTF-8 UTF-8
|
||||||
|
# tn_ZA UTF-8
|
||||||
|
# tr_CY ISO-8859-9
|
||||||
|
# tr_CY.UTF-8 UTF-8
|
||||||
|
# tr_TR ISO-8859-9
|
||||||
|
# tr_TR.UTF-8 UTF-8
|
||||||
|
# ts_ZA UTF-8
|
||||||
|
# tt_RU UTF-8
|
||||||
|
# tt_RU@iqtelif UTF-8
|
||||||
|
# ug_CN UTF-8
|
||||||
|
# ug_CN@latin UTF-8
|
||||||
|
# uk_UA KOI8-U
|
||||||
|
# uk_UA.UTF-8 UTF-8
|
||||||
|
# unm_US UTF-8
|
||||||
|
# ur_IN UTF-8
|
||||||
|
# ur_PK UTF-8
|
||||||
|
# uz_UZ ISO-8859-1
|
||||||
|
# uz_UZ.UTF-8 UTF-8
|
||||||
|
# uz_UZ@cyrillic UTF-8
|
||||||
|
# ve_ZA UTF-8
|
||||||
|
# vi_VN UTF-8
|
||||||
|
# wa_BE ISO-8859-1
|
||||||
|
# wa_BE.UTF-8 UTF-8
|
||||||
|
# wa_BE@euro ISO-8859-15
|
||||||
|
# wae_CH UTF-8
|
||||||
|
# wal_ET UTF-8
|
||||||
|
# wo_SN UTF-8
|
||||||
|
# xh_ZA ISO-8859-1
|
||||||
|
# xh_ZA.UTF-8 UTF-8
|
||||||
|
# yi_US CP1255
|
||||||
|
# yi_US.UTF-8 UTF-8
|
||||||
|
# yo_NG UTF-8
|
||||||
|
# yue_HK UTF-8
|
||||||
|
# zh_CN GB2312
|
||||||
|
# zh_CN.GB18030 GB18030
|
||||||
|
# zh_CN.GBK GBK
|
||||||
|
# zh_CN.UTF-8 UTF-8
|
||||||
|
# zh_HK BIG5-HKSCS
|
||||||
|
# zh_HK.UTF-8 UTF-8
|
||||||
|
# zh_SG GB2312
|
||||||
|
# zh_SG.GBK GBK
|
||||||
|
# zh_SG.UTF-8 UTF-8
|
||||||
|
# zh_TW BIG5
|
||||||
|
# zh_TW.EUC-TW EUC-TW
|
||||||
|
# zh_TW.UTF-8 UTF-8
|
||||||
|
# zu_ZA ISO-8859-1
|
||||||
|
# zu_ZA.UTF-8 UTF-8
|
2
data/example-root/etc/profile
Normal file
2
data/example-root/etc/profile
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
# Global .profile -- add /sbin_1
|
||||||
|
PATH=$PATH:/sbin_1:/xbin
|
0
data/example-root/etc/sudoers.d/10-installer
Normal file
0
data/example-root/etc/sudoers.d/10-installer
Normal file
0
data/example-root/usr/share/zoneinfo/.dummy
Normal file
0
data/example-root/usr/share/zoneinfo/.dummy
Normal file
BIN
data/example-root/usr/share/zoneinfo/America/New_York
Normal file
BIN
data/example-root/usr/share/zoneinfo/America/New_York
Normal file
Binary file not shown.
BIN
data/example-root/usr/share/zoneinfo/UTC
Normal file
BIN
data/example-root/usr/share/zoneinfo/UTC
Normal file
Binary file not shown.
BIN
data/example-root/usr/share/zoneinfo/Zulu
Normal file
BIN
data/example-root/usr/share/zoneinfo/Zulu
Normal file
Binary file not shown.
0
data/example-root/var/lib/dbus/.dummy
Normal file
0
data/example-root/var/lib/dbus/.dummy
Normal file
0
data/example-root/var/lib/initramfs-tools
Normal file
0
data/example-root/var/lib/initramfs-tools
Normal file
1
data/example-root/xbin/linux-version
Executable file
1
data/example-root/xbin/linux-version
Executable file
@ -0,0 +1 @@
|
|||||||
|
#! /bin/true
|
1
data/example-root/xbin/useradd
Executable file
1
data/example-root/xbin/useradd
Executable file
@ -0,0 +1 @@
|
|||||||
|
#! /bin/true
|
@ -57,7 +57,13 @@ ModuleManager::ModuleManager( const QStringList& paths, QObject* parent )
|
|||||||
|
|
||||||
|
|
||||||
ModuleManager::~ModuleManager()
|
ModuleManager::~ModuleManager()
|
||||||
{}
|
{
|
||||||
|
// The map is populated with Module::fromDescriptor(), which allocates on the heap.
|
||||||
|
for( auto moduleptr : m_loadedModulesByInstanceKey )
|
||||||
|
{
|
||||||
|
delete moduleptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -65,8 +65,13 @@ def write_mkinitcpio_lines(hooks, modules, files, root_mount_point):
|
|||||||
:param files:
|
:param files:
|
||||||
:param root_mount_point:
|
:param root_mount_point:
|
||||||
"""
|
"""
|
||||||
with open("/etc/mkinitcpio.conf", "r") as mkinitcpio_file:
|
hostfile = "/etc/mkinitcpio.conf"
|
||||||
mklins = [x.strip() for x in mkinitcpio_file.readlines()]
|
try:
|
||||||
|
with open(hostfile, "r") as mkinitcpio_file:
|
||||||
|
mklins = [x.strip() for x in mkinitcpio_file.readlines()]
|
||||||
|
except FileNotFoundError:
|
||||||
|
libcalamares.utils.debug("Could not open host file '%s'" % hostfile)
|
||||||
|
mklins = []
|
||||||
|
|
||||||
for i in range(len(mklins)):
|
for i in range(len(mklins)):
|
||||||
if mklins[i].startswith("HOOKS"):
|
if mklins[i].startswith("HOOKS"):
|
||||||
|
@ -21,126 +21,324 @@
|
|||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with Calamares. If not, see <http://www.gnu.org/licenses/>.
|
# along with Calamares. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import abc
|
||||||
|
from string import Template
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
import libcalamares
|
import libcalamares
|
||||||
from libcalamares.utils import check_target_env_call, target_env_call
|
from libcalamares.utils import check_target_env_call, target_env_call
|
||||||
from string import Template
|
from libcalamares.utils import gettext_path, gettext_languages
|
||||||
|
|
||||||
|
import gettext
|
||||||
|
_translation = gettext.translation("calamares-python",
|
||||||
|
localedir=gettext_path(),
|
||||||
|
languages=gettext_languages(),
|
||||||
|
fallback=True)
|
||||||
|
_ = _translation.gettext
|
||||||
|
_n = _translation.ngettext
|
||||||
|
|
||||||
|
|
||||||
class PackageManager:
|
total_packages = 0 # For the entire job
|
||||||
|
completed_packages = 0 # Done so far for this job
|
||||||
|
group_packages = 0 # One group of packages from an -install or -remove entry
|
||||||
|
|
||||||
|
INSTALL = object()
|
||||||
|
REMOVE = object()
|
||||||
|
mode_packages = None # Changes to INSTALL or REMOVE
|
||||||
|
|
||||||
|
|
||||||
|
def _change_mode(mode):
|
||||||
|
global mode_packages
|
||||||
|
mode_packages = mode
|
||||||
|
libcalamares.job.setprogress(completed_packages * 1.0 / total_packages)
|
||||||
|
|
||||||
|
|
||||||
|
def pretty_name():
|
||||||
|
if not group_packages:
|
||||||
|
# Outside the context of an operation
|
||||||
|
s = _("Processing packages (%(count)d / %(total)d)")
|
||||||
|
elif mode_packages is INSTALL:
|
||||||
|
s = _n("Installing one package.",
|
||||||
|
"Installing %(num)d packages.", group_packages)
|
||||||
|
elif mode_packages is REMOVE:
|
||||||
|
s = _n("Removing one package.",
|
||||||
|
"Removing %(num)d packages.", group_packages)
|
||||||
|
else:
|
||||||
|
# No mode, generic description
|
||||||
|
s = _("Install packages.")
|
||||||
|
|
||||||
|
return s % {"num": group_packages,
|
||||||
|
"count": completed_packages,
|
||||||
|
"total": total_packages}
|
||||||
|
|
||||||
|
|
||||||
|
class PackageManager(metaclass=abc.ABCMeta):
|
||||||
"""
|
"""
|
||||||
Package manager class.
|
Package manager base class. A subclass implements package management
|
||||||
|
for a specific backend, and must have a class property `backend`
|
||||||
|
with the string identifier for that backend.
|
||||||
|
|
||||||
:param backend:
|
Subclasses are collected below to populate the list of possible
|
||||||
|
backends.
|
||||||
"""
|
"""
|
||||||
def __init__(self, backend):
|
backend = None
|
||||||
self.backend = backend
|
|
||||||
|
|
||||||
|
@abc.abstractmethod
|
||||||
def install(self, pkgs, from_local=False):
|
def install(self, pkgs, from_local=False):
|
||||||
""" Installs packages.
|
|
||||||
|
|
||||||
:param pkgs:
|
|
||||||
:param from_local:
|
|
||||||
"""
|
"""
|
||||||
if self.backend == "packagekit":
|
Install a list of packages (named) into the system.
|
||||||
for pkg in pkgs:
|
Although this handles lists, in practice it is called
|
||||||
check_target_env_call(["pkcon", "-py", "install", pkg])
|
with one package at a time.
|
||||||
elif self.backend == "zypp":
|
|
||||||
check_target_env_call(["zypper", "--non-interactive",
|
|
||||||
"--quiet-install", "install",
|
|
||||||
"--auto-agree-with-licenses",
|
|
||||||
"install"] + pkgs)
|
|
||||||
elif self.backend == "yum":
|
|
||||||
check_target_env_call(["yum", "install", "-y"] + pkgs)
|
|
||||||
elif self.backend == "dnf":
|
|
||||||
check_target_env_call(["dnf", "install", "-y"] + pkgs)
|
|
||||||
elif self.backend == "urpmi":
|
|
||||||
check_target_env_call(["urpmi", "--download-all", "--no-suggests",
|
|
||||||
"--no-verify-rpm", "--fastunsafe",
|
|
||||||
"--ignoresize", "--nolock",
|
|
||||||
"--auto"] + pkgs)
|
|
||||||
elif self.backend == "apt":
|
|
||||||
check_target_env_call(["apt-get", "-q", "-y", "install"] + pkgs)
|
|
||||||
elif self.backend == "pacman":
|
|
||||||
if from_local:
|
|
||||||
pacman_flags = "-U"
|
|
||||||
else:
|
|
||||||
pacman_flags = "-Sy"
|
|
||||||
|
|
||||||
check_target_env_call(["pacman", pacman_flags,
|
@param pkgs: list[str]
|
||||||
"--noconfirm"] + pkgs)
|
list of package names
|
||||||
elif self.backend == "portage":
|
@param from_local: bool
|
||||||
check_target_env_call(["emerge", "-v"] + pkgs)
|
if True, then these are local packages (on disk) and the
|
||||||
elif self.backend == "entropy":
|
pkgs names are paths.
|
||||||
check_target_env_call(["equo", "i"] + pkgs)
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
@abc.abstractmethod
|
||||||
def remove(self, pkgs):
|
def remove(self, pkgs):
|
||||||
""" Removes packages.
|
|
||||||
|
|
||||||
:param pkgs:
|
|
||||||
"""
|
"""
|
||||||
if self.backend == "packagekit":
|
Removes packages.
|
||||||
for pkg in pkgs:
|
|
||||||
check_target_env_call(["pkcon", "-py", "remove", pkg])
|
|
||||||
elif self.backend == "zypp":
|
|
||||||
check_target_env_call(["zypper", "--non-interactive",
|
|
||||||
"remove"] + pkgs)
|
|
||||||
elif self.backend == "yum":
|
|
||||||
check_target_env_call(["yum", "--disablerepo=*", "-C", "-y",
|
|
||||||
"remove"] + pkgs)
|
|
||||||
elif self.backend == "dnf":
|
|
||||||
# ignore the error code for now because dnf thinks removing a
|
|
||||||
# nonexistent package is an error
|
|
||||||
target_env_call(["dnf", "--disablerepo=*", "-C", "-y",
|
|
||||||
"remove"] + pkgs)
|
|
||||||
elif self.backend == "urpmi":
|
|
||||||
check_target_env_call(["urpme", "--auto"] + pkgs)
|
|
||||||
elif self.backend == "apt":
|
|
||||||
check_target_env_call(["apt-get", "--purge", "-q", "-y",
|
|
||||||
"remove"] + pkgs)
|
|
||||||
check_target_env_call(["apt-get", "--purge", "-q", "-y",
|
|
||||||
"autoremove"])
|
|
||||||
elif self.backend == "pacman":
|
|
||||||
check_target_env_call(["pacman", "-Rs", "--noconfirm"] + pkgs)
|
|
||||||
elif self.backend == "portage":
|
|
||||||
check_target_env_call(["emerge", "-C"] + pkgs)
|
|
||||||
check_target_env_call(["emerge", "--depclean", "-q"])
|
|
||||||
elif self.backend == "entropy":
|
|
||||||
check_target_env_call(["equo", "rm"] + pkgs)
|
|
||||||
|
|
||||||
|
@param pkgs: list[str]
|
||||||
|
list of package names
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
@abc.abstractmethod
|
||||||
def update_db(self):
|
def update_db(self):
|
||||||
if self.backend == "packagekit":
|
pass
|
||||||
check_target_env_call(["pkcon", "refresh"])
|
|
||||||
elif self.backend == "zypp":
|
|
||||||
check_target_env_call(["zypper", "--non-interactive", "update"])
|
|
||||||
elif self.backend == "urpmi":
|
|
||||||
check_target_env_call(["urpmi.update", "-a"])
|
|
||||||
elif self.backend == "apt":
|
|
||||||
check_target_env_call(["apt-get", "update"])
|
|
||||||
elif self.backend == "pacman":
|
|
||||||
check_target_env_call(["pacman", "-Sy"])
|
|
||||||
elif self.backend == "portage":
|
|
||||||
check_target_env_call(["emerge", "--sync"])
|
|
||||||
elif self.backend == "entropy":
|
|
||||||
check_target_env_call(["equo", "update"])
|
|
||||||
|
|
||||||
def run(self, script):
|
def run(self, script):
|
||||||
if script != "":
|
if script != "":
|
||||||
check_target_env_call(script.split(" "))
|
check_target_env_call(script.split(" "))
|
||||||
|
|
||||||
|
def install_package(self, packagedata, from_local=False):
|
||||||
|
"""
|
||||||
|
Install a package from a single entry in the install list.
|
||||||
|
This can be either a single package name, or an object
|
||||||
|
with pre- and post-scripts.
|
||||||
|
|
||||||
def subst_locale(list):
|
@param packagedata: str|dict
|
||||||
ret = []
|
@param from_local: bool
|
||||||
|
see install.from_local
|
||||||
|
"""
|
||||||
|
if isinstance(packagedata, str):
|
||||||
|
self.install([packagedata], from_local=from_local)
|
||||||
|
else:
|
||||||
|
self.run(packagedata["pre-script"])
|
||||||
|
self.install([packagedata["package"]], from_local=from_local)
|
||||||
|
self.run(packagedata["post-script"])
|
||||||
|
|
||||||
|
|
||||||
|
class PMPackageKit(PackageManager):
|
||||||
|
backend = "packagekit"
|
||||||
|
|
||||||
|
def install(self, pkgs, from_local=False):
|
||||||
|
for pkg in pkgs:
|
||||||
|
check_target_env_call(["pkcon", "-py", "install", pkg])
|
||||||
|
|
||||||
|
def remove(self, pkgs):
|
||||||
|
for pkg in pkgs:
|
||||||
|
check_target_env_call(["pkcon", "-py", "remove", pkg])
|
||||||
|
|
||||||
|
def update_db(self):
|
||||||
|
check_target_env_call(["pkcon", "refresh"])
|
||||||
|
|
||||||
|
|
||||||
|
class PMZypp(PackageManager):
|
||||||
|
backend = "zypp"
|
||||||
|
|
||||||
|
def install(self, pkgs, from_local=False):
|
||||||
|
check_target_env_call(["zypper", "--non-interactive",
|
||||||
|
"--quiet-install", "install",
|
||||||
|
"--auto-agree-with-licenses",
|
||||||
|
"install"] + pkgs)
|
||||||
|
|
||||||
|
def remove(self, pkgs):
|
||||||
|
check_target_env_call(["zypper", "--non-interactive",
|
||||||
|
"remove"] + pkgs)
|
||||||
|
|
||||||
|
def update_db(self):
|
||||||
|
check_target_env_call(["zypper", "--non-interactive", "update"])
|
||||||
|
|
||||||
|
|
||||||
|
class PMYum(PackageManager):
|
||||||
|
backend = "yum"
|
||||||
|
|
||||||
|
def install(self, pkgs, from_local=False):
|
||||||
|
check_target_env_call(["yum", "install", "-y"] + pkgs)
|
||||||
|
|
||||||
|
def remove(self, pkgs):
|
||||||
|
check_target_env_call(["yum", "--disablerepo=*", "-C", "-y",
|
||||||
|
"remove"] + pkgs)
|
||||||
|
|
||||||
|
def update_db(self):
|
||||||
|
# Doesn't need updates
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class PMDnf(PackageManager):
|
||||||
|
backend = "dnf"
|
||||||
|
|
||||||
|
def install(self, pkgs, from_local=False):
|
||||||
|
check_target_env_call(["dnf", "install", "-y"] + pkgs)
|
||||||
|
|
||||||
|
def remove(self, pkgs):
|
||||||
|
# ignore the error code for now because dnf thinks removing a
|
||||||
|
# nonexistent package is an error
|
||||||
|
target_env_call(["dnf", "--disablerepo=*", "-C", "-y",
|
||||||
|
"remove"] + pkgs)
|
||||||
|
|
||||||
|
def update_db(self):
|
||||||
|
# Doesn't need to update explicitly
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class PMUrpmi(PackageManager):
|
||||||
|
backend = "urpmi"
|
||||||
|
|
||||||
|
def install(self, pkgs, from_local=False):
|
||||||
|
check_target_env_call(["urpmi", "--download-all", "--no-suggests",
|
||||||
|
"--no-verify-rpm", "--fastunsafe",
|
||||||
|
"--ignoresize", "--nolock",
|
||||||
|
"--auto"] + pkgs)
|
||||||
|
|
||||||
|
def remove(self, pkgs):
|
||||||
|
check_target_env_call(["urpme", "--auto"] + pkgs)
|
||||||
|
|
||||||
|
def update_db(self):
|
||||||
|
check_target_env_call(["urpmi.update", "-a"])
|
||||||
|
|
||||||
|
|
||||||
|
class PMApt(PackageManager):
|
||||||
|
backend = "apt"
|
||||||
|
|
||||||
|
def install(self, pkgs, from_local=False):
|
||||||
|
check_target_env_call(["apt-get", "-q", "-y", "install"] + pkgs)
|
||||||
|
|
||||||
|
def remove(self, pkgs):
|
||||||
|
check_target_env_call(["apt-get", "--purge", "-q", "-y",
|
||||||
|
"remove"] + pkgs)
|
||||||
|
check_target_env_call(["apt-get", "--purge", "-q", "-y",
|
||||||
|
"autoremove"])
|
||||||
|
|
||||||
|
def update_db(self):
|
||||||
|
check_target_env_call(["apt-get", "update"])
|
||||||
|
|
||||||
|
|
||||||
|
class PMPacman(PackageManager):
|
||||||
|
backend = "pacman"
|
||||||
|
|
||||||
|
def install(self, pkgs, from_local=False):
|
||||||
|
if from_local:
|
||||||
|
pacman_flags = "-U"
|
||||||
|
else:
|
||||||
|
pacman_flags = "-Sy"
|
||||||
|
|
||||||
|
check_target_env_call(["pacman", pacman_flags,
|
||||||
|
"--noconfirm"] + pkgs)
|
||||||
|
|
||||||
|
def remove(self, pkgs):
|
||||||
|
check_target_env_call(["pacman", "-Rs", "--noconfirm"] + pkgs)
|
||||||
|
|
||||||
|
def update_db(self):
|
||||||
|
check_target_env_call(["pacman", "-Sy"])
|
||||||
|
|
||||||
|
|
||||||
|
class PMPortage(PackageManager):
|
||||||
|
backend = "portage"
|
||||||
|
|
||||||
|
def install(self, pkgs, from_local=False):
|
||||||
|
check_target_env_call(["emerge", "-v"] + pkgs)
|
||||||
|
|
||||||
|
def remove(self, pkgs):
|
||||||
|
check_target_env_call(["emerge", "-C"] + pkgs)
|
||||||
|
check_target_env_call(["emerge", "--depclean", "-q"])
|
||||||
|
|
||||||
|
def update_db(self):
|
||||||
|
check_target_env_call(["emerge", "--sync"])
|
||||||
|
|
||||||
|
|
||||||
|
class PMEntropy(PackageManager):
|
||||||
|
backend = "entropy"
|
||||||
|
|
||||||
|
def install(self, pkgs, from_local=False):
|
||||||
|
check_target_env_call(["equo", "i"] + pkgs)
|
||||||
|
|
||||||
|
def remove(self, pkgs):
|
||||||
|
check_target_env_call(["equo", "rm"] + pkgs)
|
||||||
|
|
||||||
|
def update_db(self):
|
||||||
|
check_target_env_call(["equo", "update"])
|
||||||
|
|
||||||
|
|
||||||
|
class PMDummy(PackageManager):
|
||||||
|
backend = "dummy"
|
||||||
|
|
||||||
|
def install(self, pkgs, from_local=False):
|
||||||
|
libcalamares.utils.debug("Installing " + str(pkgs))
|
||||||
|
|
||||||
|
def remove(self, pkgs):
|
||||||
|
libcalamares.utils.debug("Removing " + str(pkgs))
|
||||||
|
|
||||||
|
def update_db(self):
|
||||||
|
libcalamares.utils.debug("Updating DB")
|
||||||
|
|
||||||
|
def run(self, script):
|
||||||
|
libcalamares.utils.debug("Running script '" + str(script) + "'")
|
||||||
|
|
||||||
|
|
||||||
|
# Collect all the subclasses of PackageManager defined above,
|
||||||
|
# and index them based on the backend property of each class.
|
||||||
|
backend_managers = [
|
||||||
|
(c.backend, c)
|
||||||
|
for c in globals().values()
|
||||||
|
if type(c) is abc.ABCMeta and issubclass(c, PackageManager) and c.backend]
|
||||||
|
|
||||||
|
|
||||||
|
def subst_locale(plist):
|
||||||
|
"""
|
||||||
|
Returns a locale-aware list of packages, based on @p plist.
|
||||||
|
Package names that contain LOCALE are localized with the
|
||||||
|
BCP47 name of the chosen system locale; if the system
|
||||||
|
locale is 'en' (e.g. English, US) then these localized
|
||||||
|
packages are dropped from the list.
|
||||||
|
|
||||||
|
@param plist: list[str|dict]
|
||||||
|
Candidate packages to install.
|
||||||
|
@return: list[str|dict]
|
||||||
|
"""
|
||||||
locale = libcalamares.globalstorage.value("locale")
|
locale = libcalamares.globalstorage.value("locale")
|
||||||
if locale:
|
if not locale:
|
||||||
for e in list:
|
return plist
|
||||||
if locale != "en":
|
|
||||||
entry = Template(e)
|
ret = []
|
||||||
ret.append(entry.safe_substitute(LOCALE=locale))
|
for packagedata in plist:
|
||||||
elif 'LOCALE' not in e:
|
if isinstance(packagedata, str):
|
||||||
ret.append(e)
|
packagename = packagedata
|
||||||
else:
|
else:
|
||||||
ret = list
|
packagename = packagedata["package"]
|
||||||
|
|
||||||
|
# Update packagename: substitute LOCALE, and drop packages
|
||||||
|
# if locale is en and LOCALE is in the package name.
|
||||||
|
if locale != "en":
|
||||||
|
packagename = Template(packagename).safe_substitute(LOCALE=locale)
|
||||||
|
elif 'LOCALE' in packagename:
|
||||||
|
packagename = None
|
||||||
|
|
||||||
|
if packagename is not None:
|
||||||
|
# Put it back in packagedata
|
||||||
|
if isinstance(packagedata, str):
|
||||||
|
packagedata = packagename
|
||||||
|
else:
|
||||||
|
packagedata["package"] = packagename
|
||||||
|
|
||||||
|
ret.append(packagedata)
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
|
||||||
@ -151,39 +349,34 @@ def run_operations(pkgman, entry):
|
|||||||
:param pkgman:
|
:param pkgman:
|
||||||
:param entry:
|
:param entry:
|
||||||
"""
|
"""
|
||||||
|
global group_packages, completed_packages, mode_packages
|
||||||
|
|
||||||
for key in entry.keys():
|
for key in entry.keys():
|
||||||
entry[key] = subst_locale(entry[key])
|
entry[key] = subst_locale(entry[key])
|
||||||
|
group_packages = len(entry[key])
|
||||||
if key == "install":
|
if key == "install":
|
||||||
if isinstance(entry[key], list):
|
_change_mode(INSTALL)
|
||||||
for package in entry[key]:
|
if all([isinstance(x, str) for x in entry[key]]):
|
||||||
pkgman.run(package["pre-script"])
|
|
||||||
pkgman.install([package["package"]])
|
|
||||||
pkgman.run(package["post-script"])
|
|
||||||
else:
|
|
||||||
pkgman.install(entry[key])
|
pkgman.install(entry[key])
|
||||||
|
else:
|
||||||
|
for package in entry[key]:
|
||||||
|
pkgman.install_package(package)
|
||||||
elif key == "try_install":
|
elif key == "try_install":
|
||||||
|
_change_mode(INSTALL)
|
||||||
# we make a separate package manager call for each package so a
|
# we make a separate package manager call for each package so a
|
||||||
# single failing package won't stop all of them
|
# single failing package won't stop all of them
|
||||||
for package in entry[key]:
|
for package in entry[key]:
|
||||||
if isinstance(package, str):
|
try:
|
||||||
try:
|
pkgman.install_package(package)
|
||||||
pkgman.install([package])
|
except subprocess.CalledProcessError:
|
||||||
except subprocess.CalledProcessError:
|
warn_text = "WARNING: could not install package "
|
||||||
warn_text = "WARNING: could not install package "
|
warn_text += str(package)
|
||||||
warn_text += package
|
libcalamares.utils.debug(warn_text)
|
||||||
libcalamares.utils.debug(warn_text)
|
|
||||||
else:
|
|
||||||
try:
|
|
||||||
pkgman.run(package["pre-script"])
|
|
||||||
pkgman.install([package["package"]])
|
|
||||||
pkgman.run(package["post-script"])
|
|
||||||
except subprocess.CalledProcessError:
|
|
||||||
warn_text = "WARNING: could not install packages "
|
|
||||||
warn_text += package["package"]
|
|
||||||
libcalamares.utils.debug(warn_text)
|
|
||||||
elif key == "remove":
|
elif key == "remove":
|
||||||
|
_change_mode(REMOVE)
|
||||||
pkgman.remove(entry[key])
|
pkgman.remove(entry[key])
|
||||||
elif key == "try_remove":
|
elif key == "try_remove":
|
||||||
|
_change_mode(REMOVE)
|
||||||
for package in entry[key]:
|
for package in entry[key]:
|
||||||
try:
|
try:
|
||||||
pkgman.remove([package])
|
pkgman.remove([package])
|
||||||
@ -192,8 +385,16 @@ def run_operations(pkgman, entry):
|
|||||||
warn_text += package
|
warn_text += package
|
||||||
libcalamares.utils.debug(warn_text)
|
libcalamares.utils.debug(warn_text)
|
||||||
elif key == "localInstall":
|
elif key == "localInstall":
|
||||||
|
_change_mode(INSTALL)
|
||||||
pkgman.install(entry[key], from_local=True)
|
pkgman.install(entry[key], from_local=True)
|
||||||
|
|
||||||
|
completed_packages += len(entry[key])
|
||||||
|
libcalamares.job.setprogress(completed_packages * 1.0 / total_packages)
|
||||||
|
libcalamares.utils.debug(pretty_name())
|
||||||
|
|
||||||
|
group_packages = 0
|
||||||
|
_change_mode(None)
|
||||||
|
|
||||||
|
|
||||||
def run():
|
def run():
|
||||||
"""
|
"""
|
||||||
@ -202,24 +403,44 @@ def run():
|
|||||||
|
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
|
global mode_packages, total_packages, completed_packages, group_packages
|
||||||
|
|
||||||
backend = libcalamares.job.configuration.get("backend")
|
backend = libcalamares.job.configuration.get("backend")
|
||||||
|
|
||||||
if backend not in ("packagekit", "zypp", "yum", "dnf", "urpmi", "apt",
|
for identifier, impl in backend_managers:
|
||||||
"pacman", "portage", "entropy"):
|
if identifier == backend:
|
||||||
|
pkgman = impl()
|
||||||
|
break
|
||||||
|
else:
|
||||||
return "Bad backend", "backend=\"{}\"".format(backend)
|
return "Bad backend", "backend=\"{}\"".format(backend)
|
||||||
|
|
||||||
pkgman = PackageManager(backend)
|
|
||||||
operations = libcalamares.job.configuration.get("operations", [])
|
|
||||||
|
|
||||||
update_db = libcalamares.job.configuration.get("update_db", False)
|
update_db = libcalamares.job.configuration.get("update_db", False)
|
||||||
if update_db and libcalamares.globalstorage.value("hasInternet"):
|
if update_db and libcalamares.globalstorage.value("hasInternet"):
|
||||||
pkgman.update_db()
|
pkgman.update_db()
|
||||||
|
|
||||||
|
operations = libcalamares.job.configuration.get("operations", [])
|
||||||
|
if libcalamares.globalstorage.contains("packageOperations"):
|
||||||
|
operations += libcalamares.globalstorage.value("packageOperations")
|
||||||
|
|
||||||
|
mode_packages = None
|
||||||
|
total_packages = 0
|
||||||
|
completed_packages = 0
|
||||||
|
for op in operations:
|
||||||
|
for packagelist in op.values():
|
||||||
|
total_packages += len(packagelist)
|
||||||
|
|
||||||
|
if not total_packages:
|
||||||
|
# Avoids potential divide-by-zero in progress reporting
|
||||||
|
return None
|
||||||
|
|
||||||
for entry in operations:
|
for entry in operations:
|
||||||
|
group_packages = 0
|
||||||
|
libcalamares.utils.debug(pretty_name())
|
||||||
run_operations(pkgman, entry)
|
run_operations(pkgman, entry)
|
||||||
|
|
||||||
if libcalamares.globalstorage.contains("packageOperations"):
|
mode_packages = None
|
||||||
run_operations(pkgman,
|
|
||||||
libcalamares.globalstorage.value("packageOperations"))
|
libcalamares.job.setprogress(1.0)
|
||||||
|
libcalamares.utils.debug(pretty_name())
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
@ -8,11 +8,15 @@
|
|||||||
# - urpmi - Mandriva package manager
|
# - urpmi - Mandriva package manager
|
||||||
# - apt - APT frontend for DEB and RPM
|
# - apt - APT frontend for DEB and RPM
|
||||||
# - pacman - Pacman
|
# - pacman - Pacman
|
||||||
# - portage - Gentoo package manager
|
# - portage - Gentoo package manager
|
||||||
# - entropy - Sabayon package manager
|
# - entropy - Sabayon package manager
|
||||||
|
# - dummy - Dummy manager, only logs
|
||||||
#
|
#
|
||||||
backend: packagekit
|
backend: dummy
|
||||||
|
|
||||||
|
# If set to true, a package-manager specific update procedure
|
||||||
|
# is run first (only if there is internet) to update the list
|
||||||
|
# of packages and dependencies.
|
||||||
update_db: true
|
update_db: true
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -29,20 +33,90 @@ update_db: true
|
|||||||
# storage called "packageOperations" and it is processed
|
# storage called "packageOperations" and it is processed
|
||||||
# after the static list in the job configuration.
|
# after the static list in the job configuration.
|
||||||
#
|
#
|
||||||
#operations:
|
# Allowed package operations are:
|
||||||
# - install:
|
# - install, try_install: will call the package manager to
|
||||||
# - pkg1
|
# install one or more packages. The install target will
|
||||||
# - pkg2
|
# abort the whole installation if package-installation
|
||||||
# - remove:
|
# fails, while try_install carries on. Packages may be
|
||||||
# - pkg3
|
# listed as (localized) names, or as (localized) package-data.
|
||||||
# - pkg4
|
# See below for the description of the format.
|
||||||
# - try_install: # no system install failure if a package cannot be installed
|
# - localInstall: this is used to call the package manager
|
||||||
# - pkg5
|
# to install a package from a path-to-a-package. This is
|
||||||
# - try_remove: # no system install failure if a package cannot be removed
|
# useful if you have a static package archive on the install media.
|
||||||
# - pkg2
|
# - remove, try_remove: will call the package manager to
|
||||||
# - pkg1
|
# remove one or more packages. The remove target will
|
||||||
# - install:
|
# abort the whole installation if package-removal fails,
|
||||||
# - pkgs6
|
# while try_remove carries on. Packages may be listed as
|
||||||
# - pkg7
|
# (localized) names.
|
||||||
# - localInstall:
|
#
|
||||||
# - /path/to/pkg8
|
# There are two formats for naming packages: as a name # or as package-data,
|
||||||
|
# which is an object notation providing package-name, as well as pre- and
|
||||||
|
# post-install scripts.
|
||||||
|
#
|
||||||
|
# Here are both formats, for installing vi. The first one just names the
|
||||||
|
# package for vi (using the naming of the installed package manager), while
|
||||||
|
# the second contains three data-items; the pre-script is run before invoking
|
||||||
|
# the package manager, and the post-script runs once it is done.
|
||||||
|
#
|
||||||
|
# - install
|
||||||
|
# - vi
|
||||||
|
# - package: vi
|
||||||
|
# pre-script: touch /tmp/installing-vi
|
||||||
|
# post-script: rm -f /tmp/installing-vi
|
||||||
|
#
|
||||||
|
# The pre- and post-scripts are optional, but not both optional: using
|
||||||
|
# "package: vi" with neither script option will trick Calamares into
|
||||||
|
# trying to install a package named "package: vi", which is unlikely to work.
|
||||||
|
#
|
||||||
|
# Any package name may be localized; this is used to install localization
|
||||||
|
# packages for software based on the selected system locale. By including
|
||||||
|
# the string LOCALE in the package name, the following happens:
|
||||||
|
#
|
||||||
|
# - if the system locale is English (generally US English; en_GB is a valid
|
||||||
|
# localization), then the package is not installed at all,
|
||||||
|
# - otherwise LOCALE is replaced by the Bcp47 name of the selected system
|
||||||
|
# locale, e.g. nl_BE.
|
||||||
|
#
|
||||||
|
# The following installs localizations for vi, if they are relevant; if
|
||||||
|
# there is no localization, installation continues normally.
|
||||||
|
#
|
||||||
|
# - install
|
||||||
|
# - vi-LOCALE
|
||||||
|
# - package: vi-LOCALE
|
||||||
|
# pre-script: touch /tmp/installing-vi
|
||||||
|
# post-script: rm -f /tmp/installing-vi
|
||||||
|
#
|
||||||
|
# When installing packages, Calamares will invoke the package manager
|
||||||
|
# with a list of package names if it can; package-data prevents this because
|
||||||
|
# of the scripts that need to run. In other words, this:
|
||||||
|
#
|
||||||
|
# - install:
|
||||||
|
# - vi
|
||||||
|
# - binutils
|
||||||
|
# - package: wget
|
||||||
|
# pre-script: touch /tmp/installing-wget
|
||||||
|
#
|
||||||
|
# This will invoke the package manager three times, once for each package,
|
||||||
|
# because not all of them are simple package names. You can speed up the
|
||||||
|
# process if you have only a few pre-scriots, by using multiple install targets:
|
||||||
|
#
|
||||||
|
# - install:
|
||||||
|
# - vi
|
||||||
|
# - binutils
|
||||||
|
# - install:
|
||||||
|
# - package: wget
|
||||||
|
# pre-script: touch /tmp/installing-wget
|
||||||
|
#
|
||||||
|
# This will call the package manager once with the package-names "vi" and
|
||||||
|
# "binutils", and then a second time for "wget". When installing large numbers
|
||||||
|
# of packages, this can lead to a considerable time savings.
|
||||||
|
#
|
||||||
|
operations:
|
||||||
|
- install:
|
||||||
|
- vi
|
||||||
|
- wget
|
||||||
|
- binutils
|
||||||
|
- remove:
|
||||||
|
- vi
|
||||||
|
- wget
|
||||||
|
- binutils
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
|
backend: dummy
|
||||||
rootMountPoint: /tmp/mount
|
rootMountPoint: /tmp/mount
|
||||||
packageOperations:
|
operations:
|
||||||
- install:
|
- install:
|
||||||
- pre-script: touch /tmp/foo
|
- pre-script: touch /tmp/foo
|
||||||
package: vi
|
package: vi
|
||||||
post-script: rm /tmp/foo
|
post-script: rm /tmp/foo
|
||||||
- wget
|
- wget
|
||||||
|
- binutils
|
||||||
- remove:
|
- remove:
|
||||||
- vi
|
- vi
|
||||||
- wget
|
- wget
|
||||||
|
@ -106,12 +106,22 @@ operator <<( QDebug& s, QList< Device* >::iterator& it )
|
|||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
using DeviceList = QList< Device* >;
|
||||||
|
|
||||||
|
static inline DeviceList::iterator
|
||||||
|
erase(DeviceList& l, DeviceList::iterator& it)
|
||||||
|
{
|
||||||
|
Device* p = *it;
|
||||||
|
auto r = l.erase( it );
|
||||||
|
if (p)
|
||||||
|
delete p;
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
QList< Device* > getDevices( DeviceType which, qint64 minimumSize )
|
QList< Device* > getDevices( DeviceType which, qint64 minimumSize )
|
||||||
{
|
{
|
||||||
bool writableOnly = (which == DeviceType::WritableOnly);
|
bool writableOnly = (which == DeviceType::WritableOnly);
|
||||||
|
|
||||||
using DeviceList = QList< Device* >;
|
|
||||||
|
|
||||||
CoreBackend* backend = CoreBackendManager::self()->backend();
|
CoreBackend* backend = CoreBackendManager::self()->backend();
|
||||||
DeviceList devices = backend->scanDevices( true );
|
DeviceList devices = backend->scanDevices( true );
|
||||||
|
|
||||||
@ -123,8 +133,8 @@ QList< Device* > getDevices( DeviceType which, qint64 minimumSize )
|
|||||||
( *it )->deviceNode().startsWith( "/dev/zram" )
|
( *it )->deviceNode().startsWith( "/dev/zram" )
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
cDebug() << " .. Removing" << it;
|
cDebug() << " .. Removing zram" << it;
|
||||||
it = devices.erase( it );
|
it = erase(devices, it );
|
||||||
|
|
||||||
}
|
}
|
||||||
else if ( writableOnly && (
|
else if ( writableOnly && (
|
||||||
@ -132,13 +142,13 @@ QList< Device* > getDevices( DeviceType which, qint64 minimumSize )
|
|||||||
isIso9660( *it ) )
|
isIso9660( *it ) )
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
cDebug() << " .. Removing" << it;
|
cDebug() << " .. Removing root-or-CD" << it;
|
||||||
it = devices.erase( it );
|
it = erase(devices, it );
|
||||||
}
|
}
|
||||||
else if ( (minimumSize >= 0) && !( (*it)->capacity() > minimumSize ) )
|
else if ( (minimumSize >= 0) && !( (*it)->capacity() > minimumSize ) )
|
||||||
{
|
{
|
||||||
cDebug() << " .. Removing too-small" << it;
|
cDebug() << " .. Removing too-small" << it;
|
||||||
it = devices.erase( it );
|
it = erase(devices, it );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
++it;
|
++it;
|
||||||
|
@ -122,6 +122,7 @@ PartitionCoreModule::doInit()
|
|||||||
cDebug() << "node\tcapacity\tname\tprettyName";
|
cDebug() << "node\tcapacity\tname\tprettyName";
|
||||||
for ( auto device : devices )
|
for ( auto device : devices )
|
||||||
{
|
{
|
||||||
|
// Gives ownership of the Device* to the DeviceInfo object
|
||||||
auto deviceInfo = new DeviceInfo( device );
|
auto deviceInfo = new DeviceInfo( device );
|
||||||
m_deviceInfos << deviceInfo;
|
m_deviceInfos << deviceInfo;
|
||||||
cDebug() << device->deviceNode() << device->capacity() << device->name() << device->prettyName();
|
cDebug() << device->deviceNode() << device->capacity() << device->name() << device->prettyName();
|
||||||
|
@ -33,6 +33,7 @@ DeviceInfoWidget::DeviceInfoWidget( QWidget* parent )
|
|||||||
: QWidget( parent )
|
: QWidget( parent )
|
||||||
, m_ptIcon( new QLabel )
|
, m_ptIcon( new QLabel )
|
||||||
, m_ptLabel( new QLabel )
|
, m_ptLabel( new QLabel )
|
||||||
|
, m_tableType( PartitionTable::unknownTableType )
|
||||||
{
|
{
|
||||||
QHBoxLayout* mainLayout = new QHBoxLayout;
|
QHBoxLayout* mainLayout = new QHBoxLayout;
|
||||||
setLayout( mainLayout );
|
setLayout( mainLayout );
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
|
|
||||||
EncryptWidget::EncryptWidget( QWidget* parent )
|
EncryptWidget::EncryptWidget( QWidget* parent )
|
||||||
: QWidget( parent )
|
: QWidget( parent )
|
||||||
|
, m_state( EncryptionDisabled )
|
||||||
{
|
{
|
||||||
setupUi( this );
|
setupUi( this );
|
||||||
|
|
||||||
|
@ -88,6 +88,7 @@ def main():
|
|||||||
libcalamares.globalstorage = libcalamares.GlobalStorage(None)
|
libcalamares.globalstorage = libcalamares.GlobalStorage(None)
|
||||||
libcalamares.globalstorage.insert("testing", True)
|
libcalamares.globalstorage.insert("testing", True)
|
||||||
if args.lang:
|
if args.lang:
|
||||||
|
libcalamares.globalstorage.insert("locale", args.lang)
|
||||||
libcalamares.globalstorage.insert("localeConf", {"LANG": args.lang})
|
libcalamares.globalstorage.insert("localeConf", {"LANG": args.lang})
|
||||||
|
|
||||||
# if a file for simulating globalStorage contents is provided, load it
|
# if a file for simulating globalStorage contents is provided, load it
|
||||||
|
@ -13,12 +13,28 @@ unpack:
|
|||||||
# Each list item is unpacked, in order, to the target system.
|
# Each list item is unpacked, in order, to the target system.
|
||||||
# Each list item has the following attributes:
|
# Each list item has the following attributes:
|
||||||
# source: path relative to the live / intstalling system to the image
|
# source: path relative to the live / intstalling system to the image
|
||||||
# sourcefs: ext4 or squashfs (may be others if mount supports is)
|
# sourcefs: ext4 or squashfs (may be others if mount supports it)
|
||||||
# destination: path relative to rootMountPoint (so in the target
|
# destination: path relative to rootMountPoint (so in the target
|
||||||
# system) where this filesystem is unpacked.
|
# system) where this filesystem is unpacked.
|
||||||
|
|
||||||
|
# Usually you list a filesystem image to unpack; you can use
|
||||||
|
# squashfs or an ext4 image.
|
||||||
|
#
|
||||||
|
# - source: "/path/to/filesystem.sqfs"
|
||||||
|
# sourcefs: "squashfs"
|
||||||
|
# destination: ""
|
||||||
|
|
||||||
|
# You can list more than one filesystem.
|
||||||
|
#
|
||||||
|
# - source: "/path/to/another/filesystem.img"
|
||||||
|
# sourcefs: "ext4"
|
||||||
|
# destination: ""
|
||||||
|
#
|
||||||
|
|
||||||
|
# You can list filesystem source paths relative to the Calamares run
|
||||||
|
# directory, if you use -d (this is only useful for testing, though).
|
||||||
- source: "_root-image_"
|
- source: "_root-image_"
|
||||||
sourcefs: "squashfs"
|
sourcefs: "squashfs"
|
||||||
destination: ""
|
destination: ""
|
||||||
- source: "_desktop-image_"
|
- source: "_desktop-image_"
|
||||||
sourcefs: "squashfs"
|
sourcefs: "squashfs"
|
||||||
destination: ""
|
|
||||||
|
@ -112,7 +112,7 @@ process_device(PedDevice *dev)
|
|||||||
int
|
int
|
||||||
check_big_enough(long long required_space)
|
check_big_enough(long long required_space)
|
||||||
{
|
{
|
||||||
PedDevice *dev;
|
PedDevice *dev = NULL;
|
||||||
ped_exception_fetch_all();
|
ped_exception_fetch_all();
|
||||||
ped_device_probe_all();
|
ped_device_probe_all();
|
||||||
|
|
||||||
@ -126,7 +126,15 @@ check_big_enough(long long required_space)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ped_device_free_all();
|
|
||||||
|
// We would free the devices to release allocated memory,
|
||||||
|
// but other modules might be using partman use well,
|
||||||
|
// and they can hold pointers to libparted structures in
|
||||||
|
// other threads.
|
||||||
|
//
|
||||||
|
// So prefer to leak memory, instead.
|
||||||
|
//
|
||||||
|
// ped_device_free_all();
|
||||||
|
|
||||||
return big_enough;
|
return big_enough;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user