إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

طريقة عمل خطوات التحميل بالالوان لتوزيعة دبيان

تقليص
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • طريقة عمل خطوات التحميل بالالوان لتوزيعة دبيان

    السلام عليكم ورحمة الله وبركاته
    عندي طلب وعايز حد يدلني عليه هو شكل الاستايل الذي تستخدمه توزيعة knoppix في البوت موضوع تلوين الكتابة في البوت كنت حابب اعرف هل يمكن عملها على دبيان 4
    وما هي الحزمة التي تؤدي هذه المهمة
    للتوضيح اكثر اليكم هذه الصورة
    قل وداعاً للشاشات الزرقاء مع جنو لينكس

  • #2
    السلام عليكم تقدر لكن متعبه شوي
    واعتقد يدوي انك تضيف اكواد مافي طريقه تعملها اتوماتيك
    المشكله ياعزيزي انا ماعندي دبيان علشان اشرح لكن
    لو سمحت ارفقلي
    inittab تبع دبيان خلني اشوفه

    تعليق


    • #3
      أولاً أحب اشكرك لردك
      ارفقت لك الملف الذي طلبته
      وعادي يا اخي ان كنت تعرف تعملها على توزيعة ثانية ممكن توضحلي الطريقة وانا احاول فيها على الدبيان
      الملفات المرفقة
      قل وداعاً للشاشات الزرقاء مع جنو لينكس

      تعليق


      • #4
        السلام عليكم وانا اسف واعتذر عن التأخير عزيزي
        ايش رايك مادامي الان شغال على فيدورا ابشرحلك وان شاء الله الليله ابنزل الدبيان ونشرح عليها بعد
        نزلتها قبل امس ونصبتها على اني ابشرح عليها لكن تعرف دبيان عجزت اتحمل فورمات
        نجي للشرح

        على فيدورا 8
        هو مافي الموضوع برمجة سكربت مع بعض النكهه
        اول شيء بنشوف وين الكلام الي يطلع عندنا بأي ملف
        اروح لملف inittab
        نفتح الملف
        بعطينا زي كذا
        كود:
        # inittab       This file describes how the INIT process should set up
        #               the system in a certain run-level.
        #
        # Author:       Miquel van Smoorenburg, <[email protected]>
        #               Modified for RHS Linux by Marc Ewing and Donnie Barnes
        #
        
        # Default runlevel. The runlevels used by RHS are:
        #   0 - halt (Do NOT set initdefault to this)
        #   1 - Single user mode
        #   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
        #   3 - Full multiuser mode
        #   4 - unused
        #   5 - X11
        #   6 - reboot (Do NOT set initdefault to this)
        # 
        id:5:initdefault:
        
        # System initialization.
        si::sysinit:/etc/rc.d/rc.sysinit
        
        l0:0:wait:/etc/rc.d/rc 0
        l1:1:wait:/etc/rc.d/rc 1
        l2:2:wait:/etc/rc.d/rc 2
        l3:3:wait:/etc/rc.d/rc 3
        l4:4:wait:/etc/rc.d/rc 4
        l5:5:wait:/etc/rc.d/rc 5
        l6:6:wait:/etc/rc.d/rc 6
        
        # Trap CTRL-ALT-DELETE
        ca::ctrlaltdel:/sbin/shutdown -t3 -r now
        
        # When our UPS tells us power has failed, assume we have a few minutes
        # of power left.  Schedule a shutdown for 2 minutes from now.
        # This does, of course, assume you have powerd installed and your
        # UPS connected and working correctly.  
        pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
        
        # If power was restored before the shutdown kicked in, cancel it.
        pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
        
        
        # Run gettys in standard runlevels
        1:2345:respawn:/sbin/mingetty tty1
        2:2345:respawn:/sbin/mingetty tty2
        3:2345:respawn:/sbin/mingetty tty3
        4:2345:respawn:/sbin/mingetty tty4
        5:2345:respawn:/sbin/mingetty tty5
        6:2345:respawn:/sbin/mingetty tty6
        
        # Run xdm in runlevel 5
        x:5:respawn:/etc/X11/prefdm -nodaemon
        احنا الي ندوره هذا :
        كود:
        # System initialization.
        si::sysinit:/etc/rc.d/rc.sysinit
        
        l0:0:wait:/etc/rc.d/rc 0
        l1:1:wait:/etc/rc.d/rc 1
        l2:2:wait:/etc/rc.d/rc 2
        l3:3:wait:/etc/rc.d/rc 3
        l4:4:wait:/etc/rc.d/rc 4
        l5:5:wait:/etc/rc.d/rc 5
        l6:6:wait:/etc/rc.d/rc 6

        الحين نروح للملف هذا:rc.sysinit
        كود:
        /etc/rc.d/rc.sysinit
        بعدين بيطلع المف كالاتي :
        كود:
        #!/bin/bash
        #
        # /etc/rc.d/rc.sysinit - run once at boot time
        #
        # Taken in part from Miquel van Smoorenburg's bcheckrc.
        #
        
        HOSTNAME=`/bin/hostname`
        HOSTTYPE=`uname -m`
        unamer=`uname -r`
        
        set -m
        
        if [ -f /etc/sysconfig/network ]; then
            . /etc/sysconfig/network
        fi
        if [ -z "$HOSTNAME" -o "$HOSTNAME" = "(none)" ]; then
            HOSTNAME=localhost
        fi
        
        if [ ! -e /proc/mounts ]; then 
        	mount -n -t proc /proc /proc
        	mount -n -t sysfs /sys /sys >/dev/null 2>&1
        fi
        if [ ! -d /proc/bus/usb ]; then
        	modprobe usbcore >/dev/null 2>&1 && mount -n -t usbfs /proc/bus/usb /proc/bus/usb
        else
        	mount -n -t usbfs /proc/bus/usb /proc/bus/usb
        fi
         
        . /etc/init.d/functions
        
        # Check SELinux status
        selinuxfs="$(fstab_decode_str `LC_ALL=C awk '/ selinuxfs / { print $2 }' /proc/mounts`)"
        SELINUX_STATE=
        if [ -n "$selinuxfs" ] && [ "`cat /proc/self/attr/current`" != "kernel" ]; then
        	if [ -r "$selinuxfs/enforce" ] ; then
        		SELINUX_STATE=`cat "$selinuxfs/enforce"`
        	else
        		# assume enforcing if you can't read it
        		SELINUX_STATE=1
        	fi
        fi
        
        if [ -n "$SELINUX_STATE" -a -x /sbin/restorecon ] && __fgrep " /dev " /proc/mounts >/dev/null 2>&1 ; then
        	/sbin/restorecon  -R /dev 2>/dev/null
        fi
        
        disable_selinux() {
        	echo $"*** Warning -- SELinux is active"
        	echo $"*** Disabling security enforcement for system recovery."
        	echo $"*** Run 'setenforce 1' to reenable."
        	echo "0" > "$selinuxfs/enforce"
        }
        
        relabel_selinux() {
            if [ -x /usr/bin/rhgb-client ] && /usr/bin/rhgb-client --ping ; then
        	/usr/bin/rhgb-client --quit
            fi
            # if /sbin/init is not labeled correctly this process is running in the 
            # wrong context, so a reboot will be required after relabel
            REBOOTFLAG=`restorecon -v /sbin/init`
            AUTORELABEL=
            . /etc/selinux/config
            if [ "$AUTORELABEL" = "0" ]; then
         	rm -f  /.autorelabel 
        
         	echo
        	echo $"*** Warning -- SELinux ${SELINUXTYPE} policy relabel is required. "
         	echo $"*** /etc/selinux/config indicates you want to manually fix labeling"
         	echo $"*** problems. Dropping you to a shell; the system will reboot"
         	echo $"*** when you leave the shell."
         	echo "0" > $selinuxfs/enforce
         	sulogin
         
         	echo $"Unmounting file systems"
         	umount -a
         	mount -n -o remount,ro /
         	echo $"Automatic reboot in progress."
         	reboot -f
            else
         	echo
         	echo $"*** Warning -- SELinux ${SELINUXTYPE} policy relabel is required."
         	echo $"*** Relabeling could take a very long time, depending on file"
         	echo $"*** system size and speed of hard drives."
         
         	echo "0" > $selinuxfs/enforce
         	/sbin/fixfiles restore > /dev/null 2>&1 
         	rm -f  /.autorelabel 
         	if [ ! -z "$REBOOTFLAG" ]; then 
         	    echo $"Automatic reboot in progress."
         	    reboot -f
         	fi
         	echo $SELINUX_STATE > $selinuxfs/enforce
            fi
        }
        
        key_is_random() {
            [ "$1" = "/dev/urandom" -o "$1" = "/dev/hw_random" \
        	-o "$1" = "/dev/random" ]
        }
        
        # Because of a chicken/egg problem, init_crypto must be run twice.  /var may be
        # encrypted but /var/lib/random-seed is needed to initialize swap.
        init_crypto() {
            local have_random dst src key opt mode owner params makeswap skip arg opt
            local param value rc ret mke2fs mdir
        
            ret=0
            have_random=$1
            while read dst src key opt; do
        	[ -z "$dst" -o "${dst#\#}" != "$dst" ] && continue
                [ -b "/dev/mapper/$dst" ] && continue;
        	if [ "$have_random" = 0 ] && key_is_random "$key"; then
        	    continue
        	fi
        	if [ -n "$key" -a "x$key" != "xnone" ]; then
        	    if test -e "$key" ; then
        		owner=$(ls -l $key | (read a b owner rest; echo $owner))
        		if ! key_is_random "$key"; then
        		    mode=$(ls -l "$key" | cut -c 5-10)
        		    if [ "$mode" != "------" ]; then
        		       echo $"INSECURE MODE FOR $key"
        		    fi
        		fi
        		if [ "$owner" != root ]; then
        		    echo $"INSECURE OWNER FOR $key"
        		fi
        	    else
        		echo $"Key file for $dst not found, skipping"
        		ret=1
        		continue
        	    fi
        	else
        	    key=""
        	fi
        	params=""
        	makeswap=""
        	mke2fs=""
        	skip=""
        	# Parse the src field for UUID= and convert to real device names
        	if [ "${src%%=*}" == "UUID" ]; then
        		src=`/sbin/blkid -t "$src" -o device|(read oneline;echo $oneline)`
        	elif [ "${src/^\/dev\/disk\/by-uuid\/}" != "$src" ]; then
        		src=$(__readlink $src)
        	fi
        	# Parse the options field, convert to cryptsetup parameters
        	# and contruct the command line
        	while [ -n "$opt" ]; do
        	    arg=${opt%%,*}
        	    opt=${opt##$arg}
        	    opt=${opt##,}
        	    param=${arg%%=*}
        	    value=${arg##$param=}
        
        	    case "$param" in
        	    cipher)
        		params="$params -c $value"
        		if [ -z "$value" ]; then
        		    echo $"$dst: no value for cipher option, skipping"
        		    skip="yes"
        		fi
        	    ;;
        	    size)
        		params="$params -s $value"
        		if [ -z "$value" ]; then
        		    echo $"$dst: no value for size option, skipping"
        		    skip="yes"
        		fi
        	    ;;
        	    hash)
        		params="$params -h $value"
        		if [ -z "$value" ]; then
        		    echo $"$dst: no value for hash option, skipping"
        		    skip="yes"
        		fi
        	    ;;
        	    verify)
        	        params="$params -y"
        	    ;;
        	    swap)
        		makeswap=yes
        		;;
        	    tmp)
        		mke2fs=yes
        	    esac
        	done
        	if [ "$skip" = "yes" ]; then
        	    ret=1
        	    continue
        	fi
        	if [ -z "$key" -a -x /usr/bin/rhgb-client ] \
        	    && /usr/bin/rhgb-client --ping ; then
        	    /usr/bin/rhgb-client --quit
        	fi
        	if cryptsetup isLuks "$src" 2>/dev/null; then
        	    if key_is_random "$key"; then
        		echo $"$dst: LUKS requires non-random key, skipping"
        		ret=1
        		continue
        	    fi
        	    if [ -n "$params" ]; then
        		echo "$dst: options are invalid for LUKS partitions," \
        		    "ignoring them"
        	    fi
        	    /sbin/cryptsetup ${key:+-d $key} luksOpen "$src" "$dst" <&1
        	else
        	    /sbin/cryptsetup $params ${key:+-d $key} create "$dst" "$src" <&1 2>/dev/null
        	fi
        	rc=$?
        	if [ $rc -ne 0 ]; then
        	    ret=1
        	    continue
        	fi
        	if [ -b "/dev/mapper/$dst" ]; then
        	    if [ "$makeswap" = "yes" ]; then
        		mkswap "/dev/mapper/$dst" 2>/dev/null >/dev/null
        	    fi
        	    if [ "$mke2fs" = "yes" ]; then
        		if mke2fs "/dev/mapper/$dst" 2>/dev/null >/dev/null \
        		    && mdir=$(mktemp -d /tmp/mountXXXXXX); then
        		    mount "/dev/mapper/$dst" "$mdir" && chmod 1777 "$mdir"
        		    umount "$mdir"
        		    rmdir "$mdir"
        		fi
        	    fi
        	fi
            done < /etc/crypttab
            return $ret
        }
        
        if [ -x /sbin/setsysfont -a -c /dev/tty1 ]; then
           /sbin/setsysfont < /dev/tty1 > /dev/tty1 2>/dev/null
        fi
        
        # Print a text banner.
        echo -en $"\t\tWelcome to "
        read -r redhat_release < /etc/redhat-release
        if [[ "$redhat_release" =~ "Red Hat" ]]; then
         [ "$BOOTUP" = "color" ] && echo -en "\\033[0;31m"
         echo -en "Red Hat"
         [ "$BOOTUP" = "color" ] && echo -en "\\033[0;39m"
         PRODUCT=`sed "s/Red Hat \(.*\) release.*/\1/" /etc/redhat-release`
         echo " $PRODUCT"
        elif [[ "$redhat_release" =~ "Fedora" ]]; then
         [ "$BOOTUP" = "color" ] && echo -en "\\033[0;34m"
         echo -en "Fedora"
         [ "$BOOTUP" = "color" ] && echo -en "\\033[0;39m"
         PRODUCT=`sed "s/Fedora \(.*\) \?release.*/\1/" /etc/redhat-release`
         echo " $PRODUCT"
        else
         PRODUCT=`sed "s/ release.*//g" /etc/redhat-release`
         echo "$PRODUCT"
        fi
        if [ "$PROMPT" != "no" ]; then
         echo -en $"\t\tPress 'I' to enter interactive startup."
         echo
        fi
        
        # Set the system clock.
        update_boot_stage RCclock
        ARC=0
        SRM=0
        UTC=0
        
        if [ -f /etc/sysconfig/clock ]; then
           . /etc/sysconfig/clock
        
           # convert old style clock config to new values
           if [ "${CLOCKMODE}" = "GMT" ]; then
              UTC=true
           elif [ "${CLOCKMODE}" = "ARC" ]; then
              ARC=true
           fi
        fi
        
        CLOCKDEF=""
        CLOCKFLAGS="$CLOCKFLAGS --hctosys"
        
        case "$UTC" in
            yes|true)	CLOCKFLAGS="$CLOCKFLAGS --utc"
        		CLOCKDEF="$CLOCKDEF (utc)" ;;
            no|false)	CLOCKFLAGS="$CLOCKFLAGS --localtime"
        		CLOCKDEF="$CLOCKDEF (localtime)" ;;
        esac
        case "$ARC" in
            yes|true)	CLOCKFLAGS="$CLOCKFLAGS --arc"
        		CLOCKDEF="$CLOCKDEF (arc)" ;;
        esac
        case "$SRM" in
            yes|true)	CLOCKFLAGS="$CLOCKFLAGS --srm"
        		CLOCKDEF="$CLOCKDEF (srm)" ;;
        esac
        
        [ -x /sbin/hwclock ] && /sbin/hwclock $CLOCKFLAGS
        
        action $"Setting clock $CLOCKDEF: `date`" /bin/true
        
        # Fix console loglevel
        if [ -n "$LOGLEVEL" ]; then
        	/bin/dmesg -n $LOGLEVEL
        fi
        
        
        # Only read this once.
        cmdline=$(cat /proc/cmdline)
        
        # Initialize hardware
        if [ -f /proc/sys/kernel/modprobe ]; then
           if ! strstr "$cmdline" nomodules && [ -f /proc/modules ] ; then
               sysctl -w kernel.modprobe="/sbin/modprobe" >/dev/null 2>&1
           else
               # We used to set this to NULL, but that causes 'failed to exec' messages"
               sysctl -w kernel.modprobe="/bin/true" >/dev/null 2>&1
           fi
        fi
        
        touch /dev/.in_sysinit >/dev/null 2>&1
        
        # Set default affinity
        if [ -x /bin/taskset ]; then
           if strstr "$cmdline" default_affinity= ; then
             for arg in $cmdline ; do
                 if [ "${arg##default_affinity=}" != "${arg}" ]; then
                     /bin/taskset -p ${arg##default_affinity=} 1
                 fi
             done
           fi
        fi
        
        nashpid=$(pidof nash 2>/dev/null)
        [ -n "$nashpid" ] && kill $nashpid >/dev/null 2>&1
        unset nashpid
        /sbin/start_udev
        
        # Load other user-defined modules
        for file in /etc/sysconfig/modules/*.modules ; do
          [ -x $file ] && $file
        done
        
        # Load modules (for backward compatibility with VARs)
        if [ -f /etc/rc.modules ]; then
        	/etc/rc.modules
        fi
        
        # Start the graphical boot, if necessary; /usr may not be mounted yet, so we
        # may have to do this again after mounting
        RHGB_STARTED=
        mount -n /dev/pts >/dev/null 2>&1
        [ -n "$SELINUX_STATE" ] && restorecon /dev/pts >/dev/null 2>&1
        
        if strstr "$cmdline" rhgb && ! strstr "$cmdline" early-login && [ "$BOOTUP" = "color" -a "$GRAPHICAL" = "yes" -a -x /usr/bin/rhgb ]; then
           ( . /etc/sysconfig/i18n 2>/dev/null ; /usr/bin/rhgb )
           RHGB_STARTED=1
        fi
        
        # Configure kernel parameters
        update_boot_stage RCkernelparam
        sysctl -e -p /etc/sysctl.conf >/dev/null 2>&1
        
        if [ -x /bin/loadkeys ]; then
         KEYTABLE=
         KEYMAP=
         if [ -f /etc/sysconfig/console/default.kmap ]; then
          KEYMAP=/etc/sysconfig/console/default.kmap
         else
          if [ -f /etc/sysconfig/keyboard ]; then
            . /etc/sysconfig/keyboard
          fi
          if [ -n "$KEYTABLE" -a -d "/lib/kbd/keymaps" ]; then
             KEYMAP="$KEYTABLE.map"
          fi
         fi
         if [ -n "$KEYMAP" ]; then 
          if [ -n "$KEYTABLE" ]; then
            echo -n $"Loading default keymap ($KEYTABLE): "
          else
            echo -n $"Loading default keymap: "
          fi
          LOADKEYS=loadkeys
          if [ "${LANG}" != "${LANG%%.UTF-8}" -o "${LANG}" != "${LANG%%.utf8}" ]; then
          	LOADKEYS="loadkeys -u"
          fi
          $LOADKEYS $KEYMAP < /dev/tty0 > /dev/tty0 2>/dev/null && \
             success $"Loading default keymap" || failure $"Loading default keymap"
          echo
         fi
        fi
        
        # Set the hostname.
        update_boot_stage RChostname
        action $"Setting hostname ${HOSTNAME}: " hostname ${HOSTNAME}
        
        # RAID setup
        update_boot_stage RCraid
        if [ -f /etc/mdadm.conf ]; then
            /sbin/mdadm -A -s --auto=yes
        fi
        
        # Device mapper & related initialization
        if ! __fgrep "device-mapper" /proc/devices >/dev/null 2>&1 ; then
        	modprobe dm-mod >/dev/null 2>&1
        fi
        mkdir -p /dev/mapper >/dev/null 2>&1
        mknod /dev/mapper/control c \
        	$(awk '/ misc$/ { print $1 }' /proc/devices) \
        	$(awk '/ device-mapper$/ { print $1 }' /proc/misc) >/dev/null 2>&1
        [ -n "$SELINUX_STATE" ] && restorecon /dev/mapper /dev/mapper/control >/dev/null 2>&1
        
        if [ -f /etc/crypttab ]; then
            s=$"Starting disk encryption:"
            echo "$s"
            init_crypto 0 && success "$s" || failure "$s"
            echo
        fi
        
        if [ -c /dev/mapper/control ]; then
                if ! strstr "$cmdline" nompath && [ -f /etc/multipath.conf -a \
        			-x /sbin/multipath.static ]; then
        		modprobe dm-multipath > /dev/null 2>&1
        		/sbin/multipath.static -v 0
        		if [ -x /sbin/kpartx ]; then
        			/sbin/dmsetup ls --target multipath --exec "/sbin/kpartx -a -p p"
        		fi
        	fi
        	
        	if ! strstr "$cmdline" nodmraid && [ -x /sbin/dmraid.static ]; then
        		modprobe dm-mirror >/dev/null 2>&1
        		for x in $(/sbin/dmraid.static -ay -i -p -t 2>/dev/null | \
        				egrep -iv "^no " | \
        				(IFS=":";while read a rest;do echo $a;done)) ; do
        			dmname=$(resolve_dm_name $x)
        			[ -z "$dmname" ] && continue
        			/sbin/dmraid.static -ay -i -p "$dmname" >/dev/null 2>&1
        			/sbin/kpartx -a -p p "/dev/mapper/$dmname"
        		done
        	fi
        	
        	if [ -x /sbin/lvm.static ]; then
        		action $"Setting up Logical Volume Management:" /sbin/lvm.static vgchange -a y --ignorelockingfailure
        	fi
        fi
        
        if [ -f /fastboot ] || strstr "$cmdline" fastboot ; then
        	fastboot=yes
        fi
        
        if [ -f /fsckoptions ]; then
        	fsckoptions=`cat /fsckoptions`
        fi
        
        if [ -f /forcefsck ] || strstr "$cmdline" forcefsck ; then
        	fsckoptions="-f $fsckoptions"
        elif [ -f /.autofsck ]; then
        	[ -f /etc/sysconfig/autofsck ] && . /etc/sysconfig/autofsck
        	if [ "$AUTOFSCK_DEF_CHECK" = "yes" ]; then
        		AUTOFSCK_OPT="$AUTOFSCK_OPT -f"
        	fi
        	if [ -n "$AUTOFSCK_SINGLEUSER" ]; then
        		echo
        		echo $"*** Warning -- the system did not shut down cleanly. "
        		echo $"*** Dropping you to a shell; the system will continue"
        		echo $"*** when you leave the shell."
        		[ -n "$SELINUX_STATE" ] && echo "0" > $selinuxfs/enforce
        		sulogin
        		[ -n "$SELINUX_STATE" ] && echo "1" > $selinuxfs/enforce
        	fi
        	fsckoptions="$AUTOFSCK_OPT $fsckoptions"
        fi
        
        if [ "$BOOTUP" = "color" ]; then
        	fsckoptions="-C $fsckoptions"
        else
        	fsckoptions="-V $fsckoptions"
        fi
        
        READONLY=
        if [ -f /etc/sysconfig/readonly-root ]; then
        	. /etc/sysconfig/readonly-root
        fi
        if strstr "$cmdline" readonlyroot ; then
        	READONLY=yes
        	[ -z "$RW_MOUNT" ] && RW_MOUNT=/var/lib/stateless/writable
        	[ -z "$STATE_MOUNT" ] && STATE_MOUNT=/var/lib/stateless/state
        fi
        if strstr "$cmdline" noreadonlyroot ; then
        	READONLY=no
        fi
        
        if [ "$READONLY" = "yes" -o "$TEMPORARY_STATE" = "yes" ]; then
        
        	mount_empty() {
        		if [ -e "$1" ]; then
        			echo "$1" | cpio -p -vd "$RW_MOUNT" &>/dev/null
        			mount -n --bind "$RW_MOUNT$1" "$1"
        		fi
        	}
        
        	mount_dirs() {
        		if [ -e "$1" ]; then
        			mkdir -p "$RW_MOUNT$1"
        			# fixme: find is bad
        			find "$1" -type d -print0 | cpio -p -0vd "$RW_MOUNT" &>/dev/null
        			mount -n --bind "$RW_MOUNT$1" "$1"
        		fi
        	}
        
        	mount_files() {
        		if [ -e "$1" ]; then
        			cp -a --parents "$1" "$RW_MOUNT"
        			mount -n --bind "$RW_MOUNT$1" "$1"
        		fi
        	}
        
        	# Common mount options for scratch space regardless of 
        	# type of backing store
        	mountopts=
        
        	# Scan partitions for local scratch storage
        	rw_mount_dev=$(blkid -t LABEL="$RW_LABEL" -o device | awk '{ print ; exit }')
        
        	# First try to mount scratch storage from /etc/fstab, then any
        	# partition with the proper label.  If either succeeds, be sure
        	# to wipe the scratch storage clean.  If both fail, then mount
        	# scratch storage via tmpfs.
        	if mount $mountopts "$RW_MOUNT" > /dev/null 2>&1 ; then
        		rm -rf "$RW_MOUNT" > /dev/null 2>&1
        	elif [ x$rw_mount_dev != x ] && mount $rw_mount_dev $mountopts "$RW_MOUNT" > /dev/null 2>&1; then
        		rm -rf "$RW_MOUNT"  > /dev/null 2>&1
        	else
        		mount -n -t tmpfs $RW_OPTIONS $mountopts none "$RW_MOUNT"
        	fi
        
        	for file in /etc/rwtab /etc/rwtab.d/* ; do
        		is_ignored_file "$file" && continue
                	[ -f $file ] && cat $file | while read type path ; do
        			case "$type" in
        				empty)
        					mount_empty $path
        					;;
        				files)
        					mount_files $path
        					;;
        				dirs)
        					mount_dirs $path
        					;;
        				*)
        					;;
        			esac
        			[ -n "$SELINUX_STATE" -a -e "$path" ] && restorecon -R "$path"
        		done
        	done
        
        	# In theory there should be no more than one network interface active
        	# this early in the boot process -- the one we're booting from.
        	# Use the network address to set the hostname of the client.  This
        	# must be done even if we have local storage.
        	ipaddr=
        	if [ "$HOSTNAME" = "localhost" -o "$HOSTNAME" = "localhost.localdomain" ]; then
        		ipaddr=$(ip addr show to 0/0 scope global | awk '/[[:space:]]inet / { print gensub("/.*","","g",$2) }')
        		if [ -n "$ipaddr" ]; then
        			eval $(ipcalc -h $ipaddr 2>/dev/null)
        			hostname ${HOSTNAME}
        		fi
        	fi
        	
        	# Clients with read-only root filesystems may be provided with a
        	# place where they can place minimal amounts of persistent
        	# state.  SSH keys or puppet certificates for example.
        	#
        	# Ideally we'll use puppet to manage the state directory and to
        	# create the bind mounts.  However, until that's all ready this
        	# is sufficient to build a working system.
        
        	# First try to mount persistent data from /etc/fstab, then any
        	# partition with the proper label, then fallback to NFS
        	state_mount_dev=$(blkid -t LABEL="$STATE_LABEL" -o device | awk '{ print ; exit }')
        	if mount $mountopts $STATE_OPTIONS "$STATE_MOUNT" > /dev/null 2>&1 ; then
        		/bin/true
        	elif [ x$state_mount_dev != x ] && mount $state_mount_dev $mountopts "$STATE_MOUNT" > /dev/null 2>&1;  then
        		/bin/true
        	elif [ -n "$CLIENTSTATE" ]; then
        		# No local storage was found.  Make a final attempt to find 
        		# state on an NFS server.
        
        		mount -t nfs $CLIENTSTATE/$HOSTNAME $STATE_MOUNT -o rw,nolock
        	fi
        
        	if [ -w "$STATE_MOUNT" ]; then
        
        		mount_state() {
        			if [ -e "$1" ]; then
        				[ ! -e "$STATE_MOUNT$1" ] && cp -a --parents "$1" "$STATE_MOUNT"
        				mount -n --bind "$STATE_MOUNT$1" "$1"
        			fi
        		}
        
        		for file in /etc/statetab /etc/statetab.d/* ; do
        			is_ignored_file "$file" && continue
        			[ ! -f "$file" ] && continue
        
        			if [ -f "$STATE_MOUNT/$file" ] ; then
        				mount -n --bind "$STATE_MOUNT/$file" "$file"
        			fi
        
        			for path in $(grep -v "^#" "$file" 2>/dev/null); do
        				mount_state "$path"
        				[ -n "$SELINUX_STATE" -a -e "$path" ] && restorecon -R "$path"
        			done
        		done
        
        		if [ -f "$STATE_MOUNT/files" ] ; then
        			for path in $(grep -v "^#" "$STATE_MOUNT/files" 2>/dev/null); do
        				mount_state "$path"
        				[ -n "$SELINUX_STATE" -a -e "$path" ] && restorecon -R "$path"
        			done
        		fi
        	fi
        fi
         
        if ! [[ " $fsckoptions" =~ " -y" ]]; then
            	fsckoptions="-a $fsckoptions"
        fi
        
        _RUN_QUOTACHECK=0
        if [ -f /forcequotacheck ] || strstr "$cmdline" forcequotacheck ; then
        	_RUN_QUOTACHECK=1
        fi
        if [ -z "$fastboot" -a "$READONLY" != "yes" ]; then
        
                STRING=$"Checking filesystems"
        	echo $STRING
        	if [ -n "${RHGB_STARTED}" -a -w /etc/rhgb/temp/rhgb-console ]; then
        		fsck -T -t noopts=_netdev -A $fsckoptions > /etc/rhgb/temp/rhgb-console
        	else
        		fsck -T -t noopts=_netdev -A $fsckoptions
        	fi
        	rc=$?
        	
        	if [ "$rc" -eq "0" ]; then
        		success "$STRING"
        		echo
        	elif [ "$rc" -eq "1" ]; then
        	        passed "$STRING"
        		echo
        	elif [ "$rc" -eq "2" -o "$rc" -eq "3" ]; then 
        		echo $"Unmounting file systems"
        		umount -a
        		mount -n -o remount,ro /
        		echo $"Automatic reboot in progress."
        		reboot -f
                fi
        	
                # A return of 4 or higher means there were serious problems.
        	if [ $rc -gt 1 ]; then
        	        if [ -x /usr/bin/rhgb-client ] && /usr/bin/rhgb-client --ping ; then
        		    /usr/bin/rhgb-client --quit
        		fi
        
        		failure "$STRING"
        		echo
        		echo
        		echo $"*** An error occurred during the file system check."
        		echo $"*** Dropping you to a shell; the system will reboot"
        		echo $"*** when you leave the shell."
        
                        str=$"(Repair filesystem)"
        		PS1="$str \# # "; export PS1
        		[ "$SELINUX_STATE" = "1" ] && disable_selinux
        		sulogin
        
        		echo $"Unmounting file systems"
        		umount -a
        		mount -n -o remount,ro /
        		echo $"Automatic reboot in progress."
        		reboot -f
        	elif [ "$rc" -eq "1" ]; then
        		_RUN_QUOTACHECK=1
        	fi
        fi
        
        
        # Remount the root filesystem read-write.
        update_boot_stage RCmountfs
        state=`LC_ALL=C awk '/ \/ / && ($3 !~ /rootfs/) { print $4 }' /proc/mounts`
        [ "$state" != "rw" -a "$READONLY" != "yes" ] && \
          action $"Remounting root filesystem in read-write mode: " mount -n -o remount,rw /
        
        # Clean up SELinux labels
        if [ -n "$SELINUX_STATE" ]; then
           restorecon /etc/mtab /etc/ld.so.cache /etc/blkid/blkid.tab /etc/resolv.conf >/dev/null 2>&1
        fi
        
        # If relabeling, relabel mount points.
        if [ -n "$SELINUX_STATE" -a "$READONLY" != "yes" ]; then 
            if [ -f /.autorelabel ] || strstr "$cmdline" autorelabel ; then
        	retstorecon $(awk '!/^#/ && $4 !~ /noauto/ { print $2 }' /etc/fstab) >/dev/null 2>&1
            fi
        fi
        
        # Clear mtab
        (> /etc/mtab) &> /dev/null
        
        # Remove stale backups
        rm -f /etc/mtab~ /etc/mtab~~
        
        # Enter mounted filesystems into /etc/mtab
        mount -f /
        mount -f /proc >/dev/null 2>&1
        mount -f /sys >/dev/null 2>&1
        mount -f /dev/pts >/dev/null 2>&1
        mount -f /proc/bus/usb >/dev/null 2>&1
        
        # Mount all other filesystems (except for NFS and /proc, which is already
        # mounted). Contrary to standard usage,
        # filesystems are NOT unmounted in single user mode.
        action $"Mounting local filesystems: " mount -a -t nonfs,nfs4,smbfs,ncpfs,cifs,gfs,gfs2 -O no_netdev
        
        # Update quotas if necessary
        if [ X"$_RUN_QUOTACHECK" = X1 -a -x /sbin/quotacheck ]; then
        	action $"Checking local filesystem quotas: " /sbin/quotacheck -anug
        fi
        
        if [ -x /sbin/quotaon ]; then
            action $"Enabling local filesystem quotas: " /sbin/quotaon -aug
        fi
        
        # Check to see if a full relabel is needed
        if [ -n "$SELINUX_STATE" -a "$READONLY" != "yes" ]; then 
            if [ -f /.autorelabel ] || strstr "$cmdline" autorelabel ; then
        	relabel_selinux
            fi
        else
            if [ -d /etc/selinux -a "$READONLY" != "yes" ]; then
                [ -f /.autorelabel ] || touch /.autorelabel
            fi
        fi
        
        
        # Start the graphical boot, if necessary and not done yet.
        if strstr "$cmdline" rhgb && ! strstr "$cmdline" early-login && [ -z "$RHGB_STARTED" -a "$BOOTUP" = "color" -a "$GRAPHICAL" = "yes" -a -x /usr/bin/rhgb ]; then
           ( . /etc/sysconfig/i18n 2>/dev/null ; /usr/bin/rhgb )
           RHGB_STARTED=1
        fi
        
        # Initialize pseudo-random number generator
        if [ -f "/var/lib/random-seed" ]; then
        	cat /var/lib/random-seed > /dev/urandom
        else
        	[ "$READONLY" != "yes" ] && touch /var/lib/random-seed
        fi
        if [ "$READONLY" != "yes" ]; then
        	chmod 600 /var/lib/random-seed
        	dd if=/dev/urandom of=/var/lib/random-seed count=1 bs=512 2>/dev/null
        fi
        
        # Use the hardware RNG to seed the entropy pool, if available
        #[ -x /sbin/rngd -a -c /dev/hw_random ] && rngd
        
        if [ -f /etc/crypttab ]; then
            s=$"Starting disk encryption using the RNG:"
            echo "$s"
            init_crypto 1 && success "$s" || failure "$s"
            echo
        fi
        
        # Configure machine if necessary.
        if [ -f /.unconfigured ]; then
            if [ -x /usr/bin/rhgb-client ] && /usr/bin/rhgb-client --ping ; then
        	/usr/bin/rhgb-client --quit
            fi
        
            if [ -x /usr/bin/system-config-keyboard ]; then
        	/usr/bin/system-config-keyboard
            fi
            if [ -x /usr/bin/passwd ]; then 
                /usr/bin/passwd root
            fi
            if [ -x /usr/sbin/netconfig ]; then
        	/usr/sbin/netconfig
            fi
            if [ -x /usr/sbin/timeconfig ]; then
        	/usr/sbin/timeconfig
            fi
            if [ -x /usr/sbin/authconfig ]; then
        	/usr/sbin/authconfig --nostart
            fi
            if [ -x /usr/sbin/ntsysv ]; then
        	/usr/sbin/ntsysv --level 35
            fi
        
            # Reread in network configuration data.
            if [ -f /etc/sysconfig/network ]; then
        	. /etc/sysconfig/network
        
        	# Reset the hostname.
        	action $"Resetting hostname ${HOSTNAME}: " hostname ${HOSTNAME}
            fi
        
            rm -f /.unconfigured
        fi
        
        # Clean out /.
        rm -f /fastboot /fsckoptions /forcefsck /.autofsck /forcequotacheck /halt \
        	/poweroff &> /dev/null
        
        # Do we need (w|u)tmpx files? We don't set them up, but the sysadmin might...
        _NEED_XFILES=
        [ -f /var/run/utmpx -o -f /var/log/wtmpx ] && _NEED_XFILES=1
        
        # Clean up /var.  I'd use find, but /usr may not be mounted.
        for afile in /var/lock/* /var/run/* ; do
        	if [ -d "$afile" ]; then
        	   case "$afile" in
        		*/news|*/mon)	;;
        		*/sudo)		rm -f $afile/*/* ;;
        		*/vmware)	rm -rf $afile/*/* ;;
        		*/samba)	rm -rf $afile/*/* ;;
        		*/screen)	rm -rf $afile/* ;;
        		*/cvs)		rm -rf $afile/* ;;
        		*/dovecot)	rm -f $afile/*/* ;;
        		*/cups)		rm -f $afile/*/* ;;
        		*)		rm -f $afile/* ;;
        	   esac
        	else
        	   rm -f $afile
        	fi
        done
        rm -f /var/lib/rpm/__db* &> /dev/null
        rm -f /var/gdm/.gdmfifo &> /dev/null
        
        # Reset pam_console permissions
        [ -x /sbin/pam_console_apply ] && /sbin/pam_console_apply -r
        
        {
        # Clean up utmp/wtmp
        > /var/run/utmp
        touch /var/log/wtmp
        chgrp utmp /var/run/utmp /var/log/wtmp
        chmod 0664 /var/run/utmp /var/log/wtmp
        if [ -n "$_NEED_XFILES" ]; then
          > /var/run/utmpx
          touch /var/log/wtmpx
          chgrp utmp /var/run/utmpx /var/log/wtmpx
          chmod 0664 /var/run/utmpx /var/log/wtmpx
        fi
        
        # Clean up various /tmp bits
        [ -n "$SELINUX_STATE" ] && restorecon /tmp
        rm -f /tmp/.X*-lock /tmp/.lock.* /tmp/.gdm_socket /tmp/.s.PGSQL.*
        rm -rf /tmp/.X*-unix /tmp/.ICE-unix /tmp/.font-unix /tmp/hsperfdata_* \
               /tmp/kde-* /tmp/ksocket-* /tmp/mc-* /tmp/mcop-* /tmp/orbit-*  \
               /tmp/scrollkeeper-*  /tmp/ssh-* \
               /dev/.in_sysinit
        
        # Make ICE directory
        mkdir -m 1777 -p /tmp/.ICE-unix >/dev/null 2>&1
        chown root:root /tmp/.ICE-unix
        [ -n "$SELINUX_STATE" ] && restorecon /tmp/.ICE-unix >/dev/null 2>&1
        
        # Start up swapping.
        update_boot_stage RCswap
        action $"Enabling /etc/fstab swaps: " swapon -a -e
        if [ "$AUTOSWAP" = "yes" ]; then
        	curswap=$(awk '/^\/dev/ { print $1 }' /proc/swaps | while read x; do get_numeric_dev dec $x ; echo -n " "; done)
        	swappartitions=`blkid -t TYPE=swap -o device`
        	if [ x"$swappartitions" != x ]; then
        		for partition in $swappartitions ; do
        			[ ! -e $partition ] && continue
        			majmin=$(get_numeric_dev dec $partition)
        			echo $curswap | grep -qw "$majmin" || action $"Enabling local swap partitions: " swapon $partition
        		done
        	fi
        fi
        
        # Set up binfmt_misc
        /bin/mount -t binfmt_misc none /proc/sys/fs/binfmt_misc > /dev/null 2>&1
        
        # Boot time profiles. Yes, this should be somewhere else.
        if [ -x /usr/sbin/system-config-network-cmd ]; then
          if strstr "$cmdline" netprofile= ; then
            for arg in $cmdline ; do
                if [ "${arg##netprofile=}" != "${arg}" ]; then
        	    /usr/sbin/system-config-network-cmd --profile ${arg##netprofile=}
                fi
            done
          fi
        fi
        
        # Now that we have all of our basic modules loaded and the kernel going,
        # let's dump the syslog ring somewhere so we can find it later
        dmesg -s 131072 > /var/log/dmesg
        
        # create the crash indicator flag to warn on crashes, offer fsck with timeout
        touch /.autofsck &> /dev/null
        
        if [ "$PROMPT" != no ]; then
            while :; do
        	pid=$(/sbin/pidof getkey)
        	[ -n "$pid" -o -e /var/run/getkey_done ] && break
        	usleep 100000
            done
            [ -n "$pid" ] && kill -TERM "$pid" >/dev/null 2>&1
        fi
        } &
        if strstr "$cmdline" confirm ; then
        	touch /var/run/confirm
        fi
        if [ "$PROMPT" != "no" ]; then
        	/sbin/getkey i && touch /var/run/confirm
        	touch /var/run/getkey_done
        fi
        wait
        [ "$PROMPT" != no ] && rm -f /var/run/getkey_done
        
        # Let rhgb know that we're leaving rc.sysinit
        if [ -x /usr/bin/rhgb-client ] && /usr/bin/rhgb-client --ping ; then
            /usr/bin/rhgb-client --sysinit
        fi
        نروح ندور الي يعطينا عند الاقلاع زي هذا
        كود:
        Welcome to Fedora 
        Press 'I'to enter interactive startup
        حصلناه
        كود:
        # Print a text banner.
        echo -en $"\t\tWelcome to "
        read -r redhat_release < /etc/redhat-release
        if [[ "$redhat_release" =~ "Red Hat" ]]; then
         [ "$BOOTUP" = "color" ] && echo -en "\\033[0;31m"
         echo -en "Red Hat"
         [ "$BOOTUP" = "color" ] && echo -en "\\033[0;39m"
         PRODUCT=`sed "s/Red Hat \(.*\) release.*/\1/" /etc/redhat-release`
         echo " $PRODUCT"
        elif [[ "$redhat_release" =~ "Fedora" ]]; then
         [ "$BOOTUP" = "color" ] && echo -en "\\033[0;34m"
         echo -en "Fedora"
         [ "$BOOTUP" = "color" ] && echo -en "\\033[0;39m"
         PRODUCT=`sed "s/Fedora \(.*\) \?release.*/\1/" /etc/redhat-release`
         echo " $PRODUCT"
        else
         PRODUCT=`sed "s/ release.*//g" /etc/redhat-release`
         echo "$PRODUCT"
        fi
        if [ "$PROMPT" != "no" ]; then
         echo -en $"\t\tPress 'I' to enter interactive startup."
         echo
        fi


        ناخذ نسخه من الملف : rc.sysinit
        ونحطها على سطح المكتب
        يعني نسخ وتسوي لصق في سطح المكتب
        بعدين تفتح الملف وتمسح الي فيه كله
        وتحط بس هذا علشان نجرب وحتى لو سويت اختبار للملف مايسوي لك اعادة تشغيل
        كود:
        NORMAL="[0;39m"
        RED="[1;31m"
        GREEN="[1;32m"
        YELLOW="[1;33m"
        BLUE="[1;34m"
        MAGENTA="[1;35m"
        CYAN="[1;36m"
        WHITE="[1;37m"
        GRAY="[1;38m"
        
        . /etc/init.d/functions
        
        # Print a text banner.
        echo -en $"\t\tWelcome to "
        read -r redhat_release < /etc/redhat-release
        if [[ "$redhat_release" =~ "Red Hat" ]]; then
         [ "$BOOTUP" = "color" ] && echo -en "\\033[0;31m"
         echo -en "Red Hat"
         [ "$BOOTUP" = "color" ] && echo -en "\\033[0;39m"
         PRODUCT=`sed "s/Red Hat \(.*\) release.*/\1/" /etc/redhat-release`
         echo " $PRODUCT"
        elif [[ "$redhat_release" =~ "Fedora" ]]; then
         [ "$BOOTUP" = "color" ] && echo -en "\\033[0;34m"
         echo -en "Fedora"
         [ "$BOOTUP" = "color" ] && echo -en "\\033[0;39m"
         PRODUCT=`sed "s/Fedora \(.*\) \?release.*/\1/" /etc/redhat-release`
         echo " $PRODUCT"
        else
         PRODUCT=`sed "s/ release.*//g" /etc/redhat-release`
         echo "$PRODUCT"
        fi
        if [ "$PROMPT" != "no" ]; then
         echo -en $"\t\tPress 'I' to enter interactive startup."
         echo
        fi
        لو تلاحظ اضفنا في اول شيء الاوان مو كلها بعضها الي بنستخدمها للمثال واضافة الاوان وفيه طريقتين لأضافة الاوان وابشرحهم كلهم
        اول شيء الان لازم نفهم الكود كيف عمله
        نجي نحفظ الملف بعدين نروح الى سطر الاوامر نقول نفرض الملف الي حفظناه في سطح المكتب
        نكتب
        كود:
        [root@localhost Desktop]# bash rc.sysinit
        بيطبع لنا كما في الصورة:

        الحين بنغير الاولن فيه كيف زي كذا
        اروح للسطر هذا
        كود:
        elif [[ "$redhat_release" =~ "Fedora" ]]; then
         [ "$BOOTUP" = "color" ] && echo -en "\\033[0;34m"
        ونغير 34 الي هو معناه اللون الازرق الى نقول فرضا لون الاخضر بيصير زي كذا
        كود:
        elif [[ "$redhat_release" =~ "Fedora" ]]; then
         [ "$BOOTUP" = "color" ] && echo -en "\\033[0;32m"
        بيطلع شكله كما في الصورة

        كما تلاحض غيرنا فيدورا من ازرق الى اخضر
        وهاذي الطريقة الاولى ولاتحتاج ان تضيف الاوان في الملف
        الطريقة الثانية وهي التي بنستعمل فيها
        كود:
        NORMAL="[0;39m"
        RED="[1;31m"
        GREEN="[1;32m"
        YELLOW="[1;33m"
        BLUE="[1;34m"
        MAGENTA="[1;35m"
        CYAN="[1;36m"
        WHITE="[1;37m"
        GRAY="[1;38m"
        نعدل الملف كالاتي
        كود:
        NORMAL="[0;39m"
        RED="[1;31m"
        GREEN="[1;32m"
        YELLOW="[1;33m"
        BLUE="[1;34m"
        MAGENTA="[1;35m"
        CYAN="[1;36m"
        WHITE="[1;37m"
        GRAY="[1;38m"
        . /etc/init.d/functions
        
        # Print a text banner.
        echo -en ${RED}"\t\tWelcome to "
        read -r redhat_release < /etc/redhat-release
        if [[ "$redhat_release" =~ "Red Hat" ]]; then
         [ "$BOOTUP" = "color" ] && echo -en "\\033[0;31m"
         echo -en "Red Hat"
         [ "$BOOTUP" = "color" ] && echo -en "\\033[0;39m"
         PRODUCT=`sed "s/Red Hat \(.*\) release.*/\1/" /etc/redhat-release`
         echo " $PRODUCT"
        elif [[ "$redhat_release" =~ "Fedora" ]]; then
         [ "$BOOTUP" = "color" ] && echo -en "\\033[0;34m"
         echo -en "${WHITE}F${RED}e${YELLOW}d${GREEN}o${RED}r${CYAN}a"
         [ "$BOOTUP" = "color" ] && echo -en "\\033[0;39m"
         PRODUCT=`sed "s/Fedora \(.*\) \?release.*/\1/" /etc/redhat-release`
         echo " $PRODUCT"
        else
         PRODUCT=`sed "s/ release.*//g" /etc/redhat-release`
         echo "$PRODUCT"
        fi
        if [ "$PROMPT" != "no" ]; then
         echo -en "${WHITE}Press '${RED}I'${WHITE}to enter interactive startup."
         echo
        fi
        واحفظ
        بيطلع شكله كما في الصورة

        تروح تعدل الملف الاصلي كما عدلنا اي الكلام الي نسخناه فقط مو تمسح الي فيه كله وتروح تعدل الباقي يعني مثل اذا طلع المعالج بلون و اي شيء ثاني بلون تشوف الامر الي ينسخ المعالج وتضيف الكود بس
        ارجو اني وضحت الصورة واسف على التقصير وارجو ان من الادارة ان ترفع الصور على سيرفر المنتدى ليستفيدو الاخوه

        تعليق


        • #5
          اخي الف شكرعلى ردك المتعوب فيه جامد
          اسكربت البوت لدي المشار اليه في inttab هو
          sysinit:/etc/init.d/rcS

          ولما افتحه لا اجد غير سطر واحد بس وهو

          exec /etc/init.d/rc S
          قل وداعاً للشاشات الزرقاء مع جنو لينكس

          تعليق


          • #6
            شي جميل وياليت صاحب الموضوع يتابع لاني برضوو نفس مشكله ياسر
            :argeeleh:
            Twitter
            : @Linux4SA

            تعليق


            • #7
              العفو عزيزي

              وابشرو اليوم ان شاء الله ابنزل الدبيان واشرح عليها

              تعليق

              يعمل...
              X
              😀
              🥰
              🤢
              😎
              😡
              👍
              👎