Skip to content

Fedora: 08-shell-prompt.sh: line 10: patch: command not found #1086

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
VitoVan opened this issue Oct 7, 2022 · 7 comments · Fixed by #1090
Closed

Fedora: 08-shell-prompt.sh: line 10: patch: command not found #1086

VitoVan opened this issue Oct 7, 2022 · 7 comments · Fixed by #1090
Labels
bug Something isn't working guest/fedora Guest: Fedora

Comments

@VitoVan
Copy link

VitoVan commented Oct 7, 2022

Description

limactl version 0.12.0

macOS 12.6

Fedora:

https://github.com/lima-vm/lima/blob/fc783ec455a91d70639f9a1d7f22e9890fe6b1cd/examples/fedora.yaml)

$ uname -a
Linux lima-default 5.17.5-300.fc36.x86_64 #1 SMP PREEMPT Thu Apr 28 15:51:30 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

-1. If you came here for a solution

  1. dnf install patch -y
  2. goto step 4, use that .bashrc to replace your current one

0. systemd Failed Units: 1

$ lima
[systemd]
Failed Units: 1
  cloud-final.service
[vito@lima-default ~]$

1. patch: command not found

$ sudo journalctl  -u cloud-final
...
Oct 07 10:59:17 lima-default cloud-init[841]: LIMA| Executing /mnt/lima-cidata/boot/08-shell-prompt.sh
Oct 07 10:59:17 lima-default cloud-init[841]: + '[' default = default ']'
Oct 07 10:59:17 lima-default cloud-init[841]: + grep -q '^# Lima PS1' /home/vito.linux/.bashrc
Oct 07 10:59:17 lima-default cloud-init[841]: + patch --forward -r - /home/vito.linux/.bashrc
Oct 07 10:59:17 lima-default cloud-init[841]: /mnt/lima-cidata/boot/08-shell-prompt.sh: line 10: patch: command not found
Oct 07 10:59:17 lima-default cloud-init[841]: LIMA| WARNING: Failed to execute /mnt/lima-cidata/boot/08-shell-prompt.sh
...

then I installed patch with sudo dnf install patch

2. Hunk ... FAILED at ...

$ sudo journalctl  -u cloud-final
...
Oct 07 11:08:10 lima-default cloud-init[834]: LIMA| Executing /mnt/lima-cidata/boot/08-shell-prompt.sh
Oct 07 11:08:10 lima-default cloud-init[834]: + '[' default = default ']'
Oct 07 11:08:10 lima-default cloud-init[834]: + grep -q '^# Lima PS1' /home/vito.linux/.bashrc
Oct 07 11:08:10 lima-default cloud-init[834]: + patch --forward -r - /home/vito.linux/.bashrc
Oct 07 11:08:10 lima-default cloud-init[834]: patching file /home/vito.linux/.bashrc
Oct 07 11:08:10 lima-default cloud-init[834]: Hunk #1 FAILED at 37.
Oct 07 11:08:10 lima-default cloud-init[834]: Hunk #2 FAILED at 56.
Oct 07 11:08:10 lima-default cloud-init[834]: 2 out of 2 hunks FAILED
Oct 07 11:08:10 lima-default cloud-init[834]: LIMA| WARNING: Failed to execute /mnt/lima-cidata/boot/08-shell-prompt.sh
...

3. Check ~/.bashrc

$ cat ~/.bashrc
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# User specific environment
if ! [[ "$PATH" =~ "$HOME/.local/bin:$HOME/bin:" ]]
then
    PATH="$HOME/.local/bin:$HOME/bin:$PATH"
fi
export PATH

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

