raspi-config의 스크립트는 Raspbian의 FS에 어디에 저장되어 있습니까?


14

raspi-config 스크립트를 사용하면 처음 부팅 할 때 편리하게 설정할 수 있지만, Raspberry Pi를 사용하는 이유 중 하나는 내 컴퓨터의 메뉴 뒤에서 진행되는 작업을 배우도록 돕는 것입니다.

raspi-config 스크립트를보고 작동 방식을 이해하고 싶습니다. 온라인에서 부분 스크립트를 찾았지만 config.txt 파일을 편집하는 부분 만 포함되어 있으며 그 외의 영향과 방법에 관심이 있습니다.

raspi-script에 대한 전체 텍스트를보고 싶지만 파일 시스템에서 아직 찾지 못했습니다. 누군가 위치를 제공 할 수 있습니까?

현재로서는 어떻게 작동하는지 설명하고 싶지 않습니다. 나는 그것을 스스로 알아 내려고 노력하고 싶다. (나중에 질문이 될 수도 있지만)


이 답변은 모두 정확하고 도움이되었습니다. 나는 스티브를 선택했는데, 그중에서 가장 많이 배웠기 때문입니다.
zenbike

답변:


12

다른 답변은 모두 정확하며 파일 작동 방식을보고 연구 할 수 있습니다. 그러나, 당신에게 물고기를주기보다는 물고기에게 가르치라는 생각으로, 다음을 수행하면 시스템에서 파일을 찾는 데 도움이됩니다.

sudo find / -name 'raspi-config'

세분화 :

sudo 는 시스템에 루트 권한으로이 명령을 실행하도록 지시합니다. 이렇게하면 일반 사용자 (pi)가 액세스 할 수없는 디렉토리에서 시스템을 혼란시키는 많은 오류가 발생하지 않습니다.

찾아 파일 및 디렉터리를 찾을 수있는 리눅스 명령의 이름을.

/ 는 find 명령에게 파일 시스템의 루트와 모든 하위 디렉토리를 검색하도록 지시합니다.

-name 은 find 명령이 파일 이름으로 검색하도록 지시합니다.

'raspi-config' 이것은 검색중인 파일 이름입니다.

다른 파일을 찾으려면 raspi-config를 찾고있는 파일 이름으로 바꾸십시오. find 명령에는 다른 많은 옵션이 있으며 다음을 입력하여 대부분의 Linux 명령에 대한 모든 세부 사항을 찾을 수 있습니다

man find

명령 행에서.

Man은 manual의 약자이며 뒤에 나오는 Linux 명령에 대한 매뉴얼 페이지 (도움말 페이지)를 인쇄합니다.


이 사이트가 졸업되면 사람들에게 낚시하는 법을 가르 칠 수 있습니다. = P

4
나는이 사고 방식을 좋아한다. 학습은 우리가 Pi에있는 이유입니다. :)
zenbike

1
mlocate오히려 봐 find. 이 유형의 작업에서는 훨씬 빠릅니다.
Jivings

아래에서 아래를보십시오.

18

raspi-config파일 의 전체 경로 는 /usr/bin/raspi-config다음과 같습니다.

pi@raspberrypi ~ $ which raspi-config
/usr/bin/raspi-config

1
whichfind어떤 파일이 호출되는지 알려주기 때문에 사용 하는 것 보다 더 나은 대답 입니다. find둘 다 시간이 더 걸리고 찾고있는 이름의 파일을 얼마든지 만들 수 있습니다.
Oli

4

raspi-config파일 시스템에서 찾을 위치를 정확하게 말할 수는 없지만 소스 파일은 GitHub에서 호스팅됩니다 .

그것은 공식 Raspberry Pi 포럼의 중재자 인 것처럼 보이는 asb가 만든 도구입니다 . asb / raspi-config 에서 소스를 찾을 수 있습니다 .

편집 : 이것은 위의 git repo에서 가져온 전체 코드입니다.

#!/bin/sh
# Part of raspi-config http://github.com/asb/raspi-config
#
# See LICENSE file for copyright and license details


if [ $(id -u) -ne 0 ]; then
  printf "Script must be run as root. Try 'sudo raspi-config'\n"
  exit 1
fi

