General Actions:
Log-in
xwiki
Community Group tools
Subsites
:
Code Reviews
SCM Management
Package Search
Bugster
Bugzilla
Test Machines
Planet
Mailing Lists
Elections & Polls
ARC Case Logs
Source Juicer
Package Factory
Auth
Collectives
Discussions
Documentation
Download
Source Browser
Search
OpenSolaris Source Code Management
»
OpenSolaris DSCM Evaluation: Mercurial
en
Page Actions:
Export
:
Export as PDF
Export as RTF
Export as HTML
View
:
Comments
Attachments
History
Information
View Source
More actions
:
Print preview
Wiki source code of
OpenSolaris DSCM Evaluation: Mercurial
Hide line numbers
1: = OpenSolaris DSCM Evaluation: Mercurial 2: 3: == A. Tool Information 4: 5: Mercurial version 0.8. 6: 7: == B. Configuration Details 8: 9: === 1. CPU architecture and machine specifics 10: 11: {{{ 12: 13: kosh$ psrinfo -v 14: Status of virtual processor 0 as of: 03/30/2006 14:15:16 15: on-line since 03/09/2006 16:44:59. 16: The i386 processor operates at 1600 MHz, 17: and has an i387 compatible floating point processor. 18: kosh$ uname -a 19: SunOS kosh 5.11 snv_35 i86pc i386 i86pc 20: 21: }}} 22: 23: === 2. Memory available 24: 25: {{{ 26: 27: Memory size: 1024 Megabytes 28: 29: }}} 30: 31: === 3. Size of the repository (space) 32: 33: 641MB, including working directory. This repository mirrors ON’s internal Teamware workspace as of 2006-04-11 16:52:19Z and has history back to build 18 (shortly after the OpenSolaris launch). 34: 35: === 4. Number of files in the repository 36: 37: 43,311. 38: 39: === 5. Average number of deltas per file 40: 41: 1.3. 42: 43: More details: 1,884 changesets, 57,173 changes. (57173/43311=1.3) 44: 45: == C. Evaluation Areas 46: 47: === 1. Operation Functionality 48: 49: (Refer to the Requirements Document for detail.) 50: 51: ==== e1. unbiased and disconnected distribution 52: 53: Mercurial implements a model of independent repositories, though a repository can be configured to have a [[de-facto parent>>http://www.opensolaris.org/jive/message.jspa?messageID=30643&tstart=0]]. 54: 55: Mercurial supports updates between two repositories with a common ancestor. If child-2 pulls from child-1 and has one or more changesets that aren’t in child-1 (a common scenario in ON development), child-2 will have to do an "update -m", even if the changes are non-conflicting. Unlike Teamware, the merge must then be explicitly committed. (This is a feature, since it means you can test the merge before committing it, but it seems likely to cause confusion for Sun engineers. If we use Mercurial Queues for most development work, this issue probably goes away.) 56: 57: The "disconnected-use" requirements are all satisfied. 58: 59: ==== e2. networked operation 60: 61: As mentioned in the requirements document, Mercurial supports remote access via {{code}}ssh{{/code}}. Pulls can also be done over HTTP. (And of course NFS can be used for pushes and pulls). 62: 63: ==== e3. interface stability and completeness 64: 65: ===== storage 66: 67: The storage representation appears to be well-documented. Certainly there’s more [[information>>http://www.selenic.com/mercurial/wiki/index.cgi/Design]] on the Mercurial website than we’ve been able to find for SCCS’s storage representation. 68: 69: Mercurial’s storage representation does not use Unix i-numbers, so snapshots such as those provided by ZFS or Network Appliance filers should not cause problems. 70: 71: A ZFS snapshot can be used as the source for a Mercurial clone operation. 72: 73: At least some of the on-disk data structures do not appear to be versioned. This is a potential hazard. At least one storage representation change is planned: "RevlogNG", which is [[planned for Mercurial 0.9>>http://marc.theaimsgroup.com/?l=mercurial&m=114375669405791&w=2]]. This change is expected to address the versioning issue. 74: 75: On-disk data structures are binary files, but I had no problems using the same repository from both SPARC and x86 systems. Binary files give improved performance, but in the unlikely event that manual repairs are needed, we’ll need a binary editing program. 76: 77: Mercurial does not provide its own access control mechanism for controlling access to subtrees within a repository. While it might be possible to restrict user access to certain subtrees using filesystem ACLs, it would probably be better to use various pre-operation hooks (e.g., {{code}}pretxnchangegroup{{/code}}) to implement that sort of control. Bryan O’Sullivan reports that there is a recipe in the wiki for doing [[access control over {{code}}ssh{{/code}}>>http://www.selenic.com/mercurial/wiki/index.cgi/SharedSSH]], without needing to create a separate user account for everyone. 78: 79: ===== command-line interface, hooks 80: 81: The [[command-line>>http://www.selenic.com/mercurial/hg.1.html]] and [[hook>>http://www.selenic.com/mercurial/hgrc.5.html]] interfaces appear to be adequately documented. 82: 83: One nit: the current documentation appears to reflect the current development version of the code, rather than the most recent release[[[1]>>#docexample]]; there is nothing in the documentation to clarify what version it applies to. If OpenSolaris uses Mercurial, we may wish to place snapshots of the code and documentation on opensolaris.org to avoid confusion. 84: 85: The hook infrastructure invokes the named hook(s) with a few tokens such as the changeset ID passed in via the environment. This means that the hook may need to invoke various Mercurial commands to find out more about the changeset. A potential issue is that it may not always be possible to get the desired information back from the existing Mercurial command-line interfaces. For example, "hg log" gives the old and new names of a renamed file, along with the names of any other files involved in the changeset, but it can’t tell you that file "foo" was renamed to "bar". Fortunately, all the known examples of this problem are considered bugs and have fixes planned. 86: 87: Bryan O’Sullivan reports that the Mercurial team is also considering support for Python hooks that would run in the Mercurial process. 88: 89: Lock-reentrancy does not appear to be a problem. Mercurial does not need read locks, and hooks are currently limited to only doing read operations. 90: 91: At least one unexpected behavior was noted while testing: pushing a changeset from repository A to repository B caused A’s {{code}}commit{{/code}} hook to fire. This appears to be a [[known bug>>http://www.selenic.com/mercurial/bts/issue113]]. 92: 93: ===== network protocol(s) 94: 95: There is some documentation on the [[network protocol>>http://www.selenic.com/mercurial/wiki/index.cgi/WireProtocol]], though it’s a bit sketchy. The protocol is versioned. 96: 97: ==== e4. standard operations and transactions 98: 99: Mercurial operates on files. Rename or remove of a directory is translated into a rename or remove on the directory’s contents. 100: 101: Rename is implemented as copy and delete. More work is needed here: merges don’t track renames, and rename conflicts are not detected. 102: 103: Deleting a file and creating a new file with the same path is supported. The new instance includes the history of the old instance. 104: 105: Mercurial supports the scenario where a file is deleted in one workspace, the deletion is backed out in the "gate" repository, and the file is edited concurrently in a second workspace. The backout was done via 106: 107: > $ hg revert -r lastrev 108: $ hg add file 109: $ hg commit -m "back out deletion of file" 110: 111: where lastrev refers to the last changeset before the deletion. 112: 113: The merge in the second workspace was a little messy: after the "update -m", the working copy of the file had the old and new versions of the file concatenated together. 114: 115: Deleted files can still be referenced using the path and the -r option, for example 116: 117: > $ hg cat -r rev file 118: $ hg diff -r rev1 -r rev2 file 119: 120: ==== e5. per-changeset metadata 121: 122: Mercurial associates a text comment with each changeset; this is added as part of the {{code}}commit{{/code}} operation. The first line of the comment is displayed as a summary of the changeset for operations like "log", though the full comment can be displayed with the "-v" option. This is somewhat inconsistent with the current conventions for putbacks into ON; we’ll want to think about what we want to do. Mercurial supports customization of "log" output, so that’s one option. 123: 124: ==== c6. ease of use 125: 126: Although I haven’t built Mercurial from source, Bryan O’Sullivan reports 127: 128: > It builds out of the box on Solaris 10, once the system Python’s Makefile is fixed to use gcc. 129: 130: The primary interface is the {{code}}hg{{/code}} command, with subcommands for the various options. This is pretty standard. 131: 132: The model is straightforward: you {{code}}commit{{/code}} one or more changesets to the repository that you’re working in, then you {{code}}push{{/code}} or {{code}}pull{{/code}} them to other repositories. Note that pushing (or pulling) a changeset updates the target repository, but updating the target’s source tree is a separate step ("hg update"). 133: 134: Mercurial offers subcommands specifically for generating and accepting source patches. 135: 136: Mercurial supplies an HTTP server, as well. This can be used for browsing and for pulls over HTTP. 137: 138: Support for backouts: the {{code}}revert{{/code}} subcommand can be used to back out all changesets back to a particular revision. Backing out a changeset after the files have been subsequently modified is less straightforward. There is currently an [[open feature request>>http://www.selenic.com/mercurial/bts/issue146]] for this. In the meantime, one can generate a source patch for the changeset that you want to back out, then apply the patch using "patch -R". 139: 140: By default, "hg status" lists files that aren’t tracked in the repository (e.g., compiled binaries, editor backup files). While this is not peculiar to Mercurial, it’s a change from Teamware, and it will generate an impossible level of noise in most real-life scenarios with ON. While doing "dmake clobber" will reduce the noise considerably[[[2]>>#clobber]], that is inconvenient for a tree the size of ON. Mercurial does provide mechanisms to filter out noise (e.g., {{code}}status{{/code}} subcommand options, and {{code}}.hgignore{{/code}} files), but it’s not clear they can be used to give the desired results (show untracked source files and makefiles, but ignore all other untracked files). 141: 142: Files should be imported with read-write permission. Mercurial keeps track of the permissions, and it complains if you try to update a read-only file (e.g., after a push or pull). 143: 144: ===== merging 145: 146: Mercurial’s default for resolving conflicts is the {{code}}hgmerge{{/code}} script. This script checks for the presence of various third-party conflict resolver programs, such as {{code}}tkdiff{{/code}}. At least some of these programs (e.g., {{code}}tkdiff{{/code}}) offer functionality that is comparable to what is available with Teamware and Filemerge. It should be easy to add Filemerge support to {{code}}hgmerge{{/code}} if that’s desired. 147: 148: If {{code}}hgmerge{{/code}} can’t find any of the expected conflict resolvers, it falls back to using {{code}}diff(1){{/code}} and {{code}}patch(1){{/code}}. If {{code}}patch{{/code}} rejects any part of the diffs, {{code}}hgmerge{{/code}} invokes an editor so that the user can manually repair the conflict. 149: 150: While first experimenting with Mercurial, I found it very easy to get my repository into a state where it would keep complaining about "outstanding uncommitted changes", but it was hard to figure out how to get out of that state. (Answer: use "hg update -C".) This probably needs to go into a FAQ. 151: 152: ===== mismerges 153: 154: The current version of {{code}}hgmerge{{/code}} has some problems that make it easy to introduce mismerges. One of the Mercurial developers is looking at reducing the likelihood of mismerges. We may also wish to consider our own changes. 155: 156: First, if {{code}}hgmerge{{/code}} uses {{code}}patch{{/code}}, we may want to force a review of the changes, even if the patch applies cleanly. 157: 158: Second, the code for invoking the editor and determining whether the conflict was resolved is a bit brittle[[[3]>>#conflicts]]. This may just be a bug that needs fixing. But we may also want a more explicit "yes I have resolved the conflicts" action from the user (which is something Subversion does). 159: 160: There is at least one [[open issue in the Mercurial bug database>>http://www.selenic.com/mercurial/bts/issue12]] related to failed merges. Resolving this issue may address the brittleness problem mentioned above. 161: 162: ===== intermediary snapshots 163: 164: The current ON convention is that putbacks should not introduce SCCS deltas for intermediary snapshots or Teamware merges. This is achieved by using the {{code}}redelget{{/code}} and {{code}}reedit{{/code}} subcommands in {{code}}wx{{/code}}. Similar functionality is available with Mercurial using the [[Mercurial Queue (mq)>>http://www.selenic.com/mercurial/wiki/index.cgi/MqExtension]] extension. 165: 166: ==== c7. no-dedicated-server mode 167: 168: Mercurial can run without any server daemons. {{code}}ssh{{/code}} support is handled by starting a remote, transient Mercurial server automatically, which communicates with the local system over the {{code}}ssh{{/code}} connection. 169: 170: ==== c8. tool community health 171: 172: Mercurial has an active developer community. At least one developer (Bryan O’Sullivan) has helped with our evaluation of Mercurial, and he is interested in helping to address issues that we have run into so far (e.g., rename). 173: 174: There have been a few Solaris-specific problems with Mercurial. The Mercurial developers have been quick to respond. And in at least one case they installed Solaris so that they could troubleshoot the issue. Also, the developers have paid attention to larger issues, rather than applying a steady stream of band-aids. For example, to address the recurring shell-compatibility problems with {{code}}hgmerge{{/code}}, one developer suggested rewriting {{code}}hgmerge{{/code}} in Python. 175: 176: ==== c9. OpenSolaris community expertise 177: 178: Mercurial is almost entirely written in Python; {{code}}hgmerge{{/code}} is a shell script, though there is some talk of rewriting it in Python, too. It’s unclear (to me) how much Python expertise there is in the OpenSolaris community. Fortunately, Python appears easy to learn, and the code tends to be more readable than, say, Perl. Commenting is a bit sparse, but I haven’t had problems following the code. 179: 180: ==== c10. interface extensibility 181: 182: Mercurial has a [[hooks mechanism>>http://www.selenic.com/mercurial/hgrc.5.html]] as well as a documented [[extensions mechanism>>http://www.selenic.com/mercurial/wiki/index.cgi/ExtensionHowto]]. Some hooks can abort the current operation. 183: 184: ==== c11. transactional operations and corruption recovery 185: 186: Mercurial’s state files are updating by appending. So corrupted files can be repaired by rolling back to a consistent set of files. 187: 188: Signal handling (e.g., {{code}}SIGINT{{/code}}) appears sensible. 189: 190: I simulated a crash using {{code}}SIGKILL{{/code}} during a clone operation and was able to get the workspace into a state where there were many missing files. That is, the files were in the repository, but they were not in the visible source tree. This experiment raised a couple issues that we’ll want to look at more carefully. 191: 192: * the child repository was left with two lock files which would block some operations but not others. A push to the parent was not blocked. Either this is a bug or we need to understand Mercurial’s use of locks better. 193: * Mercurial seemed confused by the contents of the child. I edited a file in the workspace~--{{code}}README.opensolaris{{/code}}~--and tried to commit it, but Mercurial said there were no changes. Mercurial let me clone the child, edit {{code}}README.opensolaris{{/code}} in the second child, and push the changes to the first child. Trying to work with {{code}}README.opensolaris{{/code}} in the first child was still troublesome~--it was as though Mercurial did not realize that {{code}}README.opensolaris{{/code}} was already in the repository. For operational simplicitly, we’ll want some sort of cleanup and repair script, with simple guidelines on when to run it. 194: 195: There also appear to be a couple open issues related to locking[[[4]>>#locking]]. 196: 197: ==== c12. content generality 198: 199: Mercurial supports binary files as well as text. However, the merge code appears to assume text files. We’ll need to think about to handle binary files. 200: 201: ==== o13. partial trees 202: 203: Not currently supported, though there have been discussions about adding support for it.. 204: 205: ==== o14. per-file histories 206: 207: Changesets are for the entire repository, not per-file. But you can get a per-file history by specifying the file name with "hg log". 208: 209: === 2. Storage 210: 211: We didn’t have any problems running out of storage or swap. No storage spikes were observed. 212: 213: One thing that deserves further investigation is the storage consumed by the conflict tests in the test harness that we used. The first test introduces a content conflict in usr/src/cmd/sort/Makefile.com. The second test introduces a couple rename conflicts in usr/src/cmd/pwd. This led to a size increase of 2.3MB in the test repository, which seems excessive. 214: 215: === 3. Performance 216: 217: A local clone of the OpenSolaris ON 20060222 tree takes a couple minutes on the above hardware using ZFS; about twice that on UFS. 218: 219: Using the [[repo with history>>#repo]], performance looks like this (times are in mm:ss): 220: 221: |=operation|=Local (zfs)|=LAN (NFS)|=LAN (ssh)|=WAN (Menlo Park-United Kingdom) (ssh) 222: |clone (6 samples)|2:55 (std dev: 1:00)|6:54 (std dev: 0:17)|4:01 (std dev: 0:08)|35:42 (std dev: 2:45) 223: |local commit (1 file; 6 samples)|0:23 (std dev: 0:13)|0:17 (std dev: 0:09)|0:19 (std dev: 0:11)|0:19 (std dev: 0:10) 224: |push (1 file, 1-3 deltas; 4 samples)|0:01|0:02|0:03|0:06 225: |pull (1 file, 1-3 deltas; 6 samples)|0:01|0:01|0:02|0:06 226: 227: == D. Changes/Features Required/Desired 228: 229: === Must Have Initially 230: 231: * rename/merge integration 232: * versioning of on-disk data structures (this should be in the upcoming RevlogNG changes) 233: * a reliable mechanism for checking a tree (repository plus working directory) after a crash and making any necessary repairs (see [[Section c11>>#c11]] above) 234: 235: === Want Eventually 236: 237: * detection of rename conflicts 238: * supported interface for showing renames and deletions in the log (planned for Mercurial 0.9) 239: * better handling of failed merges ([[issue12>>http://www.selenic.com/mercurial/bts/issue12]] in the Mercurial issue database) 240: 241: == Notes 242: 243: [1] For example, the 2006-03-22 version of the {{code}}hgrc(5){{/code}} man page lists hooks that were apparently added after 0.8, although 0.8 is the most recent release. 244: 245: [2] Besides leaving editor backup files, our clobber builds leave some generated files behind. 246: 247: [3] The relevant code is 248: 249: {{{ 250: 251: $EDITOR "$LOCAL" "$LOCAL.rej" && test -s "$LOCAL.rej" || exit 0 252: 253: }}} 254: 255: If {{code}}$EDITOR{{/code}} can’t be invoked for some reason, we’ll take the "exit 0", which indicates a successful merge. 256: 257: [4] [[issue132>>http://www.selenic.com/mercurial/bts/issue132]] "hg should revalidate its data after locking the repo" and [[issue154>>http://www.selenic.com/mercurial/bts/issue154]] "race between undo and all readers" 258: 259: == History 260: 261: ; 2006-04-20 262: : Resolved TBDs. More information on use with ZFS snapshots. Minor editorial changes. 263: ; 2006-04-13 264: : Updates after email discussion with Bryan O’Sullivan<EMAIL_ADDRESS>265: ; 2006-03-31 266: : First draft. 267: 268: // Last change: 2006-04-20 11:29 PDT //
Collectives
Community Group
Academic and Research
Accessibility
Advocacy
Appliances
Approachability
Architecture Process and Tools
BrandZ
Chinese Users
Community Advisory Board
DTrace
Databases
Desktop
Device Drivers
Distribution
Documentation
Emerging Platforms
Fault Management
Games on OpenSolaris
HA Clusters
HPC Developer
Installation and Packaging
Internationalization and Localization
Laptop
Logical Domains
Modular Debugger (MDB)
NFS
Networking
OS/Net (ON)
Observability
OpenSolaris Governing Board (OGB)
OpenSolaris Printing
Performance
Power Management
PowerPC
Security
Service Management Facility (smf(5))
Software Porters
Solaris Volume Manager
Storage
Systems Administration Community Group
Testing
Tools Home
Unix File Systems (UFS)
Website
X Window System
Xen
ZFS
Zones
Project
ADSL Modem Enhancement
ARC Process Definition
ARM Platform Port
BIND Update
Bluetooth Stack & Drivers
Brocade FC HBA - Initiator
Brocade FC HBA - Target
Brussels - unified network link configuration
CIFS Server
CIFS client for Solaris
CMT
COMSTAR: Common Multiprotocol SCSI Target
CPU Observability
Caiman, Solaris Install Revisited
Celeste
Chime Visualization Tool for DTrace
Clearview: Network Interface Coherence
Cluster Agent: Informix Dynamic Server
Cluster Agent: OpenSolaris Container
Cluster Agent: OpenSolaris xVM
Cluster Agent: Oracle E-Business Suite
Cluster Agent: Samba
Cluster Agent: Tomcat
Cluster agent: PostgreSQL
Coarse Data Flow Parallelism
Colorado: Open HA Cluster on OpenSolaris
Command Assistant
Common Array Manager
Companion - /opt/sfw: Free and Open Source software
Content
Contest
Credentials Process Groups
Crossbow: Network Virtualization and Resource Control
Crypto KMS Agent Toolkit
Cryptographic Framework
DTrace Guide
Data Migration Manager
Data Tethers
Deutsches Portal
Device Detection Tool
Device Driver Utility
Device Manager
Device Mapper
Direct Rendering Infrastructure & 3D drivers
Duckwater: Simplified name services management
Easy Tools
Emancipation
Emulex Advanced Ethernet Device Driver
Emulex Fibre Channel Device Driver
Enable/Enhance Solaris support for Intel Platform
Enhance the support of USB webcams
Enhanced SMF Profiles
Enhancements for AMD-based Platforms
Erlang DTrace Integration
Ethernet bridge module for Solaris
Evaluate Conary
Events Registry
Ext3 file system support
Facilitation
Fibre Channel over Ethernet
Fine Grained Access Policy (FGAP)
Fingerprint Authentication
Flexible Mandatory Access Control
Forensic Tools
Fully Open X Project
Fuse on Solaris
Generic Machine Check Architecture Improvements
Generic RAID Configuration Utility
Google SOC
HA-JBoss
HA-MySQL
HPC Stack
Hadoop Live CD
Hitachi
HoneyComb Fixed Content Storage
Hotplug Framework
IP Datapath Refactoring
IP over Infiniband
IPsec Tunnel Reform
Image Packaging System
Immutable Service Containers
Improved Performance MIB
Indiana
Innovation Awards
Input Method
Intel Graphics
Internet Key Exchange, version 2 (IKEv2)
Interrupt Resource Management
JKstat - a java binding for libkstat
JeOS - Just enough Operating System
Journaled File System (JFS)
K Desktop Environment
Kerberos
Kernel SSL Enhancements
Kernel Sockets
Key Management Framework
Korn Shell 93 integration/migration project
LDoms Manager
Labeled IPsec
LatencyTOP
Layer 2 Filtering
Lending
Link Layer Discovery
Live Media: Technologies for distributions running from CD and other media
Locale Data
MIPS Platform Port
MRSL.NONsharedDevice
Mega_sas
Mexico
MilaX minimal Live Distribution
Mozilla DTrace
Multi-lingual Glossary
Multi-pathing software (MPxIO)
Multiple DOI
Multiple disk sector size support
Muskoka: An open repository for OpenSolaris technical content
NFS RDMA transport update and performance analysis
NFS Server in non-Global Zones
NFS version 4.1 pNFS
NFSv4 namespace extensions
NPort ID Virtualization (NPIV)
NUMA
Navigator
Nemo: A Framework for High-Performance Networking
Network Auto-Magic
Network Data Management Protocol
Network MIBs
Network Performance Projects
Network Power Management
Network Storage
Network Time Protocol (NTP)
Nevada Globalization
New Design of 4over6 Mechanism Based on OpenSolaris
Nightingale: Port Songbird to OpenSolaris
OHACGE Script Based Plug-in
ON/Nevada (ONNV) Project
Object Storage Device (OSD) support for Solaris
Open Development Infrastructure
Open HA Cluster Utilities
Open Sound System
OpenGrok
OpenPegasus CIM Server
OpenRTI
OpenSolaris Busybox
OpenSolaris Desktop
OpenSolaris Hispano
OpenSolaris Security Audit
OpenSolaris support for the QEMU processor emulator: host and guest
PEF: Packet Event Framework
Performance Wrappers
Pkgfactory
Polski Portal
Portail Francophone
Portal Brasileiro de OpenSolaris
Portals
Power Management Usability Interfaces
Presto: Automatic Printing Configuration
Printable Many Page Solaris Manuals
Promise SuperTrak RAID HBA Driver
QLogic Converged Network Adapter GLDv3 NIC Driver
Quagga Routing Protocol Suite Integration
RBridge (IETF TRILL) support
RDMA Offload Framework
Release Notes
Reno: Login Process Enhancements for Interop
Resource Management
SAM/QFS
SCM Migration Project
SCSI RDMA Protocol
SDcard Drivers
SFW
SM-HBA Based SAS HBA Management
SMF Documentation
SVR4 Packaging
Sensor Abstraction Layer
Session Initiation Protocol
Shell: bourne shell, korn shell, C shell, etc.
Sierra: Intel WiFi Chipsets Support
Simple Panels
Solaris PowerPC Port
Solaris iSCSI Target
SourceJuicer
Sparks: name service switch/nscd enhancements
Squashfs
Star integration/migration project
Starfish
Starter Kit
Storage Power Management
Sun Security Toolkit
Sun StorageTek Availability Suite
Support for OpenFabrics User Verbs / API on OpenSolaris OS
Support gcc4/GCCfss in Solaris
Suspend/Resume
Systemz
TIPC
Tamarack: Removable Media Enhancements in Solaris
Test Development
Tickless Kernel Architecture
Trademarks
Trusted Platform Module support
Trusted networking interface policy database for Trusted Extensions
Use Case
Userland
VRRP: Virtual Router Redundancy Protocol Implementation
VSCAN service
Validated Execution Project
Virtual Console
Virtual Network Machines
Visual Panels
Visualization for HPC
Volo
Web Stack
Website
Winchester: Schema mapping and ID mapping for AD Interoperability
Wireless USB Support
Wireless Wide Area Network
X Consolidation
X Keyboard Layout
Xen Gate
Xfce: A lightweight desktop environment
ZFS Boot and Install
ZFS on disk encryption support
Zone Manager
Zone Statistics
gcore
iSCSI Extensions for Remote DMA (iSER)
iSNS Server
libMicro - portable microbenchmarks
lofi compression and cryptography support
lx64 brand
s10brand
x86 Generic FMA Topology Enumerator
Český portál
Русский портал
البوابة العربية
भारतीय पोर्टल
中国门户
日本ポータル
한국 포탈
User Group
Adelaide
Argentina
Arizona
Atlanta OpenSolaris Users Group
Baltimore-Washington
Bangalore
Bangkok
Bangladesh
Beijing
Berlin
Bhimavaram
Bloomington
Brasilia
Bélem
Capital Region
Cardiff
Caribbean OSUG
Ceara
Charlotte
Chengdu
Chennai
Chihuahua
Chile
Cleveland
Colombia
Columbus
Connecticut
Cracow
Czech
Dallas/Ft. Worth
Danish
Delaware
Edinburgh
Egypt
Finland
Florida
Frankfurt
Front Range
FuZhou
Great Lakes
Greece
Hangzhou
Hawaii
Hong Kong
Houston
Hyderabad
Indonesia
Inicio
Irish
Israel
Istanbul
Italian
Jinan
Jogja
Kabul
Kansas City
Latvia
London
Madurai
Manchester
Mato Grosso
Melbourne
Minas Gerais
Minnesota
Montreal
Moscow
Mumbai
Munich
NEA
NIT Hamirpur
Netherlands
New England
New York City OpenSolaris User Group
New Zealand
Noroeste
Nuremberg-Erlangen
Oklahoma City
Osnabrück
Peru
Philadelphia
Piaski
Pittsburgh
Porto Alegre
Puget Sound
Pune
Queensland
Research Triangle Park
Rio de Janeiro
Romania
Russia
San Antonio
San Diego
San Francisco
Scottish
Serbia
Shenzhen
Silicon Valley
Singapore
Slovak
South African
Southern Connecticut
St. Louis
Stavanger
Sweden
Switzerland
Sydney
Szczecin
São Paulo
Taiwan OpenSolaris User Group
Tecum
Thames Valley
Tokyo
Toronto
Trondheim
Tulsa
Turkey
Ufa OSUG
Ukraine OpenSolaris User Group
University of Melbourne
Vale do Paraíba
Vancouver
Venezuela - Pagina de incio
Vladivostok
Welsh - Cymru
Wisconsin
Xi'an
Community Group tools Pages
Build/Install OpenSolaris (Part 1)
Build/Install OpenSolaris (Part 2)
Downloads
Files
GCC
Bug Fixing Notes
Build Instructions
Important Notes
ONNV Policy
Background and Rationale
Shadow Compilation
Current Status
Mercurial Tools
Dynamic Linking
OpenSolaris Source Code Management
OpenSolaris DSCM Evaluation: Bzr (Interim Report)
OpenSolaris DSCM Evaluation: Mercurial
DSCM Requirements Document
Candidate Evaluation Form
Evaluation Plan
How To Use Mercurial (hg) Repositories
How To Transition from Teamware to Mercurial
SCM Project History
ON SCM-Related Tools
Source Code Management for OpenSolaris: MILESTONES
SCM console specification
SCM hosting implementation specification
How To Use SVN Repositories
Source Code Management Downloads
Sun Studio Downloads
Sun Studio FAQs
Sun Studio Getting Started
Sun Studio 11 License
Sun Studio 12 License
Sun Studio 10 License
Sun Studio 10 Downloads
Sun Studio 11 Downloads
Sun Studio 11-- Previous Downloads
Sun Studio 12 Compilers and Tools for the OpenSolaris Common Build Environment (CBE)
Sun Studio Support
testing nightly


Six People Killed, 37 Injured as Bus Plunges Off Cliff in Peru - Reports
BRASILIA, November 12 (Sputnik) - A passenger bus has plunged off a cliff in Peru, killing at least six people and injuring 37 more, Peruvian media reported, citing the Prosecutor’s Office.
The accident took place late on Monday as the passenger bus was heading from Puno to Juliaca — one of the most popular tourist destinations due to Lake Titikaka tours starting from Puno and the airport being situated in Juliaca, according to the RPP broadcaster.
The investigation is ongoing, and the number of casualties may later rise, RPP added.
Fatal road accidents are frequent in Peru due to speeding, poor road conditions and dangerous turns. In early October, 23 people were killed in a bus crash in the southern Cusco region.


Click here to download this week's dataset as a CSV
Click here to download this week's dataset as a Hyper Extract
Historical Background
I read an article earlier this week that cited lower divorce rates in millenials. The article referenced research into the trends that found that millenials are waiting longer to get married, which they believe is contributing to the lower divorce rate. The best data source for this was the United States Census, and I really like playing with Census data, so here we are.
We're unlikely be able to prove that later marriages are contributing to lower divorce rates, but there are sure to be some insights in the data. If you'd like to see what you can do with this week's dataset, create your viz and post your work to Tableau Public and Twitter with the hashtag #ThrowbackDataThursday, tagging @TThrowbackThurs. We'd really love to see what you can come up with!
Data Source
This week's dataset comes from the U.S. Census Bureau, American Community Survey Estimates. Please be sure to cite the source on your viz.
Data Notes
The column Estimated Population was calculated by multiplying the estimated total population for the gender/age group with that gender/age group's estimated percentage. The values are approximate, and fall within the stated margin of error.


Please fill the below form to start.
You can add new Question or use from previous campaign!
Please add voucher details!
Here are your campaign details!
| Campaign Created On : {{editCampaign.info.createdOn|date}} | |||
| Campaign Name : {{editCampaign.info.name}} | Campaign Type : {{selected.subType.label}} | Start Date : {{editCampaign.info.startDate|date:'dd-MMMM-yyyy'}} | End Date : {{editCampaign.info.endDate|date:'dd-MMMM-yyyy'}} |
| Survey Questionnaire | |||
| Not Applicable | |||
| Header Information | |||
| Header Title : {{editCampaign.info.termsAndCondition.title}} | Description : {{editCampaign.info.termsAndCondition.description}} | ||
| Header Settings | |||
| PAX : {{item.paxNo}} | Voucher Code : {{item.headerId}} | Voucher Details : {{item.voucherDetails}} | Voucher Value: {{item.voucherValue}} |


EBD - Easton Bible DIctionary
End
END
"END "in
Hebrews 13:7
, is the rendering of the unusual Greek word ekbasin, meaning “outcome”, i.e., death. It occurs only elsewhere in 1 Corinthians 10:13, where it is rendered “escape.”
"END "in Hebrews 13:7, is the rendering of the unusual Greek word ekbasin, meaning “outcome”, i.e., death. It occurs only elsewhere in 1 Corinthians 10:13, where it is rendered “escape.”


Tests!
If you're up to it, then change to the tests directory, and use the following command for non-verbose testing. You should get "OK" in bottom line if all went okay after you run this:
python -m unittest discover -s . -p 'test_*.py'
If you're curious and want to see more, then change to the tests directory, and use the following command for verbose testing. You should get "OK" in bottom line if all went okay after you run this:
python -m unittest discover -s . -p 'test_*.py' -v
This seemed like a good place to put some other, higher-level notes and thoughts for testing that you might consider...
Scenario #1: Given a linear chirp with amplitude and frequency ranges that are representative of the loudest International Space Station's vibratory microgravity environment, we should expect a portion of that signal (below 20 Hz and perhaps even a bit higher than that) to be inaudible. Let's test this as follows:
1. Create linear chirp signal (described in scenario statement above) and save that as acceleration file like so:
command goes here
2. Convert the acceleration file you just created into an audio AIFF file thusly:
command goes here
3. Listen to the audio AIFF file and try to gauge at what time in seconds relative to start of playback that you start to hear the signal.
Sox or Audacity command goes here
4. Multiply the time you first hear sound in seconds relative to the start of playback from #3 and multiply that by WHAT SCALE FACTOR to get the approximate lower end of your hearing frequency range. The scale factor comes from how the frequency of the linear chirp signal was changing with time.
Scenario #2: Given the same scenario as Test Case #1, except that we convert using a new, higher rate we now expect to hear more (longer duration) of the chirp.
1. Do steps #1 and #2 shown in Scenario #1 above.
2. Convert acceleration to audio AIFF file, but use a new, higher rate:
command goes here
3. Listen to the audio and notice this is a technique you can use to hear the otherwise inaudible, kinda like night-vision goggles. Beware though...in this scenario, we are intentionally distorting the signal.


CADDY ANALYTICS
source code
TIME RANGE
Loading...
PARSE DURATION
Loading...
LOG SIZE
Loading...
LOG DIRECTORY
Loading...
Loading...


Me
Hello,
Username
Profile
Logout
248k
30k
124k
89k
Kirim SMS Agung TOYOTA
Wednesday
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
31
30
29
28
27
Add Event
Profile
Messages
5
Invites
3
Events
5
Favorites
Statistics
Settings
© 2013 Designed by
GraphicBurger
• Template by
w3layouts


|
SuanShu, a Java numerical and statistical library | |||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object com.numericalmethod.suanshu.stats.regression.linear.LmProblem
public class LmProblem
This class represents a linear regression or a linear model (LM) problem.
Linear regression models the relationship between a scalar variable y and one or more variables denoted X. In linear regression, models of the unknown parameters are estimated from the data using linear functions. Most commonly, linear regression refers to a model in which the conditional mean of y given the value of y is an affine function of y.
| Field Summary | |
|---|---|
ImmutableMatrix |
A
the design matrix, the regressors, including the intercept if any; each column corresponds to one regressor a n x m matrix |
boolean |
addIntercept
true iff to add an intercept term to the linear regression |
ImmutableMatrix |
wA
the weighted design matrix, w |
ImmutableVector |
weights
the weights to each observation |
ImmutableVector |
wy
the weighted response vector |
ImmutableVector |
y
the response vector; the regressands; the dependent variables a vector of length n |
| Constructor Summary | |
|---|---|
LmProblem(LmProblem that)
Copy constructor. |
|
LmProblem(Vector y,
Matrix X)
Construct a linear regression problem, assuming a constant term (the intercept) equal weights to all observations |
|
LmProblem(Vector y,
Matrix X,
boolean addIntercept)
Construct a linear regression problem, assuming equal weights to all observations. |
|
LmProblem(Vector y,
Matrix X,
boolean addIntercept,
Vector weights)
Construct a linear regression problem. |
|
LmProblem(Vector y,
Matrix X,
Vector weights)
Construct a linear regression problem, assuming a constant term (the intercept). |
| Method Summary | |
|---|---|
protected void |
checkInputs()
Check whether this LmProblem instance is valid. |
Matrix |
invOfwAtwA()
(wA' %*% wA)-1 |
int |
nExogenousFactors()
the number of factors, excluding the intercept |
int |
nFactors()
the number of factors, including the intercept if any |
int |
nObs()
the number of observations |
Matrix |
X()
Get a copy of the factor matrix. |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
|---|
public final ImmutableVector y
a vector of length n
public final ImmutableVector wy
public final ImmutableMatrix A
a n x m matrix
public final ImmutableMatrix wA
public final boolean addIntercept
true
iff to add an intercept term to the linear regression
public final ImmutableVector weights
| Constructor Detail |
|---|
public LmProblem(Vector y, Matrix X, boolean addIntercept, Vector weights)
y
- the dependent variablesX
- the factorsaddIntercept
- true
iff to add an intercept term to the linear regressionweights
- the weights to each observationpublic LmProblem(Vector y, Matrix X, Vector weights)
y
- the dependent variablesX
- the factorsweights
- the weights to each observationpublic LmProblem(Vector y, Matrix X, boolean addIntercept)
y
- the dependent variablesX
- the factorsaddIntercept
- true
iff to add an intercept term to the linear regressionpublic LmProblem(Vector y, Matrix X)
y
- the dependent variablesX
- the factorspublic LmProblem(LmProblem that)
that
- another LmProblem| Method Detail |
|---|
public int nObs()
public int nFactors()
public int nExogenousFactors()
public Matrix X()
The automatically appended intercept is not included.
public Matrix invOfwAtwA()
protected void checkInputs()
java.lang.IllegalArgumentException
- if this problem is invalid
|
SuanShu, a Java numerical and statistical library | |||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


[gecode-users] std::set to Gecode::IntVar conversion - my quick and dirty solution
Grégoire Dooms
dooms at info.ucl.ac.be
Thu May 11 15:43:55 CEST 2006
Martin Mann wrote:
> I didnt used the graph package, that already have got the feature
> std::iterator -> Gecode::Iterator, because I ve got trouble to compile
> the package on my cygwin system with the included boost version. I
> gave it up at the moment.
Could you tell me which version of Cygwin/boost you used ?
Thanks,
--
Grégoire
More information about the gecode-users
mailing list


The meaning of Imdaad is "to help" and we at Enactus JMI seek to bring together communities from two different states in India, by building a model that works on codependency and supporting each others' livelihood. The project is a sustainable business model stimulated by a naturally crafted healthy and refreshing drink known as ‘Kerala Kan’.
Kudumbashree is a community of women in Kerala, hailing from socio-economically deprived part of the society, working as a self help group. The other community involved in this project is Marham, an NGO advocating the cause of homeless people. It attempts to reintegrate the rehabilitated youth into the society through vocational training and education.
Nannari roots, available in Kerala, are medicinal herbs with effective cooling and body purifying properties. The syrup from these roots is prepared by the women of Kudumbashree community and the final product is synthesized by NGO Marham using either milk or water.
Delhi, with extreme conditions in the warmer months proves to be an ideal market for such health drinks. Kerala Kan has maximum health benefits as it happens to be a 100% natural drink.
The engagement of Kudumbashree women of Kerala and rehabilitated youth from the city of Delhi in creating and manufacturing Kerala Kan has been an effective measure in the development of both the communities.


Introduction
The AM335x processor used on the Beaglebone, hosts next to the ARM main CPU two additional CPU cores called PRU (Programmable Realtime Units). This brings next to mainline linux and connectivity, also real-time, lightning fast GPIO. A driver is needed to accommodate interaction between the ARM host processor and the PRU remote processors. Although the Remoteproc driver is now standard, the UIO driver is still used because of it's simplicity (compare this example with this one). This guide is intended to document how to enable the UIO PRU driver in newer Debian Beaglebone images.
Prerequisite: a working and compatible image
First off, this guide is based on a known to be working Beaglebone image. Testing shows that there's actually only one image on Beaglebone.org that is suitable, at least, in combination with a Beaglebone Green, which is used here (see also note 1 and 2 below regarding kernels and making bootable sd-cards):
| image (beaglebone.org) | UIO | Remoteproc | Remark |
|---|---|---|---|
| bone-debian-8.7-lxqt-armhf-2017-03-19-4gb.img | no | yes | Remoteproc hard-coded in kernel |
| bone-debian-8.7-iot-armhf-2017-03-19-4gb.img | no | yes | Remoteproc hard-coded in kernel |
| bone-debian-8.6-lxqt-4gb-armhf-2016-11-06-4gb.img | yes | yes | Only usable image for BBG at time of writing |
| bone-debian-8.6-iot-armhf-2016-11-06-4gb.img | ? | ? | Did not boot on BBG |
| bone-debian-8.6-iot-armhf-2016-12-09-4gb.img | ? | ? | Did not boot on BBG |
| bone-debian-8.3-lxqt-4gb-armhf-2016-01-24-4gb.img | no | yes | Does not have .dts source files that can be used shown as "Debian 8.5 2016-05-13 4GB SD LXQT" |
After downloading the image, writing it to an sd-card and booting the Beaglebone from it, the status of the uio driver can be polled:
lsmod | grep uio
which reveals:
uio_pdrv_genirq 3923 0
uio 10524 1 uio_pdrv_genirq
This could lead to the incorrect conclusion the uio driver has already been inabled. Therefore, the uio driver needs to be enabled, and the remoteproc driver disabled.
How to Enable the UIO driver
The steps essentially boil down to the following main steps:
- enable the UIO driver and disable the Remoteproc driver in the device tree binary (dtb)
- modify eUnv.txt to use the modified dtb
- blacklist the Remoteproc drivers
The first step indicates that next to the normal way of enabling and disabling kernel drivers, modifying the device tree is needed to enable the UIO driver. As a side note, this also is the case for enabling the Wireless driver on a Beaglebone Green Wireless - it took a while to figure that out.
Locate the source files of the device tree binaries
When using the Beaglebone image downloaded from Beaglebone.org, at least the version used here, the source of the device tree binaries (dtb's) is provided in the /opt/source/ directory:
cd /opt/source/dtb-4.4-ti/
It's well possible this is also provided by the factory installed image on the EMMC of your Beaglebone. Otherwise the git repository can be cloned as well, but make sure the correct branch is selected (in this case the "4.4-ti" branch matching the kernel version of the image), by issuing the command "git clone -b 4.4-ti https://github.com/RobertCNelson/dtb-rebuilder dtb-4.4-ti --depth=1" in a suitable empty directory, e.g. /opt/source/.
Modify your dtb to enable the UIO driver
Check which board file you need to modify. As explained in the prerequisites above, each Beaglebone has it’s own .dtb file. It’s the corresponding source file that has to be modified to enable the UIO driver, for which the filename ends with .dts. In this case, the am335x-bonegreen.dts is modified as an example:
nano src/arm/am335x-bonegreen.dts
Then locate and uncomment the pruss uio part, and disable the remoteproc part:
#include "am33xx-pruss-uio.dtsi"
/* #include "am33xx-pruss-rproc.dtsi" */
Compile the board files and install by issuing the make command (assuming your're still in the /opt/source/dtb-4.4-ti directory where the Makefile is located:
make
sudo make install
Modify your uEnv.txt to use the modified dtb
Ensure the adapted device tree binary is used during boot by editing the /boot/uEnv.txt:
sudo nano /boot/uEnv.txt
and uncomment the empty "#dtb=" by mentioning the corrected dtb in there:
dtb=am335x-bonegreen.dts
Blacklist the Remoteproc drivers:
Edit or add a blacklist file /etc/modprobe.d/pruss-blacklist.conf:
sudo nano /etc/modprobe.d/pruss-blacklist.conf
By adding the the 3 lines to this file:
blacklist pruss
blacklist pruss_intc
blacklist pru-rproc
And ensure uio_pruss is of course not mentioned here as blacklisted. Then reboot the Beaglebone:
sudo reboot
Check if UIO is enabled
Test to see if the device tree file loaded successfully:
lsmod |grep uio
This should now show:
uio_pruss 4928 0
uio_pdrv_genirq 3539 0
uio 8822 2 uio_pruss,uio_pdrv_genirq
Instead of the response shown earlier. As next step, check these additional guides how to code the PRU in C, and how to share memory between the ARM host and PRU processors. To support and or give feedback, feel free to comment on the beagleboard.org forum.
Closing Remarks
The Beaglebone is a challenging, open source Single Board Computer, with huge potential, but has a steep learning curve given it's complexity and way things are dealt with and change over time causing out of date guides and the like. Hopefully this guide remains to help out long enough and gets you going with the real interesting part - programming the PRU's themselves. Enjoy!
Notes
1) Apart from using an image for the complete OS, a kernel upgrade might also be workable. The linux-image-4.4.30-ti-r64 is the kernel used in the working image mentioned above, and linux-image-4.4.14-ti-r34 is the kernel used in another project mentioned on this site. Check beaglebone.org forum for more info as it's kind of a hit and miss what's working or not due to it's ongoing development.
2) Some brief instructions how to make a bootable sd-card in Debian after downloading the preferred image. First decompress the downloaded image:
unxz bone-debian-8.6-lxqt-4gb-armhf-2016-11-06-4gb.img.xz
Then copy the disk image to the micro-sd by the easiest method found so far:
sudo dd bs=4M if=bone-debian-8.6-lxqt-4gb-armhf-2016-11-06-4gb.img of=/dev/the_device you_found_with_lsblk && sync
3) It is also worth noting, that work is ongoing to be able to select either uio or remoteproc in uEnv.txt directly. It's unclear as for now if this will make the instruction on this page still applicable or not.


{% include "dashboard/shared_links.html" %}
Join
{% include "dashboard/navigation_bar.html" %}
Not enough items in inventory! Try with lesser quantity of items to checkout
Checkout


Gehlot questions morality of Maha govt formation
by PTIRajasthan Chief Minister Ashok Gehlot on Saturday questioned the morality of revoking the President's rule and swearing-in of the chief minister and deputy chief minister in Maharashtra.
Gehlot said both the chief minister and deputy chief minister were "guilt conscious" and raised a doubt whether they would be able to deliver good governance.
Referring to the political development in Maharashtra, Gehlot asked what morality was there in the sudden revocation of President's rule and such swearing-in.
"Which direction are they taking democracy to?" Gehlot asked on Twitter, adding that people would teach a lesson to the BJP on an appropriate time.
Gehlot said he was doubtful whether Devendra Fadnavis would be successful as a chief minister and deliver good governance, adding that the people of Maharashtra would suffer.


Ex: http://steamcommunity.com/id/pawankolhe
Include the hashtag (Ex: Popo #6845) --> Join our Discord Channel - https://discord.gg/kScFfwc
Optional
Optional but you cannot add or change your substitute after registration.
This will allow us to reach you when you are not online.
Anything you want to say to us <3
Please check the required fields.


COOKIE POLICY
This cookie policy (hereinafter referred to as the "Cookies Policy") is specifically designed to explain the types and methods of use of cookies and to provide guidance on how to refuse or delete, if desired, cookies on the www.instyleshowroom.com. website (hereinafter referred to as the "Site").
The Data Controller is Instyle srl with registered office in Via Bernina 43, Milan (hereinafter also referred to as the "Controller") and processes the personal data of users (hereinafter referred to as the "User" or "Users") collected and processed with cookies through the Site, in accordance with Legislative Decree no. 196/2003 as amended (hereinafter also referred to as the "Privacy Code") and EU Regulation 2016/679 (hereinafter also referred to as the "GDPR").
A. What are Cookies?
The Site uses cookie technology. Cookies are small text files that are downloaded by the browser onto the device used by the User (computer, tablet, smartphone) when they visit a website. Cookies are then retransmitted to the original site during the browsing session or upon any subsequent visit by the User.
There are several types of cookies. Some are strictly necessary for a website to function properly (technical cookies), while others optimize its performance to provide a better user experience or allow you to collect statistics on site usage ( analytical cookies) or to display personalized advertising (profiling cookies).
Our cookies are anonymous and cannot be linked to your personal data. First party cookies are associated with the domain name of the page you are visiting and allow us to identify you by cross-referencing with our database. Your identity is never directly included in the cookie and cannot be intercepted.
Each time you access the Site, regardless of whether a cookie is present or not, we record your browser type, operating system and host along with your source URL, as well as information about the page you requested. This data may then be used in aggregate and anonymous form to perform statistical analysis of website usage.
B. Cookies Used on the Site
The list of technical, analytical and profiling cookies used on the Site is shown below:
1. Technical cookies
Technical cookies are necessary to allow safe and efficient exploration as well as proper functioning of the Site and to improve the User experience. They also allow us to distinguish between the different Users connected to the Site both for security reasons and in order to provide a service requested by the User. No consent is required for these cookies. Technical cookies can be:
- “session” type, that ensure normal exploration and use of the Site (e.g. for authentication to access secure areas). They are not used for further purposes and are normally installed directly by the owner or operator of the website (so-called "proprietary cookies").
- “persistent” type that remain stored on the computer's hard drive until their typical expiry or deletion by users/visitors. With the use of persistent cookies, visitors that access the Site (or any other Users who use the same computer) are automatically recognised upon each visit. Persistent cookies satisfy many features in the interest of surfers (e.g. language preferences). Visitors can set the computer's browser so that it accepts/refuses all the cookies or display a warning each time a cookie is offered in order to assess whether or not to accept it. The User is however entitled to modify the default configuration and to disable cookies (i.e. to block them definitively) by setting the highest level of protection.
These type of cookies can also be:
- “first party”” when they are managed directly by the owner and/or operator of the Site (in this case by the Controller);
- “third party” when they are generated and managed by third-party providers outside the Site. This Site is unable to control over these subjects and their cookies and to access the information they collect. Responsibility for this type of cookie lies directly and exclusively with the third party itself. Information about the use of these cookies and their purpose, as well as on how to disable them, is provided directly by the third party.
The Site uses the following first party technical cookies to allow safe and efficient exploration and to improve the service provided by the Site:
| Name | Type | Duration |
|---|---|---|
| _gat | Session cookie | |
| _ga | Persistent cookie | 730 days |
| _gid | Persistent cookie | 1 day |
| pll_language | Persistent cookie | 365 days |
The Site uses the following third-party technical cookies:
| Name | Type | Domain | Duration |
|---|---|---|---|
| _cfduid | Persistent cookie | .cdnsnapwidget.com | 365 days |
| _cfduid | Persistent cookie | .snapwidget.com | 365 days |
| _gid | Persistent cookie | 1 day | |
| pll_language | Persisent cookie | 365 days |
Further information on snapwidget cookies and their use can be found directly on the snapwidget website by clicking on the following link: https://snapwidget.com/cookies. .
2. Third-party analytical cookies
Third-party analytical cookies are cookies set by a website other than the one you are currently visiting.
This Site is unable to control over these subjects and their cookies and to access the information they collect. Responsibility for this type of cookie lies directly and exclusively with the third party itself. Information about the use of these cookies and their purpose, as well as on how to disable them, is provided directly by the third party. Therefore, it is necessary to see the privacy and third-party analytical cookie policies by visiting the websites of the third-party operators.
Please note that generally the user tracking does not involve their identification, unless the User is not already registered and also logged in, thus meaning that the User has already given his consent directly to the third party at the time of registration to the service provided.
The Site uses the following third-party analytical cookies:
-
“Google Analytics” that are used to collect and analyze statistical information about accesses/visits to
the Site. This type of cookie collects information in an anonymous form and will not allow the Site to
identify the User nor collect any information about their activity on the Site, the way they arrived at
the Site and the pages they visit. The Controller uses this information provided by Google Analytics for
statistical analysis, to improve the Site and simplify its use, as well as to monitor its proper
functioning.
The data collected does not allow the personal identification of users, and is not crossed with other information about the same person. They are processed in an aggregate and anonymous form (truncated by the last octet). Google Inc. is not allowed to cross-reference this data with other services on the basis of a specific agreement.
Further information on privacy and data use can be found directly on the Google Analytics website by clicking on the following link: https://www.google.com/analytics/terms/us.html
In order to disable (opt out) the collection of data by Google Analytics, the User can download the Google Analytics Opt Out Browser Add-on: https://tools.google.com/dlpage/gaoptout?hl=en
3. Profiling cookies
Profiling cookies are designed to create user profiles in order to send advertisements in line with the preferences expressed by the user with regard to surfing the web. The use of these cookies requires the User's consent, which can be revoked (opt out) at any time in the manner indicated in this Policy.
4. Third-party cookies
By visiting the Site you may receive cookies from sites operated by other providers ("third parties"), such as "social plugins" for Facebook, Twitter, Instagram, or embedded systems in order to display multimedia content (e.g. Youtube). These plugins are generated directly from these sites and displayed on the host site visited. By means of these plugins, cookies are transmitted from and to all sites operated by third parties. The management of information collected by third parties is governed by the corresponding policies, so please refer to these. For the sake of transparency and convenience, the following are the web addresses of the different policies and methods for managing cookies.
Facebook policy: https://www.facebook.com/help/cookies/
Facebook (setup): log in to your account. Privacy section.
Instagram (setup): http://instagram.com/legal/terms
Instagram policy: https://help.instagram.com/1896641480634370?ref=ig
Youtube\Google+ policy: http://www.google.it/intl/it/policies/technologies/cookies/
Youtube\Google+ (setup): http://www.google.it/intl/it/policies/technologies/managing/
C. Purposes
The Site uses technical cookies to make it possible and easy for Users to navigate the Site as well as to provide and allow Users to use its services. The Site uses analytical cookies to anonymously analyze and monitor the way Users use the Site (e.g. number of accesses and visited pages), for statistical purposes, and to enable improvements to the Site in terms of operation and navigation.
The site uses third party cookies to provide additional services and functionality to visitors and to simplify the use of the Site, or to display targeted advertising.
D. Cookie Consent
The Controller stores any user consent provided by means of a technical cookie, which has a duration of 12 months. The User is informed both by means of the short notice (banner displayed on the first visit of the site until consent is given or denied) and by means of this extended policy; in addition, paragraph 4 provides links to third party privacy policies, as well as ways to disable the corresponding cookies - where directly possible. As provided for by current legislation, explicit consent is recorded by means of a technical cookie installed for which an action is required by the user: selecting the link "close", closing the banner containing the brief information, or scrolling through the page. Provision of data is optional. You can change your cookie preferences at any time by following the procedures described below. You can also disable cookies from your browser at any time, but this may prevent you from using certain features of the Site.
Responsibility for third-party cookies lies directly and exclusively with the third party itself. Therefore, it is necessary to see the privacy and third-party cookie policies by visiting the websites of the third-party operators listed in this Policy.
E. How Do I Manage Cookies?
You can manage cookies by changing the preferences of your browser. You can accept all cookies, only some cookies, or decline all cookies. If you decide to opt out of all cookies (including technical cookies), you may not be able to access some areas of the Site or use the services provided.
F. How Do I Disable Cookies?
Each browser allows you to opt out of cookies. Below is some purely indicative information about the procedure to follow in order to disable cookies, depending on the browser used.
Internet Explorer 11.0:
- Select the Tools button, and then select Internet options.
- Select the Privacy tab, and under Settings, select Advanced and choose whether you want to accept, block, or be prompted for first-party and third-party cookies.
Firefox 4.0+:
- Click the menu button and choose Preferences.
- Select the Privacy & Security panel and go to the Cookies and Site Data section.
- Select Block cookies and site data and then use the drop-down menu next to Type blocked to choose the types of cookies to block.
Chrome:
- At the top right, click More and then Settings.
- At the bottom, click Advanced.
- Under "Privacy and security," click Content settings and then Cookies.
- Turn Allow sites to save and read cookie data on or off.
Safari 5.0:
- Click the Safari menu and select Preferences
- Click the Security tab.
- In the Accept cookies section, specify whether you want to accept cookies at all times, never or only from the sites you visit. For an explanation of the different options, click the Help button in the form of a question mark. If Safari is set to block cookies, you may need to accept them temporarily to open the page. Then repeat the steps above and select Always. When you are done using the help, disable the cookies again and delete them.
For more information about other commonly used browsers and how to manage cookie, please refer to: www.allaboutcookies.org.
G. Communication and dissemination of data
The data collected through cookies may be processed by employees and associates of the Controller as authorized parties and/or system administrators.
This data may also be processed by trusted companies that carry out technical and organisational tasks on our behalf. Such companies are our direct partners and act as data controllers.
In particular, as far as the data processed on this site is concerned, the Controller has appointed the company SI-NET SRL (via Ariberto D’Intimiano, 25 20025 Legnano (Mi), email<EMAIL_ADDRESS>as Data Controller, with regard to the management and technical maintenance of the site.
Data collected through cookies will not be sold to third parties.
The data collected using Google and Facebook cookies may be transferred by these third parties outside the European Union, in particular to the United States of America. For more information please see Google and Facebook cookie policies.
Data collected through cookies will not be disseminated.
H. The User's rights
Pursuant to Article 7 of the Privacy Code and pursuant to Articles 13, paragraph 2, letters (b) and (d), 15, 18, 19 and 21 of the GDPR, the User has the right at any time to:
- ask for confirmation of the existence or not of his/her personal data;
- ask information about the purposes of the processing, the categories of personal data, the recipients or categories of recipients to whom the personal data have been or will be communicated and, where possible, the period of storage.;
- ask to correct or delete his/her data;
- request the limitation of the processing or to oppose the processing;
- request data portability, receive data from a Data Controller, in a structured format, commonly used and readable by automatic device, and transmit them to another Data Controller without hindrance;
- revoke the consent at any time without affecting the lawfulness of the processing based on consent before the withdrawal; >
- lodge a complaint with the Italian data protection authority, the Garante, by following the procedures and indications published on the Authority's official website at www.garanteprivacy.it.
Any corrections or cancellations or limitations to the processing carried out at the request of the user - unless this proves impossible or involves a disproportionate effort - will be communicated by the Controller to each of the recipients to whom the personal data have been transmitted. The Controller may notify the user of such recipients if he/she so requests.
The exercise of the rights is not subject to any form constraint and is free of charge and may be exercised by contacting the Data Controller by sending a written communication to the address below or an email to<EMAIL_ADDRESS>I. Who are the Data Controllers?
The Data Controller is
Instyle srl with registered office in Via Bernina 43, Milano
email<EMAIL_ADDRESS>The Data Processor are
- Google, as the data processor on behalf of the data controller (Google Analytics) https://privacy.google.com/intl/it/index.html#
Last updated: July 2018


The hero's birthday is {{ birthday | date }}
The hero's birthday is {{ birthday | date:"MM/dd/yy" }}
The hero's birthday is {{ birthday | date:format }}
The chained hero's birthday is {{ birthday | date | uppercase}}
Super power boost: {{2 | exponentialStrength: 10}}
Super Hero Power: {{power | exponentialStrength: factor}}


Assume we have a boolean variable x. We want to make an if statement that will run if x is not True. Which of the following conditional statements would do this?
if(x == False)and
if(x != True)will do this
if(x)
if(!x)
if(x == False)
if(x != True)
if(x)and
if(!x)will do this
There are no hints for this question
Assume we have a integer variable "a". We want to make an if statement that will run if a is at least 10. Which of the following conditional statements would do this?
if(a>8)
if(a>10)
if(a<=10)
if(a<10)
if(a>11)
There are no hints for this question
Assume we see an if statement that reads
if(!True). What would you know about this code?
if(!True)would produce a syntax error.
There are no hints for this question


"ENDOR "fountain of Dor; i.e., “of the age”, a place in the territory of Issachar (Joshua 17:11) near the scene of the great victory which was gained by Deborah and Barak over Sisera and Jabin (comp. Psalm 83:9, 10). To Endor, Saul resorted to consult one reputed to be a witch on the eve of his last engagement with the Philistines (1 Samuel 28:7). It is identified with the modern village of Endur, “a dirty hamlet of some twenty houses, or rather huts, most of them falling to ruin,” on the northern slope of Little Hermon, about 7 miles from Jezreel.
"ENDOR "fountain of Dor; i.e., “of the age”, a place in the territory of Issachar (Joshua 17:11) near the scene of the great victory which was gained by Deborah and Barak over Sisera and Jabin (comp. Psalm 83:9, 10). To Endor, Saul resorted to consult one reputed to be a witch on the eve of his last engagement with the Philistines (1 Samuel 28:7). It is identified with the modern village of Endur, “a dirty hamlet of some twenty houses, or rather huts, most of them falling to ruin,” on the northern slope of Little Hermon, about 7 miles from Jezreel.


WITNESS LIST Higher Education Committee April 13, 1999-4:00P HB 893 For: Bledsoe, Gary (Texas NAACP) Hackett, Amber (Self) Ross, William Lamont (Texas NAACP Youth & College Division) Against: Zucker, Charles (Texas Faculty Association) Registering, but not testifying: For: Banks, Yannis (Central Texas College NAACP) Haywood, Neteka (Self) Jackson, KaTodra D. (Self) Manallah, Rabha (Central Texas College NAACP) Martinez, Amanda (Self and NAACP - Texas) Oliver, George E. (Self and Baylor University NAACP) HB 1902 For: Bledsoe, Gary (Texas NAACP) Ross, William Lamont (Texas NAACP Youth & College Division) Registering, but not testifying: For: Banks, Yannis (Central Texas College NAACP) Jackson, KaTodra D. (Self) Manallah, Rabha (Central Texas College NAACP) Martinez, Amanda (Self and NAACP - Texas) Oliver, George E. (Self and Baylor University NAACP) Sanchez, Joe (Mexican American Legal Defense and Educational Fund) HB 2070 Registering, but not testifying: On: Moore, Richard S. (The University of Texas Medical Branch at Galveston) Revill, Lawrence (University of Texas Medical Branch) HB 2302 For: Rodriguez, David R. (Self and Southwest Texas State University Student Government) Registering, but not testifying: On: McAllister, Brad (Southwest Texas State University) Nance, William A. (Southwest Texas State University) HB 2770 Registering, but not testifying: For: Banks, Yannis (Central Texas College NAACP) Haywood, Neteka (Central Texas NAACP) Jackson, KaTodra D. (Self) Manallah, Rabha (Central Texas College NAACP) HB 2812 On: Flack, Teri (Texas Higher Education Coordinating Board) Smisko, Ann (Texas Education Agency, Associate Commissioner) Registering, but not testifying: For: Lara, Rene (Texas Federation of Teachers) Zucker, Charles (Texas Faculty Association) On: Clark, Charles T. (Terry) (Educational Productivity Council, University of Texas at Austin) HB 3236 For: Foster, Jerry D. (International Business College, INC) HB 3263 For: Westbrook, Steve (Blinn College Board of Trustees) HB 3348 On: Rao, Mani (State Comptroller's Office) HB 3544 For: Hillyard, Todd (Self and Texas Dental Association) James, Laji Joseph (Self) Kristoff, Adam (Self) On: Cole, James S. (Baylor College of Dentistry & Texas A&M Health Science Center) Registering, but not testifying: For: Hanners, Sally (Texas Dental Association) HB 3583 For: Aguero, Robert (Dallas County Community College District) Garcia, Rey (Texas Association of Community Colleges) On: Flack, Teri (Texas Higher Education Coordinating Board) Registering, but not testifying: For: Banks, Yannis (Central Texas College NAACP) Caswell, Jackie (Dallas County Community College District) Haywood, Neteka (Central Texas NAACP) Jackson, KaTodra D. (Self) Lara, Rene (Texas Federation of Teachers) Manallah, Rabha (Central Texas College NAACP) HB 3715 For: Sharpe, J. Shelby (Self and Southern Bible Institute, Hispanic Bible Institute and HEB Ministries) Against: McDonald, Carol L. (Independent Colleges and Universities of Texas, Inc) HCR 117 For: Warner, Freddy (Self and Automotive Wholesalers of Texas)


| Figure 1 |
Dominant geomorphic types on the Arctic Coastal Plain of nor ... |
| Figure 2 |
Decadal time scale Landsat derived greenness (NDVI) trend an ... |
| Figure 3 |
Three dimensional partial dependency plots from gradient boo ... |
| Figure 4 |
Three dimensional partial dependency plot from gradient boos ... |
| Figure 5 |
Forecasted change in greenness (2020–2029) relative to the l ... |
| Figure 6 |
Projected variability in greenness (2020–2029) using five cl ... |


Porting to Android
Porting your favourite cmdline tool to Android
Vlatko Kosturjak (@k0st), Droidcon Zagreb, 30th of April
Agenda
- Introduction
- Native code
- Toolchains
- Things I wish I knew in advance
- Calling native executables
- Issues and implications
- Summary
- Questions and answers
45 minutes
About me
- Security Consultant in Diverto
- Linux and FLOSS enthusiast
- Open source developer
- Android "developer" since 2010
- started counting from first Market app
- mostly focused on NDK and ADK
About me in pictures
Introduce elephant
- Talk will cover
- producing standalone binaries
- executing standalone binaries
- Talk is mostly about Nmap experience
- Talk will NOT cover
- producing libraries or JNI
- integrating with Android Studio
Native code
- NOT your Java code :)
- It's mostly about
- Not portable across platforms
- For each platform, you need different binary
Why bother with native code?
- performance
- legacy code
- code reuse
- you just need that tool
What's the process?
- compiling
- compiling on same machine
- cross-compiling
- compiling on (host) machine for other (target) machine
Toolchains
- Android NDK
- Commercial
- Open Source
- Custom
Custom toolchain
- Your own version of compiler
- Your own version of build scripts
- Custom
Open Source / Free
- Crystax
- drop-in replacement for Google's NDK
- WCHAR, locales, full C+11 standard library...
- Buildroot
- Standard embedded cross compilation toolchain
- ARM, x86, MIPS
- Scratchbox
- ARM, x86, MIPS (experimental)
- Anyone remembers Maemo? :)
- ...
Android NDK
- Android official toolchain
- Available for free from developer.android.com
- Bionic
- No full ANSI C support
- locale
- different threads
- Patch as you grow
- standalone binary support/bugs
- stdout symbol bug
- WCHAR support
- standard library support
What's the fuzz?
- Download NDK
- Download tool you want to port
./configure --host=arm-linux-androideabi
make
make install
In case it is hello world...
/* Hello World program */
#include <stdio.h>
void main()
{
printf("Hello World");
}
It works pretty well indeed.
In real world
- Code isn't perfect
- Not portable
- Endianess
- Path Separators
- Dependencies
- Extensions
- 3rd party libraries
Two ways to invoke compiler
export CC="$NDK/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc"
export CFLAGS="--sysroot=$SYSROOT"
$CC $CFLAGS -o hello hello.c
- Producing directory for target
$NDK/build/tools/make-standalone-toolchain.sh --platform=android-3 --install-dir=/opt/ndk3
/opt/ndk3/bin/arm-linux-androideabi-gcc -o hello hello.c
NDK platforms
| NDK platform |
Platforms |
32/64 bit |
| 3 |
ARM |
32 |
| 9 |
ARM/MIPS/Intel |
32 |
| 21 |
ARM/MIPS/Intel |
64 |
Process of cross compiling
- Compile and fix as you go :)
- Standard problems
- stdout bug
- old autoconf/automake support files
- arm-linux-androideabi missing
- In short
- nothing that google/stackoverflow can't help :)
Static vs Dynamic linking
- Dynamic
- small size
- run-time dependency
- Static
- large size
- no dependencies
Life is perfect
Static binaries working like a charm
“until resolv.conf disappeared :)
”
DNS problems
int main(int argc,char *argv[]) {
int i;
struct hostent *hp;
for ( i=1; i<argc; ++i ) {
hp = gethostbyname(argv[i]);
if ( !hp ) {
fprintf(stderr, "%s: host '%s'\n", hstrerror(h_errno),
argv[i]);
continue;
}
printf("Host:\t%s\n" ,argv[i]);
printf("\tResolves to:\t%s\n", hp->h_name);
}
}
Original at gist
DNS and resolv.conf
#ifdef ANDROID_CHANGES /* READ FROM SYSTEM PROPERTIES */
dns_last_change_counter = _get_dns_change_count();
[..]
#else /* !ANDROID_CHANGES - IGNORE resolv.conf in Android */
#define MATCH(line, name) \
[..]
Original at https://code.google.com/p/android-source-browsing
Dynamic vs Static
| Type |
Size |
Dependency |
DNS OOTB |
| Dynamic |
smaller |
yes |
yes |
| Static |
bigger |
no |
no |
| Mixed |
medium |
yes (basic) |
yes |
Here comes Lolipop
error: only position independent executables (PIE) are supported.
- Position Independent Executable (PIE)
- PIE support appeared in API level 16
- Finally they implemented it :)
- Too bad binaries does not work
What's PIE?
- Position Independent Executable (PIE)
- Security protection
- better Address Space Layout Randomization (ASLR)
- Exploitation mitigation technique
- Harder return-to-libc exploitation
- Requirements
- PIE required for dynamic executables
- PIE not required for static executables
PIE example
#include <stdio.h>
int global;
int checkadr (int *bla)
{
int local;
printf("bla adr = %p\n", &bla);
printf("global adr = %p\n", &global);
printf("local adr = %p\n", &global);
}
int main (void) {
int c;
printf("c adr = %p\n", &c);
printf("checkadr adr = %p\n", &checkadr);
checkadr(1);
}
PIE support
| Android version |
Supported |
Required |
| 1,2,3 |
no |
no |
| 4 |
yes |
no |
| 5 |
yes |
yes |
PIE workaround
- Way to run PIE executables on non supported systems
- if system suppports PIE
- if system does not suppport PIE
- use run_pie.c
- run_pie your_proggy args
CFLAGS +=-fvisibility=default -fPIE
LDFLAGS += -rdynamic -pie
https://gist.github.com/kost/5fd4628f45a4995bec28
Calling native executables
p = Runtime.getRuntime().exec(command);
p.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
output.append(line).append("\n");
}
Better way - using ProcessBuilder
ProcessBuilder processBuilder = new ProcessBuilder(shellToRun);
processBuilder.redirectErrorStream(true);
scanProcess = processBuilder.start();
outputStream = new DataOutputStream(scanProcess.getOutputStream());
inputStream = new BufferedReader(new InputStreamReader(scanProcess.getInputStream()));
while (((pstdout = inputStream.readLine()) != null)) {
output.append(pstdout).append("\n");
}
Running binaries as root
- Not needed to set any new android permission
- Historic references to SUPERUSER permissions
- Not much different than executing as normal user
- Have to Runtime.getRuntime().exec("su")
- Write commands to stdin of process
- Loop the output
Root implications
- Killing run away root processes
- Hard as it can be due to blocking nature
- UI does not have root access
- Killing spawned root processes
- parse ps output
- spawn su shell
- kill process
Security implications
- Native binary problems
- Memory corruption attacks (Buffer overflows, ...)
- Format string problems...
- ...
- Permissions
- Command injections
Security implications - permissions
- Setting insecure permissions to executables/libraries
- Very common when something does not work
- Dangerous and heroic
- Other apps can write to your bin or library
- Exploitation
- Find insecure .so library, inject your code
- Find insecure binary, replace it with your version!
echo "#!/bin/sh" > /data/data/com.heroic.app/bin/mybinary
echo "echo '0wned!'" >> /data/data/com.heroic.app/bin/mybinary
Security implications - untrusted input
- Passing untrusted/unvalidated input to shell
- Running native executables can lead to command injections
- Extremely dangerous if running as user
- Extremely heroic and dangerous if running as root
- Pay special attention to exported activities
- other apps can call that intent
- which means they can execute commands as your app!!
Untrusted input example
Bundle b = getIntent().getExtras();
configFilePath = b.getString("path");
[..]
ShellExecuter exe = new ShellExecuter();
return exe.Executer("cat " + configFilePath);
<activity
android:name=".MyHeroicActivity"
....
android:exported="true" />
Untrusted input exploitation
public void onBtnClick(View view) {
Intent intent = new Intent();
intent.setClassName("com.heroic.app", "com.heroic.app.MyHeroicActivity");
intent.putExtra("path", "/system/etc/hosts; echo 'Owned' > /data/data/com.heroic.app/bin/binary");
startActivity(intent);
}
On the end..
- Don't use ratings for bug reports ;)
- Please submit VERBOSE bug reports to author directly
Fortunately
Fortunately, there are good comments ;)
Thanks on these
Summary
- Porting is quite possible
- Not as easy as marketing says
- You can't configure; make; make install in most cases
- Expect you'll have to patch if project is bigger
- Not that hard
- If you know requirements upfront
- Have listened to this lecture carefully
- Be aware of security implications!
Thanks on listening
?
Any questions?


