lima
lima copied to clipboard
Fedora: 08-shell-prompt.sh: line 10: patch: command not found
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
dnf install patch -y- goto step 4, use that
.bashrcto 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.
Ironically the patch is not applied to Fedora anyway. It only applies to the Ubuntu (debian-based) prompt...
- https://github.com/lima-vm/lima/pull/433
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)
- https://github.com/lima-vm/lima/pull/486
One alternative is to remove the feature and use a more boring PS1, or write a more portable for the new color...
Here is the discussion regarding the new color.
- https://github.com/lima-vm/lima/issues/268#issuecomment-1069351680
It's an honored tradition, ever since the bikeshed.
- http://phk.freebsd.dk/sagas/bikeshed/
Compared with the ubuntu prompt. (with the "lime" color)

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

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
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)
Colors aside, that script really should have looked for both
patchand 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;; esacIt was supposed to do nothing (
--forward -r -), if being run somewhere else (than ubuntu)
Thanks for your words. :smile:
I will consider this as a proper solution with a boring PS1, rather than bikesheding a more portable one for the new color.
It was only supposed to patch the ubuntu-lima distribution:

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

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

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

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

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 #)
- https://bugzilla.redhat.com/show_bug.cgi?id=1228939 (anno 2015)
Alpine opted to make a color_prompt.sh available, but not enabled by default:
- https://gitlab.alpinelinux.org/alpine/aports/-/issues/6933 (from 2017)
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 ?
@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?
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:
- https://github.com/lima-vm/lima/pull/1090
Normally the fedora example was called "fedora", so there was no risk of breaking things when changing the "default"