ASK_TO_REBOOT=0

do_info() {
  whiptail --msgbox "\
This tool provides a straight-forward way of doing initial 
configuration of the Raspberry Pi. Although it can be run 
at any time, some of the options may have difficulties if 
you have heavily customised your installation.\
" 20 70 1
}

do_expand_rootfs() {
  # Get the starting offset of the root partition
  PART_START=$(parted /dev/mmcblk0 -ms unit s p | grep "^2" | cut -f 2 -d:)
  [ "$PART_START" ] || return 1
  # Return value will likely be error for fdisk as it fails to reload the 
  # partition table because the root fs is mounted
  fdisk /dev/mmcblk0 <<EOF
p
d
2
n
p
2
$PART_START

p
w
EOF
  ASK_TO_REBOOT=1

  # now set up an init.d script
cat <<\EOF > /etc/init.d/resize2fs_once &&
#!/bin/sh
### BEGIN INIT INFO
# Provides:          resize2fs_once
# Required-Start:
# Required-Stop:
# Default-Start: 2 3 4 5 S
# Default-Stop:
# Short-Description: Resize the root filesystem to fill partition
# Description:
### END INIT INFO

. /lib/lsb/init-functions

case "$1" in
  start)
    log_daemon_msg "Starting resize2fs_once" &&
    resize2fs /dev/mmcblk0p2 &&
    rm /etc/init.d/resize2fs_once &&
    update-rc.d resize2fs_once remove &&
    log_end_msg $?
    ;;
  *)
    echo "Usage: $0 start" >&2
    exit 3
    ;;
esac
EOF
  chmod +x /etc/init.d/resize2fs_once &&
  update-rc.d resize2fs_once defaults &&
  whiptail --msgbox "Root partition has been resized.\n\
The filesystem will be enlarged upon the next reboot" 20 60 2
}

set_config_var() {
  lua - "$1" "$2" "$3" <<EOF > "$3.bak"
local key=assert(arg[1])
local value=assert(arg[2])
local fn=assert(arg[3])
local file=assert(io.open(fn))
local made_change=false
for line in file:lines() do
  if line:match("^#?%s*"..key.."=.*$") then
    line=key.."="..value
    made_change=true
  end
  print(line)
end

if not made_change then
  print(key.."="..value)
end
EOF
mv "$3.bak" "$3"
}

# $1 is 0 to disable overscan, 1 to disable it
set_overscan() {
  # Stop if /boot is not a mountpoint
  if ! mountpoint -q /boot; then
    return 1
  fi

  [ -e /boot/config.txt ] || touch /boot/config.txt

  if [ "$1" -eq 0 ]; then # disable overscan
    sed /boot/config.txt -i -e "s/^overscan_/#overscan_/"
    set_config_var disable_overscan 1 /boot/config.txt
  else # enable overscan
    set_config_var disable_overscan 0 /boot/config.txt
  fi
}

do_overscan() {
  whiptail --yesno "What would you like to do with overscan" 20 60 2 \
    --yes-button Disable --no-button Enable 
  RET=$?
  if [ $RET -eq 0 ] || [ $RET -eq 1 ]; then
    ASK_TO_REBOOT=1
    set_overscan $RET;
  else
    return 1
  fi
}

do_change_pass() {
  whiptail --msgbox "You will now be asked to enter a new password for the pi user" 20 60 1
  passwd pi &&
  whiptail --msgbox "Password changed successfully" 20 60 1
}

do_configure_keyboard() {
  dpkg-reconfigure keyboard-configuration &&
  printf "Reloading keymap. This may take a short while\n" &&
  invoke-rc.d keyboard-setup start
}

do_change_locale() {
  dpkg-reconfigure locales
}

do_change_timezone() {
  dpkg-reconfigure tzdata
}

do_memory_split() {
  # Stop if /boot is not a mountpoint
  if ! mountpoint -q /boot; then
    return 1
  fi
  MEMSPLIT=$(whiptail --menu "Set memory split" 20 60 10 \
    "224" "224MiB for ARM, 32MiB for VideoCore" \
    "192" "192MiB for ARM, 64MiB for VideoCore" \
    "128" "128MiB for ARM, 128MiB for VideoCore" \
    3>&1 1>&2 2>&3)
  if [ $? -eq 0 ]; then
    cp -a /boot/arm${MEMSPLIT}_start.elf /boot/start.elf
    sync
    ASK_TO_REBOOT=1
  fi
}