# User specific aliases and functions
if [ -d ~/.bashrc.d ]; then
        for rc in ~/.bashrc.d/*; do
                if [ -f "$rc" ]; then
                        . "$rc"
                fi
        done
fi

unset rc
# Lima BEGIN
# Make sure iptables and mount.fuse3 are available
PATH="$PATH:/usr/sbin:/sbin"
export PATH
# Lima END

4. Guess: you guys only made this for Ubuntu

Then I started an Ubuntu and copied the .bashrc to the Fedora.

.bashrc from Ubuntu
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize

# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar

# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color|*-256color) color_prompt=yes;;
esac

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
	# We have color support; assume it's compliant with Ecma-48
	# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
	# a case would tend to support setf rather than setaf.)
	color_prompt=yes
    else
	color_prompt=
    fi
fi

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
    #alias dir='dir --color=auto'
    #alias vdir='vdir --color=auto'

    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
fi

# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'

# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

# Add an "alert" alias for long running commands.  Use like so:
#   sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi
# Lima BEGIN
# Make sure iptables and mount.fuse3 are available
PATH="$PATH:/usr/sbin:/sbin"
export PATH
# Lima END

Problem solved.

@AkihiroSuda AkihiroSuda added bug Something isn't working guest/fedora Guest: Fedora labels Oct 7, 2022
@afbjorklund
Copy link
Member

afbjorklund commented Oct 7, 2022

Ironically the patch is not applied to Fedora anyway. It only applies to the Ubuntu (debian-based) prompt...

It came from the old days, when the default.yaml was based on ubuntu.yaml and instances weren't renamed

And it had some issues, like being totally illegible on a white background (since it was tested on a black one)

One alternative is to remove the feature and use a more boring PS1, or write a more portable for the new color...

@afbjorklund
Copy link
Member

afbjorklund commented Oct 7, 2022

Here is the discussion regarding the new color.

It's an honored tradition, ever since the bikeshed.


Compared with the ubuntu prompt. (with the "lime" color)

ubuntu-prompt

The one in fedora is rather boring. (since it is monochrome)

fedora-prompt

      case $TERM in
      xterm*|vte*)
        if [ -e /etc/sysconfig/bash-prompt-xterm ]; then
            PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm
        else
            PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"'
        fi
        ;;
      screen*)
        if [ -e /etc/sysconfig/bash-prompt-screen ]; then
            PROMPT_COMMAND=/etc/sysconfig/bash-prompt-screen
        else
            PROMPT_COMMAND='printf "\033k%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"'
        fi
        ;;
      *)
        [ -e /etc/sysconfig/bash-prompt-default ] && PROMPT_COMMAND=/etc/sysconfig/bash-prompt-default
        ;;
      esac

@afbjorklund
Copy link
Member

afbjorklund commented Oct 7, 2022

Colors aside, that script really should have looked for both patch and for a debian bashrc.

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color|*-256color) color_prompt=yes;;
esac

It was supposed to do nothing (--forward -r -), if being run somewhere else (than ubuntu)

@VitoVan
Copy link
Author

VitoVan commented Oct 7, 2022

Colors aside, that script really should have looked for both patch and for a debian bashrc.

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color|*-256color) color_prompt=yes;;
esac

It was supposed to do nothing (--forward -r -), if being run somewhere else (than ubuntu)

Thanks for your words. 😄

I will consider this as a proper solution with a boring PS1, rather than bikesheding a more portable one for the new color.

@afbjorklund
Copy link
Member

afbjorklund commented Oct 8, 2022

It was only supposed to patch the ubuntu-lima distribution:

default-prompt

The goal was to make it different from the regular ubuntu:

ubuntu-prompt

But it never made it to the alpine-lima distribution either:

alpine-prompt

At least not by default, it is available in alpine if desired:

alpine-color

And the truecolor (> 256) didn't take effect until a restart:

truecolor-prompt

TERM=xterm-256color
COLORTERM=truecolor

The real goal of the colors is to separate host, directory, and commands.

"the focus in a terminal window should be on the output of commands, not on the prompt"


A more "boring" PS1 could still have a way to indicate that it is a lima shell ?

I think @AkihiroSuda was thinking of something like PS1="[LIMA] $PS1"

This is similar to the discussion about using a red root prompt (not just a #)

Alpine opted to make a color_prompt.sh available, but not enabled by default:

The hostname does have a "lima" in it already, so that is the hint otherwise...

Stealing 7 characters of precious screen real estate might not be appreciated ?

@antoineco
Copy link
Contributor

@afbjorklund The chosen patching approach is fragile and breaks all OS except Ubuntu, not just Fedora.

To override the shell prompt in any OS it would be sufficient to append some snippet at the end of /etc/bashrc, but that is another discussion.

For the time being, would you accept a PR to skip this patching altogether if the OS isn't Ubuntu, until is has been decided how the Lima branding propagates to users' prompts?

@afbjorklund
Copy link
Member

afbjorklund commented Oct 26, 2022

It was a nice hack at the time (well IMHO), but I'm fine with abandoning the Ubuntu patching for some other approach

But tried to avoid the other systems here:

Normally the fedora example was called "fedora", so there was no risk of breaking things when changing the "default"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working guest/fedora Guest: Fedora
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants