Status of the repository

Alexander E. Patrakov patrakov at
Wed Sep 21 07:46:12 PDT 2005


the status of the Live CD repository is rather bad.

1) glibc instructions in trunk match none of the available books

2) utf8 branch is out of date and doesn't build due to a missing tarball 
with RedHat patches (but please keep it for reference, it's the only 
branch that provided UTF-8 support and resulted in a released CD).

3) utf8-newmake never was built up to the end

4) sha1 sums for many packages don't match if one unpacks a big 
all-packages tar from instead of downloading all packages

5) commands, visual effects and logging are not clearly separated in 
Makefiles. As a result, it takes more than one 80x25 screen to compare 
the commands in the Makefile and in the book

6) downloading of the SVN book to /usr/share/LFS-BOOK is broken

7) unionfs is still used, although device-mapper solution is already 
tested, but even it is in fact unnecessary in the utf8 branch: any 
reason for the need to write to /usr is a bug, and the font-related 
reason is resolved there by avoiding non-Xft based apps.

So, I merged everything from trunk and started fixing some of this mess 
in my utf8-newmake branch (but didn't commit yet, see below why).

The UTF-8 variant of the old book is available at (only Chapters 5 
and 6 are valid). Merging gcc4 changes here resulted only in two easily 
resolvable conflits. So I am currently updating my local copy of the 
utf8-newmake branch according to the merged instructions. I will put 
those instructions online after verification that nothing in LFS fails 
to build. Currently, I am at the beginning of Chapter 6, but I also 
applied the 
because it apparently better fixes the vgahw problem with Xorg and is 
closer to upsteram.

Also, I attempted to separate logging and visual effects from commands, 
by replacing the scripts/functions file with the attached one and 
cleaning up each Makefile from useless comments and logging by piping it 
through the following Perl script:


$/ = undef;
$input = <>;
$input =~ s/# ?=*\n//g;
$input =~ s/#\n//g;
$input =~ s/#.*?\\\/\n//g;
$input =~ s/#.*?Status Messages.*?\n//g;
$input =~ s/\t@?\$\(call echo.*?\n//g;
$input =~ s/\t@?\$\(OK\)\n//g;
$input =~ s/\t@/\t/g;
$input =~ s/ \>\>?.*?log 2\>\&1//g;
$input =~ s/ \\\n\t\n/\n/g;
print $input;


(after this, one has to change sep_dir_build to sep_dir_build_noclean in 
tcl and binutils, and revamp the "make clean" logic in packages using 

This cleanup resulted in more easily readable/verifiable commands and 
freed me from thinking about logging in each package's Makefile. 
However, committing this will result in a 300KB message and inability 
for me to merge things to/from trunk (but since Jeremy Huntwork said 
goodbye, that isn't a big problem). Also I am going to remove sha1 sum 
checking because of frequent (apparently bogus) mismatches (e.g. on 
make-3.80). Do you want this cleanup?

Alexander E. Patrakov
-------------- next part --------------
# Functions for use in the LiveCD Makefiles
# Authors: Jeremy Huntwork, Alexander Patrakov
# Date  : 2005-07-17

define echo_message
	@echo $(BRW)
	@echo ================================================================================
	@echo $(BRW)$(1) $(ORANGE)$(NM)-$(VRS)$(BRW) for target $(ORANGE)$@$(BRW)
	@echo ================================================================================$(WHITE)

define OK
	@echo $(GREEN)=====================================[ OK ]=====================================$(WHITE)

define std_build
	@$(call echo_message, Building)
        @unpack $(FILE) >$(DIR)-$@.log 2>&1
        @make -C $(DIR) -f ../Makefile compile-$@ >>$(DIR)-$@.log 2>&1
        @make clean >>$(DIR)-$@.log 2>&1
        @touch $@

define std_build_noclean
	@$(call echo_message, Building)
        @unpack $(FILE) >$(DIR)-$@.log 2>&1
        @make -C $(DIR) -f ../Makefile compile-$@ >>$(DIR)-$@.log 2>&1
        @touch $@

define sep_dir_build
	@$(call echo_message, Building)
	@unpack $(FILE) >$(DIR)-$@.log 2>&1
	@rm -rf $(NM)-build >>$(DIR)-$@.log 2>&1
	@mkdir -v $(NM)-build >>$(DIR)-$@.log 2>&1
	@$(MAKE) -C $(NM)-build -f ../Makefile compile-$@ >>$(DIR)-$@.log 2>&1
	@make clean >>$(DIR)-$@.log 2>&1
	@touch $@

define sep_dir_build_noclean
	@$(call echo_message,Building)
	@unpack $(FILE) >$(DIR)-$@.log 2>&1
	@rm -rf $(NM)-build >>$(DIR)-$@.log 2>&1
	@mkdir -v $(NM)-build >>$(DIR)-$@.log 2>&1
	@$(MAKE) -C $(NM)-build -f ../Makefile compile-$@ >>$(DIR)-$@.log 2>&1
	@touch $@

# This takes the form of 'download [filename] [url] [sha1sum]'
define download
	@cd $(SRC) ; if [ ! -f $(1) ] ; then $(WGET) $(2) ; \
	 elif ! echo "$(3)  $(SRC)/$(1)" | sha1sum -c - >/dev/null 2>/dev/null ; then \
	 $(WGET) -c $(2) ; fi
	@if echo "$(3)  $(SRC)/$(1)" | sha1sum -c - >/dev/null 2>/dev/null ; then \
	 echo $(BRW)sha1sum check on $(SRC)/$(1): $(GREEN)[ OK ]$(WHITE); \
	 else echo $(BRW)sha1sum check on $(SRC)/$(1): $(RED)[ FAILED ]$(WHITE); exit 1 ; fi
	@ln -sf $(SRC)/$(1) .

%.gz %.tgz %.bz2 %.patch %.rules %.ttf:
	$(call download,$@,$(URL-$@),$(SHA-$@))

	@echo $(URL-$(FILE)) >>$(MKTREE)/wget-list
	@echo $(URL-$(FILE1)) >>$(MKTREE)/wget-list
	@echo $(URL-$(FILE2)) >>$(MKTREE)/wget-list
	@echo $(URL-$(FILE3)) >>$(MKTREE)/wget-list
	@echo $(URL-$(FILE4)) >>$(MKTREE)/wget-list
	@echo $(URL-$(FILE5)) >>$(MKTREE)/wget-list
	@echo $(URL-$(PATCH)) >>$(MKTREE)/wget-list
	@echo $(URL-$(PATCH1)) >>$(MKTREE)/wget-list
	@echo $(URL-$(PATCH2)) >>$(MKTREE)/wget-list
	@echo $(URL-$(PATCH3)) >>$(MKTREE)/wget-list
	@echo $(URL-$(PATCH4)) >>$(MKTREE)/wget-list
	@echo $(URL-$(PATCH5)) >>$(MKTREE)/wget-list
	@echo $(URL-$(PATCH6)) >>$(MKTREE)/wget-list
	@echo $(URL-$(PATCH7)) >>$(MKTREE)/wget-list

More information about the livecd mailing list