do_ssh() {
  if [ -e /var/log/regen_ssh_keys.log ] && ! grep -q "^finished" /var/log/regen_ssh_keys.log; then
    whiptail --msgbox "Initial ssh key generation still running. Please wait and try again." 20 60 2
    return 1
  fi
  whiptail --yesno "Would you like the SSH server enabled or disabled?" 20 60 2 \
    --yes-button Enable --no-button Disable 
  RET=$?
  if [ $RET -eq 0 ]; then
    update-rc.d ssh enable &&
    invoke-rc.d ssh start &&
    whiptail --msgbox "SSH server enabled" 20 60 1
  elif [ $RET -eq 1 ]; then
    update-rc.d ssh disable &&
    whiptail --msgbox "SSH server disabled" 20 60 1
  else
    return $RET
  fi
}

do_boot_behaviour() {
  whiptail --yesno "Should we boot straight to desktop?" 20 60 2
  RET=$?
  if [ $RET -eq 0 ]; then # yes
    update-rc.d lightdm enable 2
    sed /etc/lightdm/lightdm.conf -i -e "s/^#autologin-user=.*/autologin-user=pi/"
    ASK_TO_REBOOT=1
  elif [ $RET -eq 1 ]; then # no
    update-rc.d lightdm disable 2
    ASK_TO_REBOOT=1
  else # user hit escape
    return 1
  fi
}

do_update() {
  apt-get update &&
  apt-get install raspi-config &&
  printf "To start raspi-config again, do 'sudo raspi-config'. Now exiting\n"
  exit 0
}

do_finish() {
  if [ -e /etc/profile.d/raspi-config.sh ]; then
    rm -f /etc/profile.d/raspi-config.sh
    sed -i /etc/inittab \
      -e "s/^#\(.*\)#\s*RPICFG_TO_ENABLE\s*/\1/" \
      -e "/#\s*RPICFG_TO_DISABLE/d"
    telinit q
  fi
  if [ $ASK_TO_REBOOT -eq 1 ]; then
    whiptail --yesno "Would you like to reboot now?" 20 60 2
    if [ $? -eq 0 ]; then # yes
      sync
      reboot
    fi
  fi
  exit 0
}

while true; do
  FUN=$(whiptail --menu "Raspi-config" 20 80 12 --cancel-button Finish --ok-button Select \
    "info" "Information about this tool" \
    "expand_rootfs" "Expand root partition to fill SD card" \
    "overscan" "Change overscan" \
    "configure_keyboard" "Set keyboard layout" \
    "change_pass" "Change password for 'pi' user" \
    "change_locale" "Set locale" \
    "change_timezone" "Set timezone" \
    "memory_split" "Change memory split" \
    "ssh" "Enable or disable ssh server" \
    "boot_behaviour" "Start desktop on boot?" \
    "update" "Try to upgrade raspi-config" \
    3>&1 1>&2 2>&3)
  RET=$?
  if [ $RET -eq 1 ]; then
    do_finish
  elif [ $RET -eq 0 ]; then
    "do_$FUN" || whiptail --msgbox "There was an error running do_$FUN" 20 60 1
  else
    exit 1
  fi
done

-3

사용 sudo find / -name 'raspi-config!'이 불필요합니다. 전체 파일 시스템을 검색하고 일치하는 것을 찾은 후에도 계속됩니다. 그것은 작업에 완전히 잘못된 도구입니다.

그냥 사용하십시오 which raspi-config. 더 효율적입니다.


2
@Steve Robillard의 답변은 불필요하고 무례합니다. 다른 사람의 노력을 부정하지 말고 자신이 기여할 수있는 것으로 제한하십시오. 결국, 나는 그에게서 필요한 것을 배웠습니다.
zenbike

1
Stack Exchange John에 오신 것을 환영합니다. 나는 당신의 사용자 이름에서 당신이 트롤을 찾고 있다고 생각합니다. 그러나 그러한 행동은 여기서 환영받지 못합니다.
Jivings 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.