milis/lfs-mekanizma

1309 lines
33 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
VERSION="1.0"
ANADIZIN="`pwd`"
TALIMATNAMELER="talimatname"
DERLEME_SIRASI="derleme.sira"
PAKETCI="mpsd"
TALIMATNAME=""
LOG_DIZIN="log"
AYARLAR="ayarlar"
PAKETCI_AYAR="mpsd.conf"
INSTALL_COMMAND="`basename $0`"
readonly CODE_NAME="malfs"
birinci_ayarlar(){
root_kontrol
lfs_kontrol
#lfs dizinin olusturulması
mkdir -p $LFS
#lfs kullanici-grup silme sıfırlama
userdel lfs
rm -r /home/lfs
groupdel lfs
#lfs kullanici-grup olusturma
groupadd lfs
useradd -s /bin/bash -g lfs -m -k /dev/null lfs
passwd lfs
#lfs icin gerekli dizin ve izinlerinin olusturulması
mkdir -p /home/lfs
mkdir -vp $LFS/{sources,tools}
ln -svf $LFS/tools /
ln -svf $LFS/sources /
chown -v lfs $LFS/{tools,sources}
chmod -v a+wt $LFS/sources
chown -v lfs $LFS
cp -a $ANADIZIN/ayarlar /home/lfs/
cp -a $ANADIZIN/bin /home/lfs/
cp -a $ANADIZIN/talimatname /home/lfs/
cp -a $ANADIZIN/lfs-mekanizma /home/lfs/
chown -R lfs:lfs /home/lfs/
cp ayarlar/.bashrc /home/lfs/
cp ayarlar/.bash_profile /home/lfs/
su - lfs
}
paket_kur(){
$PAKETCI -d -cf $ANADIZIN/$AYARLAR/$PAKETCI_AYAR -i || exit 1
for i in *mps*
do
echo "=======> '$i' basarili sekilde kuruldu." >> $ANADIZIN/$LOG_DIZIN/$talimat.log
done
}
talimatname_derle(){
#dongu icerisinde talimatların derlenmesi
if [ "$TALIMATNAME" == "onsistem" ]; then
PAKETCI_AYAR="onmpsd.conf"
fi
if [ ! -d $ANADIZIN/$LOG_DIZIN ]; then
mkdir -p $ANADIZIN/$LOG_DIZIN
fi
for dizin in `cat $ANADIZIN/$TALIMATNAMELER/$TALIMATNAME/$DERLEME_SIRASI`
do
talimat=`basename $dizin`
derleme="evet"
if [ -f $ANADIZIN/$LOG_DIZIN/$talimat.log ]; then
derleme=`grep -q "basarili" $ANADIZIN/$LOG_DIZIN/$talimat.log; [ $? -eq 0 ] && echo "hayir" || echo "evet"`
fi
if [ "$derleme" == "evet" ]; then
cd $ANADIZIN/$TALIMATNAMELER/$TALIMATNAME/$dizin
touch $ANADIZIN/$LOG_DIZIN/$talimat.log
$PAKETCI -d -cf $ANADIZIN/$AYARLAR/$PAKETCI_AYAR -kw 2>&1|tee $ANADIZIN/$LOG_DIZIN/$talimat.log || exit 1
case $talimat in
gcc)
rm -fv /usr/lib{,64}/libgcc_s.so{,.1}
rm -fv /usr/lib{,64}/libstdc++.so{,.6}
rm -fv /usr/lib{,64}/libstdc++.la
;;
bash)
rm /bin/bash
rm /bin/sh
echo "bash chroot dısına cıkılıp elle kurulmalıdır."
echo "=======> '$i' basarili sekilde kuruldu." >> $ANADIZIN/$LOG_DIZIN/$talimat.log
exit 1
;;
coreutils)
rm -f /usr/bin/env
for i in cat echo pwd stty
do
rm -f /bin/$i
done
;;
perl)
rm -f /usr/bin/perl
;;
esac
if [ "$TALIMATNAME" != "onsistem" ] && [ "$talimat" != "bash" ]; then
paket_kur
fi
fi
if ( grep "^=======>" $ANADIZIN/$LOG_DIZIN/$talimat.log| tail -1 |grep "ERROR" > /dev/null);then
exit 1
fi
cd -
done
}
ikinci_ayarlar(){
root_kontrol
lfs_kontrol
unmount_islemi
mv /mnt/sources_depo $LFS/sources
chown -R root:root $LFS
install -dv -m0750 $LFS/root
rm -r $LFS/root/bin
rm -r $LFS/root/$TALIMATNAMELER
rm -r $LFS/root/$LOG_DIZIN
cp -a $ANADIZIN/bin $LFS/root/
cp -a $TALIMATNAMELER $LFS/root/
cp -a $AYARLAR $LFS/root/
cp -a $ANADIZIN/lfs-mekanizma $LFS/root/
cp -a $ANADIZIN/rootfs/* $LFS/
cp /etc/resolv.conf $LFS/etc/
gerekli_dizinler
lokalizasyon
fstab_olustur
passwd_olustur
grup_olustur
bash_profil_olustur
bashrc_olustur
dmrc_olustur
generate_hosts
generate_inputrc
generate_shells
generate_dircolors_sh
generate_extrapaths_sh
generate_readline_sh
generate_umask_sh
generate_profile
generate_hosts
generate_inputrc
generate_modules
generate_createfiles
generate_mouse
generate_udev_retry
generate_rc_site
generate_etc_bashrc
generate_blfs_bootscripts
generate_milis_version
cp $ANADIZIN/ayarlar/mpsd.conf $LFS/etc/
cp $ANADIZIN/ayarlar/onmpsd.conf $LFS/etc/
mkdir -p $LFS/var/lib/pkg/DB
}
generate_milis_version() {
local FILE
FILE="milis-version"
[ -f ${LFS}/var/lib/pkg/$FILE ] && return
[ ! -d ${LFS}/var/lib/pkg ] && mkdir -pv ${LFS}/var/lib/pkg
echo "name ${CODE_NAME}
version $VERSION" > ${LFS}/var/lib/pkg/$FILE
}
generate_blfs_bootscripts() {
[ -f ${LFS}/etc/${LFS}/etc/blfs-bootscripts ] && return
[ ! -d ${LFS}/etc ] && mkdir -pv ${LFS}/etc
echo "scripts=blfs-bootscripts
scriptsversion=20150924" > ${LFS}/etc/blfs-bootscripts
}
generate_etc_bashrc() {
local FILE
FILE="bashrc"
[ -f ${LFS}/etc/$FILE ] && return
[ ! -d ${LFS}/etc ] && mkdir -pv ${LFS}/etc
if [ -f /etc/${INSTALL_COMMAND}.conf.d/$FILE ]; then
cp /etc/${INSTALL_COMMAND}.conf.d/$FILE \
${LFS}/etc/$FILE
return
fi
cat > ${LFS}/etc/$FILE << "EOF"
# Begin /etc/bashrc
# Written for Beyond Linux From Scratch
# by James Robertson <jameswrobertson@earthlink.net>
# updated by Bruce Dubbs <bdubbs@linuxfromscratch.org>
# System wide aliases and functions.
# System wide environment variables and startup programs should go into
# /etc/profile. Personal environment variables and startup programs
# should go into ~/.bash_profile. Personal aliases and functions should
# go into ~/.bashrc
# Provides a colored /bin/ls command. Used in conjunction with code in
# /etc/profile.
alias ls='ls --color=auto'
# Provides prompt for non-login shells, specifically shells started
# in the X environment. [Review the LFS archive thread titled
# PS1 Environment Variable for a great case study behind this script
# addendum.]
#export LC_ALL="tr_TR.UTF-8"
NORMAL="\[\e[0m\]"
RED="\[\e[1;31m\]"
GREEN="\[\e[1;32m\]"
WHITE="\[\e[1;37m\]"
case $TERM in
xterm|rxvt*)
TITLEBAR='\[\033]0;\u@\h \007\]'
;;
*)
TITLEBAR=''
;;
esac
if [[ $EUID == 0 ]] ; then
PS1="$TITLEBAR$RED\u [ $NORMAL\w$RED ]# $NORMAL"
else
PS1="$TITLEBAR$GREEN\u [ $NORMAL\w$GREEN ]\$ $NORMAL"
fi
# End /etc/bashrc
EOF
}
generate_rc_site() {
local FILE
FILE="rc.site"
[ -f ${LFS}/etc/sysconfig/$FILE ] && return
[ ! -d ${LFS}/etc/sysconfig ] && mkdir -pv ${LFS}/etc/sysconfig
if [ -f /etc/${INSTALL_COMMAND}.conf.d/$FILE ]; then
cp /etc/${INSTALL_COMMAND}.conf.d/$FILE \
${LFS}/etc/sysconfig/$FILE
return
fi
cat > ${LFS}/etc/sysconfig/$FILE << "EOF"
# rc.site
# Optional parameters for boot scripts.
# Distro Information
# These values, if specified here, override the defaults
#DISTRO="Linux From Scratch" # The distro name
#DISTRO_CONTACT="lfs-dev@linuxfromscratch.org" # Bug report address
#DISTRO_MINI="LFS" # Short name used in filenames for distro config
# Define custom colors used in messages printed to the screen
# Please consult `man console_codes` for more information
# under the "ECMA-48 Set Graphics Rendition" section
#
# Warning: when switching from a 8bit to a 9bit font,
# the linux console will reinterpret the bold (1;) to
# the top 256 glyphs of the 9bit font. This does
# not affect framebuffer consoles
# These values, if specified here, override the defaults
#BRACKET="\\033[1;34m" # Blue
#FAILURE="\\033[1;31m" # Red
#INFO="\\033[1;36m" # Cyan
#NORMAL="\\033[0;39m" # Grey
#SUCCESS="\\033[1;32m" # Green
#WARNING="\\033[1;33m" # Yellow
# Use a colored prefix
# These values, if specified here, override the defaults
#BMPREFIX=" "
#SUCCESS_PREFIX="${SUCCESS} * ${NORMAL}"
#FAILURE_PREFIX="${FAILURE}*****${NORMAL}"
#WARNING_PREFIX="${WARNING} *** ${NORMAL}"
# Interactive startup
#IPROMPT="yes" # Whether to display the interactive boot prompt
#itime="3" # The amount of time (in seconds) to display the prompt
# The total length of the distro welcome string, without escape codes
#wlen=$(echo "Welcome to ${DISTRO}" | wc -c )
#welcome_message="Welcome to ${INFO}${DISTRO}${NORMAL}"
# The total length of the interactive string, without escape codes
#ilen=$(echo "Press 'I' to enter interactive startup" | wc -c )
#i_message="Press '${FAILURE}I${NORMAL}' to enter interactive startup"
# Set scripts to skip the file system check on reboot
#FASTBOOT=yes
# Skip reading from the console
#HEADLESS=yes
# Write out fsck progress if yes
#VERBOSE_FSCK=no
# Speed up boot without waiting for settle in udev
#OMIT_UDEV_SETTLE=y
# Speed up boot without waiting for settle in udev_retry
#OMIT_UDEV_RETRY_SETTLE=yes
# Skip cleaning /tmp if yes
#SKIPTMPCLEAN=no
# For setclock
#UTC=1
#CLOCKPARAMS=
# For consolelog
#LOGLEVEL=5
# For network
#HOSTNAME=milis
# Delay between TERM and KILL signals at shutdown
#KILLDELAY=3
# Optional sysklogd parameters
#SYSKLOGD_PARMS="-m 0"
# Console parameters
#UNICODE=1
KEYMAP="trq"
#KEYMAP_CORRECTIONS="euro2"
#FONT="lat0-16 -m 8859-9"
#LEGACY_CHARSET=
EOF
}
generate_udev_retry() {
local FILE
FILE="udev_retry"
[ -f ${LFS}/etc/sysconfig/$FILE ] && return
[ ! -d ${LFS}/etc/sysconfig ] && mkdir -pv ${LFS}/etc/sysconfig
if [ -f /etc/${INSTALL_COMMAND}.conf.d/$FILE ]; then
cp /etc/sysconfig/$FILE \
${LFS}/etc/sysconfig/$FILE
return
fi
cat > ${LFS}/etc/sysconfig/$FILE << "EOF"
########################################################################
# Begin /etc/sysconfig/udev_retry
#
# Description : udev_retry script configuration
#
# Authors :
#
# Version : 00.00
#
# Notes : Each subsystem that may need to be re-triggered after mountfs
# runs should be listed in this file. Probable subsystems to be
# listed here are rtc (due to /var/lib/hwclock/adjtime) and sound
# (due to both /var/lib/alsa/asound.state and /usr/sbin/alsactl).
# Entries are whitespace-separated.
########################################################################
rtc
# End /etc/sysconfig/udev_retry
EOF
}
generate_createfiles() {
local FILE
FILE="createfiles"
[ -f ${LFS}/etc/sysconfig/$FILE ] && return
[ ! -d ${LFS}/etc/sysconfig ] && mkdir -pv ${LFS}/etc/sysconfig
if [ -f /etc/${INSTALL_COMMAND}.conf.d/$FILE ]; then
cp /etc/${INSTALL_COMMAND}.conf.d/$FILE \
${LFS}/etc/sysconfig/$FILE
return
fi
cat > ${LFS}/etc/sysconfig/$FILE << "EOF"
########################################################################
# Begin /etc/sysconfig/createfiles
#
# Description : Createfiles script config file
#
# Authors :
#
# Version : 00.00
#
# Notes : The syntax of this file is as follows:
# if type is equal to "file" or "dir"
# <filename> <type> <permissions> <user> <group>
# if type is equal to "dev"
# <filename> <type> <permissions> <user> <group> <devtype>
# <major> <minor>
#
# <filename> is the name of the file which is to be created
# <type> is either file, dir, or dev.
# file creates a new file
# dir creates a new directory
# dev creates a new device
# <devtype> is either block, char or pipe
# block creates a block device
# char creates a character deivce
# pipe creates a pipe, this will ignore the <major> and
# <minor> fields
# <major> and <minor> are the major and minor numbers used for
# the device.
########################################################################
# End /etc/sysconfig/createfiles
EOF
}
generate_modules() {
local FILE
FILE="modules"
[ -f ${LFS}/etc/sysconfig/$FILE ] && return
[ ! -d ${LFS}/etc/sysconfig ] && mkdir -pv ${LFS}/etc/sysconfig
if [ -f /etc/${INSTALL_COMMAND}.conf.d/$FILE ]; then
cp /etc/${INSTALL_COMMAND}.conf.d/$FILE \
${LFS}/etc/sysconfig/$FILE
return
fi
cat > ${LFS}/etc/sysconfig/$FILE << "EOF"
########################################################################
# Begin /etc/sysconfig/modules
#
# Description : Module auto-loading configuration
#
# Authors :
#
# Version : 00.00
#
# Notes : The syntax of this file is as follows:
# <module> [<arg1> <arg2> ...]
#
# Each module should be on its own line, and any options that you want
# passed to the module should follow it. The line deliminator is either
# a space or a tab.
########################################################################
# End /etc/sysconfig/modules
EOF
}
generate_mouse() {
local FILE
FILE="mouse"
[ -f ${LFS}/etc/$FILE ] && return
[ ! -d ${LFS}/etc/sysconfig ] && mkdir -pv ${LFS}/etc/sysconfig
if [ -f /etc/${INSTALL_COMMAND}.conf.d/$FILE ]; then
cp /etc/${INSTALL_COMMAND}.conf.d/$FILE \
${LFS}/etc/sysconfig/$FILE
return
fi
cat > ${LFS}/etc/sysconfig/$FILE << "EOF"
MDEVICE="/dev/input/mice"
PROTOCOL="imps2"
EOF
}
generate_inputrc() {
local FILE
FILE="inputrc"
[ -f ${LFS}/etc/$FILE ] && return
[ ! -d ${LFS}/etc ] && mkdir -pv ${LFS}/etc
if [ -f /etc/${INSTALL_COMMAND}.conf.d/$FILE ]; then
cp /etc/${INSTALL_COMMAND}.conf.d/$FILE \
${LFS}/etc/$FILE
return
fi
cat > ${LFS}/etc/$FILE << "EOF"
# Begin /etc/inputrc
# Modified by Chris Lynn <roryo@roryo.dynup.net>
# Allow the command prompt to wrap to the next line
set horizontal-scroll-mode Off
# Enable 8bit input
set meta-flag On
set input-meta On
# Turns off 8th bit stripping
set convert-meta Off
# Keep the 8th bit for display
set output-meta On
# none, visible or audible
set bell-style none
# All of the following map the escape sequence of the value
# contained in the 1st argument to the readline specific functions
"\eOd": backward-word
"\eOc": forward-word
# for linux console
"\e[1~": beginning-of-line
"\e[4~": end-of-line
"\e[5~": beginning-of-history
"\e[6~": end-of-history
"\e[3~": delete-char
"\e[2~": quoted-insert
# for xorg-term
"\eOH": beginning-of-line
"\eOF": end-of-line
# for Konsole
"\e[H": beginning-of-line
"\e[F": end-of-line
# End /etc/inputrc
EOF
}
generate_hosts() {
local FILE
FILE="hosts"
[ -f ${LFS}/etc/$FILE ] && return
[ ! -d ${LFS}/etc ] && mkdir -pv ${LFS}/etc
if [ -f /etc/${INSTALL_COMMAND}.conf.d/$FILE ]; then
cp /etc/${INSTALL_COMMAND}.conf.d/$FILE \
${LFS}/etc/$FILE
return
fi
cat > ${LFS}/etc/$FILE << "EOF"
# Begin /etc/hosts
127.0.0.1 localhost.localdomain localhost
127.0.0.1 milis
# End /etc/hosts
EOF
}
generate_shells() {
local FILE
FILE="shells"
[ -f ${LFS}/etc/$FILE ] && return
[ ! -d ${LFS}/etc ] && mkdir -pv ${LFS}/etc
if [ -f /etc/${INSTALL_COMMAND}.conf.d/$FILE ]; then
cp /etc/${INSTALL_COMMAND}.conf.d/$FILE \
${LFS}/etc/$FILE
return
fi
cat > ${LFS}/etc/$FILE << "EOF"
# Begin /etc/shells
/bin/sh
/bin/bash
# End /etc/shells
EOF
}
generate_umask_sh() {
local FILE
FILE="umask.sh"
[ -f ${LFS}/etc/profile.d/$FILE ] && return
[ ! -d ${LFS}/etc/profile.d ] && mkdir -pv ${LFS}/etc/profile.d
if [ -f /etc/${INSTALL_COMMAND}.conf.d/$FILE ]; then
cp /etc/${INSTALL_COMMAND}.conf.d/$FILE \
${LFS}/etc/profile.d/$FILE
return
fi
cat > ${LFS}/etc/profile.d/$FILE << "EOF"
# By default we want the umask to get set.
if [ "$(id -gn)" = "$(id -un)" -a $EUID -gt 99 ] ; then
umask 002
else
umask 022
fi
EOF
}
generate_readline_sh() {
local FILE
FILE="readline.sh"
[ -f ${LFS}/etc/profile.d/$FILE ] && return
[ ! -d ${LFS}/etc/profile.d ] && mkdir -pv ${LFS}/etc/profile.d
if [ -f /etc/${INSTALL_COMMAND}.conf.d/$FILE ]; then
cp /etc/${INSTALL_COMMAND}.conf.d/$FILE \
${LFS}/etc/profile.d/$FILE
return
fi
cat > ${LFS}/etc/profile.d/$FILE << "EOF"
# Setup the INPUTRC environment variable.
if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ] ; then
INPUTRC=/etc/inputrc
fi
export INPUTRC
EOF
}
generate_extrapaths_sh() {
local FILE
FILE="extrapaths.sh"
[ -f ${LFS}/etc/profile.d/$FILE ] && return
[ ! -d ${LFS}/etc/profile.d ] && mkdir -pv ${LFS}/etc/profile.d
if [ -f /etc/${INSTALL_COMMAND}.conf.d/$FILE ]; then
cp /etc/${INSTALL_COMMAND}.conf.d/$FILE \
${LFS}/etc/profile.d/$FILE
return
fi
cat > ${LFS}/etc/profile.d/$FILE << "EOF"
if [ -d /usr/local/lib/pkgconfig ] ; then
pathappend /usr/local/lib/pkgconfig PKG_CONFIG_PATH
fi
if [ -d /usr/local/bin ]; then
pathprepend /usr/local/bin
fi
if [ -d /usr/local/sbin -a $EUID -eq 0 ]; then
pathprepend /usr/local/sbin
fi
if [ -d ~/bin ]; then
pathprepend ~/bin
fi
#if [ $EUID -gt 99 ]; then
# pathappend .
#fi
EOF
}
generate_dircolors_sh() {
local FILE
FILE="dircolors.sh"
[ -f ${LFS}/etc/profile.d/$FILE ] && return
[ ! -d ${LFS}/etc/profile.d ] && mkdir -pv ${LFS}/etc/profile.d
if [ -f /etc/${INSTALL_COMMAND}.conf.d/$FILE ]; then
cp /etc/${INSTALL_COMMAND}.conf.d/$FILE \
${LFS}/etc/profile.d/$FILE
return
fi
cat > ${LFS}/etc/profile.d/$FILE << "EOF"
# Setup for /bin/ls to support color, the alias is in /etc/bashrc.
if [ -f "/etc/dircolors" ] ; then
eval $(dircolors -b /etc/dircolors)
if [ -f "$HOME/.dircolors" ] ; then
eval $(dircolors -b $HOME/.dircolors)
fi
fi
alias ls='ls --color=auto'
EOF
}
generate_profile() {
local FILE
FILE="profile"
[ -f ${LFS}/etc/$FILE ] && return
[ ! -d ${LFS}/etc ] && mkdir -pv ${LFS}/etc
if [ -f /etc/${INSTALL_COMMAND}.conf.d/$FILE ]; then
cp /etc/${INSTALL_COMMAND}.conf.d/$FILE \
${LFS}/etc/$FILE
return
fi
cat > ${LFS}/etc/$FILE << "EOF"
# Begin /etc/profile
# Written for Beyond Linux From Scratch
# by James Robertson <jameswrobertson@earthlink.net>
# modifications by Dagmar d'Surreal <rivyqntzne@pbzpnfg.arg>
# System wide environment variables and startup programs.
# System wide aliases and functions should go in /etc/bashrc. Personal
# environment variables and startup programs should go into
# ~/.bash_profile. Personal aliases and functions should go into
# ~/.bashrc.
# Functions to help us manage paths. Second argument is the name of the
# path variable to be modified (default: PATH)
pathremove () {
local IFS=':'
local NEWPATH
local DIR
local PATHVARIABLE=${2:-PATH}
for DIR in ${!PATHVARIABLE} ; do
if [ "$DIR" != "$1" ] ; then
NEWPATH=${NEWPATH:+$NEWPATH:}$DIR
fi
done
export $PATHVARIABLE="$NEWPATH"
}
pathprepend () {
pathremove $1 $2
local PATHVARIABLE=${2:-PATH}
export $PATHVARIABLE="$1${!PATHVARIABLE:+:${!PATHVARIABLE}}"
}
pathappend () {
pathremove $1 $2
local PATHVARIABLE=${2:-PATH}
export $PATHVARIABLE="${!PATHVARIABLE:+${!PATHVARIABLE}:}$1"
}
export -f pathremove pathprepend pathappend
export LC_ALL="tr_TR.UTF-8"
# Set the initial path
export PATH=/usr/bin:/bin:/usr/sbin:/sbin
if [ $EUID -eq 0 ] ; then
unset HISTFILE
fi
# Setup some environment variables.
export HISTSIZE=1000
export HISTIGNORE="&:[bf]g:exit"
# Set some defaults for graphical systems
export XDG_DATA_DIRS=/usr/share/
export XDG_CONFIG_DIRS=/etc/xdg/
# Setup a red prompt for root and a green one for users.
NORMAL="\[\e[0m\]"
RED="\[\e[1;31m\]"
GREEN="\[\e[1;32m\]"
if [[ $EUID == 0 ]] ; then
PS1="$RED\u [ $NORMAL\w$RED ]# $NORMAL"
else
PS1="$GREEN\u [ $NORMAL\w$GREEN ]\$ $NORMAL"
fi
for script in /etc/profile.d/*.sh ; do
if [ -r $script ] ; then
. $script
fi
done
unset script RED GREEN NORMAL
# End /etc/profile
EOF
}
dmrc_olustur() {
local FILE
FILE=".dmrc"
[ -f ${LFS}/etc/skel/$FILE ] && return
[ ! -d ${LFS}/etc/skel ] && mkdir -pv ${LFS}/etc/skel
if [ -f /etc/${INSTALL_COMMAND}.conf.d/$FILE ]; then
cp /etc/${INSTALL_COMMAND}.conf.d/$FILE \
${LFS}/etc/skel/$FILE
return
fi
cat > ${LFS}/etc/skel/$FILE << "EOF"
[Desktop]
Session=default
EOF
}
bashrc_olustur() {
local FILE
FILE=".bashrc"
[ -f ${LFS}/etc/skel/$FILE ] && return
[ ! -d ${LFS}/etc/skel ] && mkdir -pv ${LFS}/etc/skel
if [ -f /etc/${INSTALL_COMMAND}.conf.d/$FILE ]; then
cp /etc/${INSTALL_COMMAND}.conf.d/$FILE \
${LFS}/etc/skel/$FILE
return
fi
cat > ${LFS}/etc/skel/$FILE << "EOF"
# Personal aliases and functions.
# Personal environment variables and startup programs should go in
# ~/.bash_profile. System wide environment variables and startup
# programs are in /etc/profile. System wide aliases and functions are
# in /etc/bashrc.
if [ -f "/etc/bashrc" ] ; then
source /etc/bashrc
fi
alias ll='ls -l'
alias l='ls -alh'
alias duh='du -h --max-depth=1'
alias dfh='df -h'
# End ~/.bashrc
EOF
[ -f ${LFS}/root/$FILE ] && return
[ ! -d ${LFS}/root ] && install -dv -m0750 ${LFS}/root
cp -v ${LFS}/etc/skel/$FILE \
${LFS}/root
}
bash_profil_olustur() {
local FILE
FILE=".bash_profile"
[ -f ${LFS}/etc/skel/$FILE ] && return
[ ! -d ${LFS}/etc/skel ] && mkdir -pv ${LFS}/etc/skel
if [ -f /etc/${INSTALL_COMMAND}.conf.d/$FILE ]; then
cp /etc/${INSTALL_COMMAND}.conf.d/$FILE \
${LFS}/etc/skel/$FILE
return
fi
cat > ${LFS}/etc/skel/$FILE << "EOF"
# Personal environment variables and startup programs.
# Personal aliases and functions should go in ~/.bashrc. System wide
# environment variables and startup programs are in /etc/profile.
# System wide aliases and functions are in /etc/bashrc.
append () {
# First remove the directory
local IFS=':'
local NEWPATH
for DIR in $PATH; do
if [ "$DIR" != "$1" ]; then
NEWPATH=${NEWPATH:+$NEWPATH:}$DIR
fi
done
# Then append the directory
export PATH=$NEWPATH:$1
}
if [ -f "$HOME/.bashrc" ] ; then
source $HOME/.bashrc
fi
# unset append
# End ~/.bash_profile
EOF
[ ! -d ${LFS}/root ] && install -dv -m0750 ${LFS}/root
[ -f ${LFS}/root/$FILE ] && return
cp -v ${LFS}/etc/skel/$FILE \
${LFS}/root
}
gerekli_dizinler() {
mkdir ${LFS}/{dev,sys,proc,run,tmp,home,srv,mnt}
mkdir -p ${LFS}/var/tmp
mkdir -p ${LFS}/usr/{,local/}lib
chmod 1777 ${LFS}/{,var/}tmp
mkdir -v ${LFS}/var/{mail,spool}
mkdir -pv ${LFS}/var/run/lock
mknod -m 600 ${LFS}/dev/console c 5 1
mknod -m 666 ${LFS}/dev/null c 1 3
}
lokalizasyon() {
[ ! -d ${LFS}/etc/locale ] && mkdir -p ${LFS}/etc/locale
if [ -d ${LFS}/usr/lib/locale ]; then
rm -r ${LFS}/usr/lib/locale
ln -sv /etc/locale/ ${LFS}/usr/lib/locale
fi
}
fstab_olustur() {
local FILE
FILE="fstab"
[ -f ${LFS}/etc/$FILE ] && return
[ ! -d ${LFS}/etc ] && mkdir -pv ${LFS}/etc
if [ -f /etc/${INSTALL_COMMAND}.conf.d/$FILE ]; then
cp /etc/${INSTALL_COMMAND}.conf.d/$FILE \
${LFS}/etc/$FILE
return
fi
cat > ${LFS}/etc/$FILE << "EOF"
# Begin /etc/fstab
# file system mount-point type options dump fsck
# order
proc /proc proc nosuid,noexec,nodev 0 0
sysfs /sys sysfs nosuid,noexec,nodev 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
tmpfs /run tmpfs defaults 0 0
devtmpfs /dev devtmpfs mode=0755,nosuid 0 0
EOF
}
grup_olustur() {
[ -f ${LFS}/etc/group ] && return
[ ! -d ${LFS}/etc ] && mkdir -pv ${LFS}/etc
cat > ${LFS}/etc/group << "EOF"
root:x:0:
bin:x:1:
sys:x:2:
kmem:x:3:
tape:x:4:
tty:x:5:
daemon:x:6:
floppy:x:7:
disk:x:8:
lp:x:9:
dialout:x:10:
audio:x:11:gdm
video:x:12:gdm
utmp:x:13:
usb:x:14:
cdrom:x:15:
adm:x:16:
atd:x:17:
messagebus:x:18:
lpadmin:x:19:
named:x:20:
gdm:x:21:
fcron:x:22:
www:x:24:
apache:x:25:
smmsp:x:26:
polkitd:x:27:
wheel:x:30:root
exim:x:31:
postfix:x:32:
postdrop:x:33:
mail:x:34:
vmailman:x:35:
news:x:36:
kdm:x:37:
mysql:x:40:
postgres:x:41:
dovecot:x:42:
dovenull:x:43:
ftp:x:45:
proftpd:x:46:
vsftpd:x:47:
rsyncd:x:48:
sshd:x:50:
stunnel:x:51:
svn:x:56:
svntest:x:57:
pulse:x:58:
pulse-access:x:59:
games:x:60:
kvm:x:61:
wireshark:x:62:
lightdm:x:63:
sddm:x:64:
scanner:x:70:
colord:x:71:
vboxusers:x:80:
ldap:x:83:
avahi:x:84:
avahi-autoipd:x:85:
netdev:x:86:
ntp:x:87:
unbound:x:88:
nogroup:x:99:
users:x:999:
EOF
}
passwd_olustur() {
[ -f ${LFS}/etc/passwd ] && return
[ ! -d ${LFS}/etc ] && mkdir -pv ${LFS}/etc
cat > ${LFS}/etc/passwd << "EOF"
root::0:0:root:/root:/bin/bash
bin:x:1:1:bin:/dev/null:/bin/false
lp:x:9:9:Print Service User:/dev/null:/bin/false
atd:x:17:17:add daemon:/dev/null:/bin/false
messagebus:x:18:18:D-Bus Message Daemon User:/dev/null:/bin/false
named:x:20:20:BIND Owner:/home/named:/bin/false
gdm:x:21:21:GDM Daemon User:/var/lib/gdm:/bin/false
fcron:x:22:22:Fcron User:/dev/null:/bin/false
www:x:24:24:Nginx Server:/dev/null:bin/false
apache:x:25:25:Apache Server:/dev/null:/bin/false
smmsp:x:26:26:Sendmail Daemon:/dev/null:/bin/false
polkitd:x:27:27:Policy Kit Daemon User:/etc/polkit-1:/bin/false
exim:x:31:31:Exim Daemon:/dev/null:/bin/false
postfix:x:32:32:Postfix Daemon User:/var/spool/postfix:/bin/false
sendmail:x:34:34:Sendmail Daemon:/dev/null:/bin/false
vmailman:x:35:35:Vmail Daemon:/dev/null:/bin/false
news:x:36:36:News Daemon:/dev/null:/bin/false
kdm:x:37:37:KDM Daemon Owner:/var/lib/kdm:/bin/false
mysql:x:40:40:MySQL Server:/dev/null:/bin/false
postgres:x:41:41:PostgreSQL Server:/srv/pgsql/data:/bin/bash
dovecot:x:42:42:Dovecot unprivileged user:/dev/null:/bin/false
dovenull:x:43:43:Dovecot login user:/dev/null:/bin/false
ftp:x:45:45:anonymous_user:/home/ftp:/bin/false
proftpd:x:46:46:proftpd:/srv/ftp:/usr/bin/proftpdshell
vsftpd:x:47:47:vsftpd User:/dev/null:/bin/false
rsyncd:x:48:48:rsyncd Daemon:/home/rsync:/bin/false
sshd:x:50:50:sshd PrivSep:/var/lib/sshd:/bin/false
stunnel:x:51:51:stunnel Daemon:/var/lib/stunnel:/bin/false
svn:x:56:56:SVN Owner:/home/svn:/bin/false
games:x:60:60:Games High Score Owner:/var/games:/bin/false
lightdm:x:63:63:Light Display Manager:/var/lib/lightdm:/sbin/nologin
sddm:x:64:64:Simple Desktop Display Manager:/var/lib/sddm:/bin/false
colord:x:71:71:Color Daemon Owner:/var/lib/colord:/bin/false
ldap:x:83:83:OpenLDAP Daemon Owner:/var/lib/openldap:/bin/false
avahi:x:84:84:Avahi Daemon Owner:/var/run/avahi-daemon:/bin/false
avahi-autoipd:x:85:85:Avahi autoip Daemon:/:/var/run/avahi-autoipd:/bin/false
ntp:x:87:87:Network Time Protocol:/var/lib/ntp:/bin/false
unbound:x:88:88:Unbound DNS resolver:/var/lib/unbound:/bin/false
anonymous:x:98:99:Unprivileged User:/dev/null:/bin/false
nobody:x:99:99:Unprivileged User:/dev/null:/bin/false
EOF
}
mount_islemi(){
cp -v /etc/resolv.conf $LFS/etc
mount -v -B /dev $LFS/dev
#mount -vt devpts devpts $LFS/dev/pts -o gid=5,mode=620
#mount -vt devpts devpts $LFS/dev/pts
# make hatası düzeliyor-segm fault
mount --bind /dev/pts $LFS/dev/pts
mount -vt proc proc $LFS/proc
#bazı durumlarda bu kullanılacak tty değilde pty i kullanan derlemelerde
#mount --bind /dev/pts $LFS/dev/pts
mount -vt sysfs sysfs $LFS/sys
#if [ -h /dev/shm ]; then rm -f $LFS/dev/shm;mkdir $LFS/dev/shm;fi
#mount -vt tmpfs shm $LFS/dev/shm
#chmod 1777 /dev/shm
}
chroot_gir(){
root_kontrol
lfs_kontrol
unmount_islemi
mount_islemi
cp ayarlar/bashrc_chroot "$LFS"/etc/bashrc
chroot "$LFS" /usr/bin/env -i HOME=/root TERM="$TERM" PS1='\u:\w\$ ' /bin/bash --login
#chroot "$LFS" /usr/bin/env -i HOME=/root PS1='\u:\w\$ ' /bin/bash --login +h
}
unmount_islemi() {
lfs_kontrol
if [ "$LFS" != "" ];then
umount -lf $LFS/dev/shm
umount -lf $LFS/dev/pts
umount -lf $LFS/dev
umount -lf $LFS/run
umount -lf $LFS/proc
umount -lf $LFS/sys
else
echo "LFS boş tanımlı"
fi
}
bash_kur(){
cd $LFS/root/talimatname/temel/bash
for PACK in *.lz; do tar xf $PACK -C $LFS;done
}
onsistem_sfs(){
tarih=`date +%Y-%m-%d`
mv $LFS/sources /mnt/sources_depo
mksquashfs $LFS malfs-asama1-onsistem_$tarih.sfs -comp xz
}
temel_sfs(){
unmount_islemi
tarih=`date +%Y-%m-%d`
mv $LFS/sources /mnt/sources_depo
mv $LFS/tools /mnt/tools_ydk
mv $LFS/paket_depo /mnt/base_paket_depo
mksquashfs $LFS malfs-asama2-temel_$tarih.sfs -comp xz
mv /mnt/sources_depo $LFS/sources
}
son_sfs(){
unmount_islemi
tarih=`date +%Y-%m-%d`
mv $LFS/sources /mnt/sources_depo
mv $LFS/paket_depo /mnt/paket_depo
rm -r -f $LFS/usr/src
mksquashfs $LFS malfs-asama3-sonsistem_$tarih.sfs -comp xz
}
baslatici_olustur(){
rm /boot/initramfs
#kernelv=`ls /boot/kernel-* | cut -d'-' -f2`
kernelv=`ls /lib/modules`
#mkdir -p /usr/lib/dracut/modules.d/01milis
#cp /root/bin/dracut/* /usr/lib/dracut/modules.d/01milis/
#dracut -N --xz --force-add milis --omit systemd /boot/initramfs $kernelv
dracut -N --force --xz --add 'crypt dmsquash-live pollcdrom livenet' --omit systemd /boot/initramfs $kernelv
}
grub_efi_boot(){
: ${BASE_ARCH:=$(uname -m)}
: ${KEYMAP:=tr}
: ${LOCALE:=tr_TR.UTF-8}
: ${INITRAMFS_COMPRESSION:=xz}
: ${SQUASHFS_COMPRESSION:=xz}
: ${BOOT_TITLE:="Milis_Linux"}
ISO_VOLUME="MILIS_CALISAN"
IMAGEDIR="iso_icerik"
IMAGEDIR=$(readlink -f $IMAGEDIR)
BOOT_DIR="$IMAGEDIR/boot"
ISOLINUX_DIR="$BOOT_DIR/isolinux"
GRUB_DIR="$BOOT_DIR/grub"
ISOLINUX_CFG="$ISOLINUX_DIR/isolinux.cfg"
SPLASH_IMAGE="$ISOLINUX_DIR/back.jpg"
#noaer vs yazabiliriz.
BOOT_CMDLINE=""
KERNELVERSION=`uname -r`
mkdir -p $GRUB_DIR
cp -f ayarlar/grub/grub.cfg $GRUB_DIR/
cp -f ayarlar/grub/grub_milis.cfg.in $GRUB_DIR/grub_milis.cfg
sed -i -e "s|@@SPLASHIMAGE@@|$(basename ${SPLASH_IMAGE})|" \
-e "s|@@KERNVER@@|${KERNELVERSION}|" \
-e "s|@@KEYMAP@@|${KEYMAP}|" \
-e "s|@@ARCH@@|$BASE_ARCH|" \
-e "s|@@BOOT_TITLE@@|${BOOT_TITLE}|" \
-e "s|@@BOOT_CMDLINE@@|${BOOT_CMDLINE}|" \
-e "s|@@LOCALE@@|${LOCALE}|" $GRUB_DIR/grub_milis.cfg
mkdir -p $GRUB_DIR/fonts
cp -f ayarlar/grub/fonts/unicode.pf2 $GRUB_DIR/fonts/
modprobe -q loop || :
# EFI vfat imajı olusturuyoruz.
truncate -s 16M $GRUB_DIR/efiboot.img >/dev/null 2>&1
mkfs.vfat -F12 -S 512 -n "grub_uefi" "$GRUB_DIR/efiboot.img" >/dev/null 2>&1
GRUB_EFI_TMPDIR="$(mktemp --tmpdir=/tmp -d)"
LOOP_DEVICE="$(losetup --show --find ${GRUB_DIR}/efiboot.img)"
mount -o rw,flush -t vfat "${LOOP_DEVICE}" "${GRUB_EFI_TMPDIR}" >/dev/null 2>&1
cp -a $IMAGEDIR/boot $LFS
echo "chroot gir"
chroot "$LFS" /usr/bin/env -i grub-mkstandalone --directory="/usr/lib/grub/x86_64-efi" --format="x86_64-efi" --output="/tmp/bootx64.efi" "ayarlar/grub/grub.cfg"
echo "chroot cik"
if [ $? -ne 0 ]; then
umount "$GRUB_EFI_TMPDIR"
losetup --detach "${LOOP_DEVICE}"
echo "EFI yukleyici olusturulması basarısız!"
exit 1
fi
echo "${GRUB_EFI_TMPDIR} silinecek"
mkdir -p ${GRUB_EFI_TMPDIR}/EFI/BOOT
cp -f $LFS/tmp/bootx64.efi ${GRUB_EFI_TMPDIR}/EFI/BOOT/BOOTX64.EFI
umount "$GRUB_EFI_TMPDIR"
echo " ${LOOP_DEVICE} silinecek"
losetup --detach "${LOOP_DEVICE}"
rm -rf $GRUB_EFI_TMPDIR
}
squashfs_olustur(){
unmount_islemi
lfs_kontrol
#son ayar yuklemeleri
cp rootfs/etc/bashrc $LFS/etc/bashrc
cp rootfs/etc/profile $LFS/etc/profile
cp ./ayarlar/mps.conf $LFS/etc/mps.conf
cp -f ./rootfs/etc/rc.d/init.d/* $LFS/etc/rc.d/init.d/
iso_etiket="MILIS_DISK_IMAJ"
rm -rf iso_icerik/boot/kernel
rm -rf iso_icerik/boot/initramfs
rm -rf iso_icerik/LiveOS
cp $LFS/boot/kernel-* iso_icerik/boot/kernel
cp $LFS/boot/initramfs* iso_icerik/boot/initramfs
anayer=$(du -sm "$LFS"|awk '{print $1}')
fazladan="$((anayer))"
mkdir -p tmp
#yeni dracut guncellemesiyle-210817 gerek yok
#mkdir -p tmp/LiveOS
#dd if=/dev/zero of=tmp/LiveOS/ext3fs.img bs=1MB count=16192
#dd if=/dev/zero of=tmp/ext3fs.img bs=1MB count=16384
fallocate -l 16G tmp/rootfs.img
mke2fs -t ext4 -L $iso_etiket -F tmp/rootfs.img
mkdir -p temp-root
mount -o loop tmp/rootfs.img temp-root
cp -dpR $LFS/* temp-root/
#rsync -a kur/ temp-root
umount -l temp-root
rm -rf temp-root
mkdir -p iso_icerik/LiveOS
mksquashfs tmp iso_icerik/LiveOS/squashfs.img -comp xz -b 256K -Xbcj x86
chmod 444 iso_icerik/LiveOS/squashfs.img
rm -rf tmp
}
iso_olustur(){
iso_etiket="MILIS_CALISAN"
rm milis_calisan.iso
genisoimage -l -V $iso_etiket -R -J -pad -no-emul-boot -boot-load-size 4 -boot-info-table \
-b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat -o milis_calisan.iso iso_icerik && isohybrid milis_calisan.iso
}
iso_olustur_efili() {
cp $LFS/usr/lib/syslinux/isohdpfx.bin iso_icerik/boot/isolinux/isohdpfx.bin
xorriso -as mkisofs \
-iso-level 3 -rock -joliet \
-max-iso9660-filenames -omit-period \
-omit-version-number -relaxed-filenames -allow-lowercase \
-volid "MILIS_LIVE" \
-eltorito-boot boot/isolinux/isolinux.bin \
-eltorito-catalog boot/isolinux/isolinux.cat \
-no-emul-boot -boot-load-size 4 -boot-info-table \
-eltorito-alt-boot -e boot/grub/efiboot.img -isohybrid-gpt-basdat -no-emul-boot \
-isohybrid-mbr iso_icerik/boot/isolinux/isohdpfx.bin \
-output "milislinux-live.iso" iso_icerik || echo "ISO imaj olusturalamadı";exit 1
}
temizlik(){
rm -r /tools/*
rm -r chroot/.log/*
rm -r /tmp/work
}
lfs_kontrol(){
if [ -z "${LFS}" ]; then
echo "export LFS=/mnt/lfs"
echo "komutu verilmeli"
exit 1
fi
}
root_kontrol(){
if [ ! $(whoami) == "root" ]; then
echo "mekanizma işlemleri için root olmalısınız."
exit 1
fi
}
#calisma ortaminin klonlanmasi
git_clone(){
git clone git://github.com/milisarge/malfs malfs
}
kaynak_kodlar_indir(){
lfs_kontrol
mkdir -p $LFS/sources
for link in `cat kaynaklar.liste`
do
#MD5SUM=`echo $i|cut -d "|" -f1`
MD5SUM="iptal"
wget -nc --no-check-certificate $link -P $LFS/sources
if [ "$MD5SUM" != "iptal" ]; then
echo "$MD5SUM $FILE" >> $LFS/sources/.md5sums
fi
done
}
parametre_analiz() {
while [ "$1" ]; do
case $1 in
-h|--help)
print_help
exit 0;;
-gk|--gerek-kontrol)
./bin/version-check.sh
exit 0;;
-ki|--kaynak-indir)
kaynak_kodlar_indir
exit 0;;
-cg|--chroot-gir)
chroot_gir
exit 0;;
-os|--onsistem-sfs)
onsistem_sfs
exit 0;;
-ts|--temel-sfs)
temel_sfs
exit 0;;
-ss|--son-sfs)
son_sfs
exit 0;;
-bo|--initrd-yap)
baslatici_olustur
exit 0;;
-geb)
grub_efi_boot
exit 0;;
-so|--squashfs-yap)
squashfs_olustur
exit 0;;
-io|--iso-yap)
iso_olustur
exit 0;;
-iof|--iso-yap-efili)
iso_olustur_efili
exit 0;;
-ba|--birinci-ayarlar)
birinci_ayarlar
exit 0;;
-ia|--ikinci-ayarlar)
ikinci_ayarlar
exit 0;;
-mi|--mount-islemi)
mount_islemi
exit 0;;
-bk|--bash-kur)
bash_kur
exit 0;;
-ui|--unmount-islemi)
unmount_islemi
exit 0;;
-te|--temizlik)
temizlik
exit 0;;
-td|--tlm-derle)
if [ ! "$2" ]; then
echo "talimatname dizini giriniz."
echo "ornek: lfs-mekanizma -td temel"
exit 1
fi
TALIMATNAME="$2"
talimatname_derle
shift;;
-v|--version)
echo "`basename $0` $VERSION"
exit 0;;
*)
echo "`basename $0`: gecersiz parametre $1"
exit 1 ;;
esac
shift
done
}
parametre_analiz "$@"