Bio/CS 399 - Bioinformatics II: Projects in Bioinformatics (Spring 2012)¶
Announcements¶
I’ve adjusted the location of the reading assignments on the course schedule to facilitate adding links here. You’ll now find these off to the right.
The second homework assignment is now posted! See the assignments page here.
General information¶
You can find the course syllabus here
.
The course schedule (subject to updates through-out the semester) is available here.
Find information on assignments here.
Office Hours: Engineering 265¶
Tuesday: 9:30-11am Wednesday: 12-1:30pm


elogind-243.7
Introduction to elogind
elogind is the systemd project's "logind", extracted out to
be a standalone daemon. It integrates with Linux-PAM-1.3.1 to know the set of users that
are logged in to a system and whether they are logged in
graphically, on the console, or remotely. Elogind exposes this information via the
standard org.freedesktop.login1 D-Bus interface, as well as through the file
system using systemd's standard /run/systemd
layout.
This package is known to build and work properly using an LFS-9.1
platform.
Package Information
elogind Dependencies
Required
dbus-1.12.16
Recommended
docbook-xml-4.5, docbook-xsl-1.79.2, and libxslt-1.1.34 (to build the man pages),
Linux-PAM-1.3.1, and Polkit-0.116
(runtime)
Optional
For the tests: lxml-4.5.0, gobject-introspection-1.64.0,
zsh-5.8, Valgrind-3.15.0, audit-userspace,
bash-completion,
kexec,
and SELinux
User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/elogind
Kernel
Configuration
Enable the following options in the kernel configuration and
recompile the kernel if necessary:
General setup --->
[*] Control Group support [CONFIG_CGROUPS]
File systems --->
[*] Inotify support for userspace [CONFIG_INOTIFY_USER]
Pseudo filesystems --->
[*] Tmpfs POSIX Access Control Lists [CONFIG_TMPFS_POSIX_ACL]
In addition, some tests need the userspace cryptographic kernel
API, which is enabled with:
-*- Cryptographic API ---> [CONFIG_CRYPTO]
<M/*> Userspace cryptographic algorithm configuration [CONFIG_CRYPTO_USER]
<M/*> User-space interface for hash algorithms [CONFIG_CRYPTO_USER_API_HASH]
Installation of elogind
Install elogind by running the
following commands:
mkdir build &&
cd build &&
meson --prefix=/usr \
--sysconfdir=/etc \
--localstatedir=/var \
-Dcgroup-controller=elogind \
-Ddbuspolicydir=/etc/dbus-1/system.d \
-Dman=auto \
.. &&
ninja
To test the results, issue: ninja
test. A few tests are skipped if not run with
root
privileges.
Now, as the root
user:
ninja install &&
ln -sfv libelogind.pc /usr/lib/pkgconfig/libsystemd.pc &&
ln -sfvn elogind /usr/include/systemd
Command Explanations
-Dcgroup-controller=elogind
: This
switch ensures that elogind is
selected as the cgroup controller, even if booted with another
running cgroup controller.
-Ddbuspolicydir=/etc/dbus-1/system.d
:
This switch sets the location of the D-Bus policy directory.
-Dman=auto
: The default
value of this switch is false. Setting it to auto allows building and installing the
man pages if the recommended dependencies are installed.
ln -s ...: These
commands install symlinks so that software packages find systemd
compatible library and headers.
Configuring elogind
Each user will need to register a user session using Linux-PAM at login. The /etc/pam.d/system-session
file needs to be
modified and a new file needs to be created in order for
elogind to work
correctly. Run the following commands as the root
user:
cat >> /etc/pam.d/system-session << "EOF" &&
# Begin elogind addition
session required pam_loginuid.so
session optional pam_elogind.so
# End elogind addition
EOF
cat > /etc/pam.d/elogind-user << "EOF"
# Begin /etc/pam.d/elogind-user
account required pam_access.so
account include system-account
session required pam_env.so
session required pam_limits.so
session required pam_unix.so
session required pam_loginuid.so
session optional pam_keyinit.so force revoke
session optional pam_elogind.so
auth required pam_deny.so
password required pam_deny.so
# End /etc/pam.d/elogind-user
EOF
Contents
Installed Programs:
busctl, elogind-inhibit, and
loginctl
Installed Library:
libelogind.so
Installed Directories:
/lib/elogind, /etc/elogind,
/usr/include/elogind, and /usr/share/doc/elogind-243.7
Short Descriptions
|
busctl
|
is used to introspect and monitor the D-Bus bus.
|
|
elogind-inhibit
|
is used to execute a program with a shutdown, sleep or
idle inhibitor lock taken.
|
|
loginctl
|
is used to introspect and control the state of the
elogind Login Manager.
|
|
libelogind.so
|
is the main elogind utility library.
|
Last updated on 2020-03-12 15:57:03 -0500


---
toc: true
layout: archive
author_profile: false
title: Welcome to the Q# Community!
permalink: /
---
👋 Welcome!
The Q# Community collects + maintains projects related to the Q# programming language by a community of folks who are excited about quantum programming!
{{ site.data.ui-text[site.locale].recent_posts | default: "Featured Community Projects" }}
{% include feature_row %}
{{ site.data.ui-text[site.locale].recent_posts | default: "Recent Community Posts" }}
{% for post in paginator.posts %}
{% include archive-single.html %}
{% endfor %}
{% include paginator.html %}