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 2006020778

No 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 ents

  C 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 ...................................................................................................... 24

Building Your First RTA Program ............................................................................... 26

Defining the Problem ................................................................................. 26 Reviewing the Code .................................................................................. 26 Installing RTA ............................................................................................ 31 Building and Linking .................................................................................. 32 Testing ..................................................................................................... 32

A 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 .............................................................................................. 38

The 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 ...................................................................................... 68

  Laddie’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 ................................................................................................................... 82

syslog 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 ........................................................................................ 98

Example 1: A logmuxd Demonstration ......................................................... 98

Example 2: logmuxd and Accepted TCP Connections .................................... 98

Example 3: logmuxd and SNMP Traps ...................................................... 102

Summary ............................................................................................................. 104

  8 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 ............................................................ 125

Improving 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 .................................................................................................. 136

  Availability ............................................................................................. 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 ................................................................................. 145

Summary ............................................................................................................. 145

x Cont ents in Det ai l

  1 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 .................................................................................... 152

Be Simple ............................................................................................... 152

  

Try, Fail, Try Again .................................................................................. 153

Use LCD Menus and Modes ..................................................................... 154

Be Quick! ............................................................................................... 155

The Laddie Front Panel .......................................................................................... 157

Laddie LCD Menu System ......................................................................... 158

Laddie Front Panel Hardware ................................................................... 159

Laddie Front Panel UI ............................................................................... 164

Improving Our Design .......................................................................................... 166

  Summary ............................................................................................................. 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 ....................................................................... 173

Manipulating 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 ..................................................................................... 193

  Summary ............................................................................................................. 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 .................................................................. 201

Detecting 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 3

HA 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 ............................................................................... 226

  Check 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 ..................................................................................... 237

SNMP Traps ........................................................................................................ 238

Receiving Traps with snmptrapd ................................................................ 238 Traps That Carry Data: linkUp and linkDown .............................................. 240

  

Summary ............................................................................................................. 242

1 4

DES 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 .................................................................................... 251

  Version 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 ............................................................................................... 303

The 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 .................................................................................... 326

  Hardware-Specific Drivers ........................................................................ 327 Drivers Not Included on the Laddie CD ...................................................... 327

Configuring the Framebuffer Device Driver .............................................................. 328

The vesafb Driver .................................................................................... 328

  Hardware-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

E

TH 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 ....................................................................................... 338

  Navigating 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 ....................... 342

Rebuilding 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