Linux Appliance Design Ebook free dowwnload
A R E A L - W O R L D A R E A L - W O R L D G U I D E T O G U I D E T O L INU X A PPL I A NCE B U I L D I N G L I N U X B U I L D I N G L I N U X L INU X A PPL I A NCE A P P L I A N C E S A P P L I A N C E S DE SIG N DE SIG N A T O H A N D S - O N G U I D E B U I L D I N G L I N U X A P P L I A N C E S L L B O B S M I T H , J O H N H A R D I N , G R A H A M P H I L L I P S , A N D B I L L P I E R C E
IN
IN U U
X X A A P P P P L L
IA
IA N N C C A B O U T T H E A U T H O R S E E D D E E S S
IG
IG N N P H H P S
IL A M R
IE
IP R D S
IT C H
IN E , , A , N D ®
LINUX APPLIANCE DESIGN
LINUX APPLIANCE
DESIGN
A H a n d s- O n G u i d e t o
B u i ld in g L i n u x A p p l i a n c e s
by Bob Smith, John Hardin,
Graham Phillips, and Bill Pierce
San Francisco
®LINUX APPLIANCE DESIGN. Copyright © 2007 by Bob Smith, John Hardin, Graham Phillips, and Bill Pierce.
All “Tux’s Workshop” illustrations © 2006 by Jon Colton.
All rights reserved. No part of this work may be reproduced or transmitted in any form or by any means, electronic or
mechanical, including photocopying, recording, or by any information storage or retrieval system, without the prior
written permission of the copyright owner and the publisher.Printed on recycled paper in the United States of America 11 10 09 08 07 1 2 3 4 5 6 7 8 9
ISBN-10: 1-59327-140-9
ISBN-13: 978-1-59327-140-4 Publisher: William Pollock Production Editor: Elizabeth Campbell Cover and Interior Design: Octopod Studios Developmental Editor: William Pollock Technical Reviewer: Bob Lynch Copyeditor: Megan Dunchak Compositor: Riley Hoffman Proofreader: Publication Services, Inc. Indexer: Publication Services, Inc. For information on book distributors or translations, please contact No Starch Press, Inc. directly: No Starch Press, Inc. 555 De Haro Street, Suite 250, San Francisco, CA 94107 phone: 415.863.9900; fax: 415.863.9950; info@nostarch.com; www.nostarch.com Librar y of Congress Cataloging-in-Publication Data Linux appliance design : a hands-on guide to building linux appliances / Bob Smith ... [et al.]. p. cm. Includes index.
ISBN-13: 978-1-59327-140-4
1. Linux. 2. Application software--Development. 3. Electric apparatus and appliances--Design and
construction. I. Smith, Robert W. (Robert William), 1952- QA76.76.O63L545115 2007 005.3--dc22 2006020778No Starch Press and the No Starch Press logo are registered trademarks of No Starch Press, Inc. Other product and
company names mentioned herein may be the trademarks of their respective owners. Rather than use a trademark
symbol with every occurrence of a trademarked name, we are using the names only in an editorial fashion and to the
benefit of the trademark owner, with no intention of infringement of the trademark.
The information in this book is distributed on an “As Is” basis, without warranty. While every precaution has been
taken in the preparation of this work, neither the author nor No Starch Press, Inc. shall have any liability to any person or entity with respect to any loss or damage caused or alleged to be caused directly or indirectly by the information contained in it.B R I E F C O N T E N T S
Appendix E: The Laddie Appliance Bootable CD ............................................................337
Index .........................................................................................................................345
vi Br ief Cont entsC O N T E N T S I N D E T A I L A CK N O W LED GM EN T S xv
I NT RO D UC TI O N xvii
What This Book Is About ........................................................................................xviii
What This Book Is Not About ..................................................................................xviii
Who Should Read This Book ................................................................................... xix
Why Use Linux? ..................................................................................................... xix
Availability of Source Code ........................................................................ xix Range of Hardware Supported .................................................................. xix Availability of Linux Developers .................................................................. xix Reliability .................................................................................................. xx Quality Compilers ...................................................................................... xx Good Documentation ................................................................................. xx Existing Software Packages ......................................................................... xx Low Development Cost ................................................................................ xx No Licensing Fees for Deployment ................................................................ xx Security .................................................................................................... xxi
Linux Appliance Design ........................................................................................... xxi
1 A PP L IA N C E A RC H IT ECT UR E
1 UIs and Daemons ..................................................................................................... 2 Daemons .................................................................................................... 2 User Interfaces ............................................................................................ 3 Interprocess Communication ......................................................................... 4
The Architecture of the Laddie Appliance .................................................................... 5
Summary ................................................................................................................. 5
2 M A N AGI N G DA EM O N S
7 Common Approaches to Managing Daemons .............................................................. 8 File-Based Management ............................................................................... 8 A Daemon-Based Web Interface ................................................................... 9 An All-in-One Approach ............................................................................. 10
Control and Status Protocols .................................................................................... 11
Requirements for a Control and Status Protocol ............................................. 12 Common Control and Status Protocols ......................................................... 13
Summary ............................................................................................................... 18
3 US I N G R UN - TI M E A C CE SS
19 RTA Appliance Architecture ..................................................................................... 19
RTA Daemon Architecture ........................................................................................ 20
Telling RTA About Your Columns and Tables .............................................................. 21
Columns ................................................................................................... 22 Tables ...................................................................................................... 24Building Your First RTA Program ............................................................................... 26
Defining the Problem ................................................................................. 26 Reviewing the Code .................................................................................. 26 Installing RTA ............................................................................................ 31 Building and Linking .................................................................................. 32 Testing ..................................................................................................... 32A Little SQL ........................................................................................................... 34
SELECT .................................................................................................... 35 UPDATE ................................................................................................... 35 WHERE .................................................................................................... 36 LIMIT ....................................................................................................... 36
Introduction to RTA’s Built-in Tables ........................................................................... 37
rta_dbg .................................................................................................... 37 rta_stat ..................................................................................................... 37 rta_tables ................................................................................................. 38 rta_columns .............................................................................................. 38The RTA Table Editor .............................................................................................. 38
Summary ............................................................................................................... 41
4 BU IL D IN G A ND S EC U RI N G D AEM O NS
43 How to Build a Daemon .......................................................................................... 44 Load the Daemon’s Configuration ............................................................... 44 Go into the Background ............................................................................. 45 Become the Process and Session Leader ....................................................... 46 Set the Working Directory .......................................................................... 47 Redirect stdin, stdout, and stderr ................................................................. 47 Set Up Logging ......................................................................................... 48 Set Group and User IDs ............................................................................. 49 Check for a pidfile .................................................................................... 50 Set the umask ........................................................................................... 52 Set Up Signal Handlers .............................................................................. 52
How to Secure a Daemon ....................................................................................... 53
Designing a Secure Daemon ...................................................................... 54 Write a Secure Daemon ............................................................................. 55 Limit Damage in Case of a Breach .............................................................. 57
A Prototype Daemon .............................................................................................. 59
Summary ............................................................................................................... 60
Further Reading ..................................................................................................... 60
5 TH E L A DD IE A LA R M S Y S TEM : A S A M P LE A PP L IA N C E
61 Introduction to Alarm Systems .................................................................................. 62 Sensors .................................................................................................... 62 Enabling a Zone ....................................................................................... 64 viii Contents in Detai l
Contents in Detail ix A Functional Specification for Laddie ........................................................................ 64
ladd’s Configuration and Status .................................................................. 65
ladd’s Alarm Handling ............................................................................... 67
Laddie’s Hardware Design ...................................................................................... 68Laddie’s Software Design ........................................................................................ 69
The appInit() Callback Subroutine ................................................................ 70
The poll_timeout() Callback Subroutine ......................................................... 71
The user_update() Callback Subroutine ........................................................ 73
Building and Testing ladd ........................................................................................ 74 Summary ............................................................................................................... 76
6 L O GGI N G
77 Do You Need Logging? .......................................................................................... 77 Architecture of a Logging System ............................................................................. 78
Message Sources ...................................................................................... 78
Message Routing ....................................................................................... 80
Message Destinations ................................................................................ 80
syslog ................................................................................................................... 82syslog Architecture .................................................................................... 82
Using syslog ............................................................................................. 83
The syslog Protocol .................................................................................... 84
Using the syslogd Daemon ......................................................................... 85
Limitations, Advantages, and Alternatives to syslogd ..................................... 86
On-Demand Logging .............................................................................................. 87 Summary ............................................................................................................... 89
7 L AD DI E E VEN T H AN D L IN G
91 Rationale for a New Event-Handling System .............................................................. 92 Features and Capabilities of logmuxd ....................................................................... 93 Configuring logmuxd .............................................................................................. 94
logmuxd Sources ....................................................................................... 94
logmuxd Filters and Rewriting ..................................................................... 95
logmuxd Destinations ................................................................................. 97
Examples Using logmuxd ........................................................................................ 98Example 1: A logmuxd Demonstration ......................................................... 98
Example 2: logmuxd and Accepted TCP Connections .................................... 98
Example 3: logmuxd and SNMP Traps ...................................................... 102
Summary ............................................................................................................. 1048 DES I GN I NG A W EB I NT ERF A CE 105 Web Basics ......................................................................................................... 106
DNS and TCP ......................................................................................... 107
The Webserver ....................................................................................... 107
CGI ....................................................................................................... 107
JavaScript .............................................................................................. 107 Evolving Technologies .............................................................................. 107
Establishing Requirements ..................................................................................... 108
Choosing a Webserver ......................................................................................... 108
Choices ................................................................................................. 108 Use PHP ................................................................................................. 109 Case Study: Linksys WRT54G Wireless Router ............................................ 109 Case Study: The TUX Webserver ............................................................... 110 Comparison of Webservers ...................................................................... 110
UI Design ............................................................................................................ 114
Menu System .......................................................................................... 114 Dialog Boxes .......................................................................................... 115 Error Messages ....................................................................................... 115 Improving Responsiveness with Ajax .......................................................... 117
Implementation .................................................................................................... 118
Interfacing with the Daemons .................................................................... 119 Alarm Status Page ................................................................................... 121 Alarm Setup Page ................................................................................... 122 Page Layout and Menu System ................................................................. 123 Webserver Independence ........................................................................ 124 Asynchronous Updates Using Ajax ............................................................ 125Improving Our Design .......................................................................................... 131
Resources ............................................................................................................ 132
Summary ............................................................................................................. 133
9 DES I GN I NG A C O M M A N D L IN E IN TE RF AC E 135
Why You Need a CLI .......................................................................................... 136
Security .................................................................................................. 136Availability ............................................................................................. 136 Bandwidth .............................................................................................. 137 Scriptability ............................................................................................ 137 Configuration Backup and Restore ............................................................ 137
Types of CLIs ....................................................................................................... 138
Sentences ............................................................................................... 138 Wizards ................................................................................................ 139 Menus ................................................................................................... 139 Stateful .................................................................................................. 140 Character vs. Line Interfaces ..................................................................... 140
Giving Users Access to a CLI ................................................................................ 140
The Laddie CLI ..................................................................................................... 141
Laddie Command Summary ...................................................................... 141 set logs on .............................................................................................. 141 dump ..................................................................................................... 142 help ....................................................................................................... 143
Code Review for the test Command ........................................................................ 143
CLI Vocabulary: token.l ............................................................................ 144 CLI Grammar: syntax.y ............................................................................ 144 C Code .................................................................................................. 145 Code Review Notes ................................................................................. 145Summary ............................................................................................................. 145
x Cont ents in Det ai l1 0 BU IL D IN G A F RO N T P AN EL IN TE RF AC E 147 Buttons, LEDs, and LCDs ........................................................................................ 148
Buttons ................................................................................................... 148
LEDs ...................................................................................................... 150
LCDs ...................................................................................................... 151
Designing a Front Panel UI .................................................................................... 152Be Simple ............................................................................................... 152
Try, Fail, Try Again .................................................................................. 153
Use LCD Menus and Modes ..................................................................... 154
Be Quick! ............................................................................................... 155
The Laddie Front Panel .......................................................................................... 157Laddie LCD Menu System ......................................................................... 158
Laddie Front Panel Hardware ................................................................... 159
Laddie Front Panel UI ............................................................................... 164
Improving Our Design .......................................................................................... 166Summary ............................................................................................................. 167 1 1 DES I G N I NG A F R AM EB UF F ER IN T ERF A CE 169 How Video Memory Works ................................................................................... 170
How Bytes in Video Memory are Interpreted ............................................... 170
How Video Memory Is Mapped to the Display ............................................ 172
The Linux Framebuffer Device Driver ....................................................................... 173Manipulating the Framebuffer with open, read, write, and close ................... 174
Configuring the Framebuffer with the ioctl Command ................................... 175
A Simple Graphics Program for the Framebuffer ......................................... 177
Graphics Libraries ................................................................................................ 181“Hello, world!” with SDL ....................................................................................... 182
Initialize the Libraries ............................................................................... 183
Initialize the Framebuffer .......................................................................... 183
Create a Surface ..................................................................................... 184
Display the Surface ................................................................................. 184
Handle Events ......................................................................................... 185
Graphical UI Toolkits ............................................................................................ 185
Building Simple UIs with STBmenu ............................................................. 187
“Hello, world!” with STBmenu ................................................................... 190
The Laddie Framebuffer UI ..................................................................................... 193Summary ............................................................................................................. 196 1 2
I NF R AR ED REM O TE C O N TR O L 197 Communicating with Infrared Light ......................................................................... 198
Protocols for Encoding Remote Control Commands ...................................... 198
Reducing Interference by Modulating the Infrared Signal .............................. 200
Controlling an Appliance with Infrared Light ............................................... 200
Hardware for Remote Control Receivers .................................................................. 201Detecting and Demodulating the IR Signal .................................................. 201
Contents in Detail xi
xii Conte nt s i n De ta il Decoding Remote Control Waveforms ....................................................... 203 Infrared Remote Control Hardware for the Laddie Appliance ........................ 204
Installing and Configuring LIRC for the Laddie Appliance .......................................... 207
Installing the LIRC Software ....................................................................... 208 Configuring the lirc_serial Kernel Device Driver ........................................... 210 Testing the lirc_serial Driver ...................................................................... 212 Configuring the lircd Daemon ................................................................... 215 Testing the lircd Daemon .......................................................................... 216 LIRC Tools for Controlling Applications ....................................................... 218 Controlling the Laddie Appliance .............................................................. 219
Summary ............................................................................................................. 220
1 3HA N DS - O N I N TR O DU CT IO N TO S NM P 223
A Quick Note on Terminology ............................................................................... 224
The Software ....................................................................................................... 225
Installing SNMP ................................................................................................... 225
Download and Install ............................................................................... 226Check the Installation ............................................................................... 226 Configure the Agent ................................................................................ 227 Start the Agent ........................................................................................ 227
Exploring with SNMP ........................................................................................... 228
MIB Files for Readable Names .................................................................. 229 A Networked Printer ................................................................................ 231 The snmptable Command ......................................................................... 231 MIB-2: The TCP Connection Table ............................................................. 232 MIB-2: The UDP Table .............................................................................. 233 MIB-2 Contents ....................................................................................... 234
Writing Values with SNMP .................................................................................... 235
Setting sysContact ................................................................................... 235 Setting sysName ..................................................................................... 237SNMP Traps ........................................................................................................ 238
Receiving Traps with snmptrapd ................................................................ 238 Traps That Carry Data: linkUp and linkDown .............................................. 240
Summary ............................................................................................................. 242
1 4DES I GN I NG A N S N M P M I B 243
Our Goal ............................................................................................................ 244
Your Enterprise Number ........................................................................................ 245
The MIB Files ....................................................................................................... 246
LADDIE-GROUP-SMI ............................................................................................. 246
Creating the LAD-MIB ........................................................................................... 249
Module Definition .................................................................................... 251Version and Number of Zones .................................................................. 253 The Alarm Table ...................................................................................... 255 The Traps ............................................................................................... 257
Validating Your MIB ............................................................................................. 259
Summary ............................................................................................................. 260
Co ntents in Detai l xiii 1 5
I M PL EM EN T IN G Y O UR S N M P M I B 261 The Net-SNMP Agent ........................................................................................... 262 The MIB Skeleton: mib2c ....................................................................................... 265 The Header File: ladProject.h ................................................................................. 267 The Code File: ladProject.c .................................................................................... 267
Includes ................................................................................................. 268
The Base OID ......................................................................................... 268
MIB Objects Definitions ............................................................................ 268
RTA Access Routines ................................................................................ 271
The Initialization Routine ......................................................................... 274
The Scalars ............................................................................................ 275
Reading the Alarm Table .......................................................................... 277
Writing the Alarm Table .......................................................................... 280
Makefile Revisited ................................................................................................ 283 Debugging .......................................................................................................... 285 Traps .................................................................................................................. 285 Summary ............................................................................................................. 286 A RT A REF ER EN CE
289 Overview of RTA .................................................................................................. 290 RTA Constants .................................................................................................... 291 Data Structures ..................................................................................................... 292 API Subroutines .................................................................................................... 296
The dbcommand() Subroutine ................................................................... 297
The rta_add_table() Subroutine ................................................................. 297
The SQL_string() Subroutine ...................................................................... 298
The rta_config_dir() Subroutine ................................................................. 299
The rta_save() Subroutine ......................................................................... 299
The rta_load() Subroutine ......................................................................... 300
SELECT and UPDATE Syntax .................................................................................. 301
The SELECT Command ............................................................................. 301
The UPDATE Command ............................................................................ 302
Internal RTA Tables ............................................................................................... 303The rta_tables Table ................................................................................ 303
The rta_columns Table ............................................................................. 304
Debug Configuration ............................................................................................ 304 Error Messages .................................................................................................... 305
SQL Request Errors .................................................................................. 305
Internal Debug Messages ......................................................................... 306
Callback Routines ................................................................................................. 307
Read Callbacks ....................................................................................... 307
Write Callbacks ...................................................................................... 308
B REV I EW O F S N M P 309
Why SNMP? ....................................................................................................... 310 Agents and Managers .......................................................................................... 310 Namespace, Grammar, and Protocol ..................................................................... 310 The MIB .............................................................................................................. 311 The OID .............................................................................................................. 311 MIB-2 ................................................................................................................. 313
The SMI .............................................................................................................. 314
The SNMP Protocol .............................................................................................. 316
The Basic Commands: GET, SET, GETNEXT ................................................ 316 Walking a MIB with GETNEXT .................................................................. 316 Traps and Informs ................................................................................... 316 Command-Line Tools: Examples ................................................................ 316
SNMPv1, SNMPv2, and SNMPv3 ......................................................................... 318
SNMP Data Types ................................................................................................ 319
SNMP Tables ....................................................................................................... 320
Defining New Types ............................................................................................. 321
Structure of a MIB File ........................................................................................... 322
Summary ............................................................................................................. 324
C
I NS T AL L IN G A F RA M EB UF F ER DEV I CE DR I VER 325
Finding Framebuffer Device Drivers for Your Video Card ........................................... 326
The vesafb Driver .................................................................................... 326Hardware-Specific Drivers ........................................................................ 327 Drivers Not Included on the Laddie CD ...................................................... 327
Configuring the Framebuffer Device Driver .............................................................. 328
The vesafb Driver .................................................................................... 328Hardware-Specific Drivers ....................................................................... 329 D A DB -T O -F I LE U TI LI TY
331
Overview ............................................................................................................ 332
Table Definitions .................................................................................................. 332
The tbl2file Table .................................................................................... 333 The tbl2field Table ................................................................................... 334
A tbl2filed Example .............................................................................................. 335
Security Notes ..................................................................................................... 336
ETH E L A DD IE A PP L IA N C E B O O TA BL E CD 337
Running the Laddie Appliance ............................................................................... 337
Booting the CD ....................................................................................... 338Navigating the Framebuffer User Interface ................................................. 338 Accessing the Web Interface .................................................................... 339 Experimenting with the Linux Shell and Other User Interfaces ........................ 339 Shutting Down the Laddie Appliance ......................................................... 340
Exploring the CD Contents .................................................................................... 340
Laddie Appliance Source Code ................................................................ 340 Laddie Appliance Libraries ....................................................................... 341 Startup Scripts ......................................................................................... 341 The Linux From-Scratch Distribution and Additional Packages ....................... 342Rebuilding the Laddie Appliance ............................................................................ 342
I ND EX 345 xiv Conte nt s i n De ta il
A C K N O W L E D G M E N T S
As authors of the book we would like to thank Peter Enemark, Chris Sommers, and Keith Garrett for their unconditional support of this project and for their contributions to the technology presented.
As readers of the book, you should thank our technical editor, Bob Lynch, for finding many, many errors in the text and on the CD. You should also thank Elizabeth Campbell, Riley Hoffman, and Megan Dunchak for changing some of our technically correct but completely incomprehensible sentences into something both readable and correct.
Our thanks also go to Jon Colton, the artist responsible for the Tux’s Workshop series.
I N T R O D U C T I O N Toasters, ovens, and dishwashers are a few of the appliances found in our everyday lives. Though we are quite familiar with their use, few of us stop to think about how an appliance works under the hood, or even what makes an appli- ance, well, an appliance. This book defines an appliance